From 314ef1dd497449ecba0d539afa9e52493247393a Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Tue, 25 Mar 2025 14:35:49 -0400 Subject: [PATCH 01/80] Fix broken links in report summary Resolves #566 --- __tests__/__outputs__/dart-json.md | 10 +- __tests__/__outputs__/dotnet-nunit.md | 6 +- __tests__/__outputs__/dotnet-trx.md | 6 +- .../fluent-validation-test-results.md | 250 +++---- __tests__/__outputs__/jest-junit-eslint.md | 6 +- __tests__/__outputs__/jest-junit.md | 10 +- .../jest-react-component-test-results.md | 6 +- __tests__/__outputs__/jest-test-results.md | 10 +- __tests__/__outputs__/junit-with-message.md | 6 +- __tests__/__outputs__/mocha-json.md | 10 +- __tests__/__outputs__/mocha-test-results.md | 146 ++-- .../__outputs__/provider-test-results.md | 66 +- .../pulsar-test-results-no-merge.md | 6 +- __tests__/__outputs__/pulsar-test-results.md | 706 +++++++++--------- __tests__/__outputs__/rspec-json.md | 6 +- .../__outputs__/silent-notes-test-results.md | 54 +- __tests__/__outputs__/swift-xunit.md | 6 +- src/report/get-report.ts | 14 +- src/utils/slugger.ts | 7 +- 19 files changed, 667 insertions(+), 664 deletions(-) diff --git a/__tests__/__outputs__/dart-json.md b/__tests__/__outputs__/dart-json.md index dfe8e05..9805d20 100644 --- a/__tests__/__outputs__/dart-json.md +++ b/__tests__/__outputs__/dart-json.md @@ -2,13 +2,13 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/dart-json.json|1 ✅|4 ❌|1 ⚪|4s| -## ❌ fixtures/dart-json.json +## ❌ fixtures/dart-json.json **6** tests were completed in **4s** with **1** passed, **4** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[test/main_test.dart](#r0s0)|1 ✅|3 ❌||74ms| -|[test/second_test.dart](#r0s1)||1 ❌|1 ⚪|51ms| -### ❌ test/main_test.dart +|[test/main_test.dart](#user-content-r0s0)|1 ✅|3 ❌||74ms| +|[test/second_test.dart](#user-content-r0s1)||1 ❌|1 ⚪|51ms| +### ❌ test/main_test.dart ``` Test 1 ✅ Passing test @@ -23,7 +23,7 @@ Test 2 ❌ Exception in test Exception: Some error ``` -### ❌ test/second_test.dart +### ❌ test/second_test.dart ``` ❌ Timeout test TimeoutException after 0:00:00.000001: Test timed out after 0 seconds. diff --git a/__tests__/__outputs__/dotnet-nunit.md b/__tests__/__outputs__/dotnet-nunit.md index c7f2d52..e33c66d 100644 --- a/__tests__/__outputs__/dotnet-nunit.md +++ b/__tests__/__outputs__/dotnet-nunit.md @@ -2,12 +2,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/dotnet-nunit.xml|3 ✅|5 ❌|1 ⚪|230ms| -## ❌ fixtures/dotnet-nunit.xml +## ❌ fixtures/dotnet-nunit.xml **9** tests were completed in **230ms** with **3** passed, **5** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[DotnetTests.NUnitV3Tests.dll.DotnetTests.XUnitTests](#r0s0)|3 ✅|5 ❌|1 ⚪|69ms| -### ❌ DotnetTests.NUnitV3Tests.dll.DotnetTests.XUnitTests +|[DotnetTests.NUnitV3Tests.dll.DotnetTests.XUnitTests](#user-content-r0s0)|3 ✅|5 ❌|1 ⚪|69ms| +### ❌ DotnetTests.NUnitV3Tests.dll.DotnetTests.XUnitTests ``` CalculatorTests ✅ Is_Even_Number(2) diff --git a/__tests__/__outputs__/dotnet-trx.md b/__tests__/__outputs__/dotnet-trx.md index 7a38b19..eedab46 100644 --- a/__tests__/__outputs__/dotnet-trx.md +++ b/__tests__/__outputs__/dotnet-trx.md @@ -2,12 +2,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/dotnet-trx.trx|5 ✅|5 ❌|1 ⚪|1s| -## ❌ fixtures/dotnet-trx.trx +## ❌ fixtures/dotnet-trx.trx **11** tests were completed in **1s** with **5** passed, **5** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[DotnetTests.XUnitTests.CalculatorTests](#r0s0)|5 ✅|5 ❌|1 ⚪|118ms| -### ❌ DotnetTests.XUnitTests.CalculatorTests +|[DotnetTests.XUnitTests.CalculatorTests](#user-content-r0s0)|5 ✅|5 ❌|1 ⚪|118ms| +### ❌ DotnetTests.XUnitTests.CalculatorTests ``` ✅ Custom Name ❌ Exception_In_TargetTest diff --git a/__tests__/__outputs__/fluent-validation-test-results.md b/__tests__/__outputs__/fluent-validation-test-results.md index fe13390..9337a62 100644 --- a/__tests__/__outputs__/fluent-validation-test-results.md +++ b/__tests__/__outputs__/fluent-validation-test-results.md @@ -4,73 +4,73 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/FluentValidation.Tests.trx|803 ✅||1 ⚪|4s| -## ✅ fixtures/external/FluentValidation.Tests.trx +## ✅ fixtures/external/FluentValidation.Tests.trx **804** tests were completed in **4s** with **803** passed, **0** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[FluentValidation.Tests.AbstractValidatorTester](#r0s0)|35 ✅|||12ms| -|[FluentValidation.Tests.AccessorCacheTests](#r0s1)|4 ✅||1 ⚪|4ms| -|[FluentValidation.Tests.AssemblyScannerTester](#r0s2)|2 ✅|||2ms| -|[FluentValidation.Tests.CascadingFailuresTester](#r0s3)|38 ✅|||23ms| -|[FluentValidation.Tests.ChainedValidationTester](#r0s4)|13 ✅|||6ms| -|[FluentValidation.Tests.ChainingValidatorsTester](#r0s5)|3 ✅|||1ms| -|[FluentValidation.Tests.ChildRulesTests](#r0s6)|2 ✅|||7ms| -|[FluentValidation.Tests.CollectionValidatorWithParentTests](#r0s7)|16 ✅|||13ms| -|[FluentValidation.Tests.ComplexValidationTester](#r0s8)|17 ✅|||26ms| -|[FluentValidation.Tests.ConditionTests](#r0s9)|18 ✅|||9ms| -|[FluentValidation.Tests.CreditCardValidatorTests](#r0s10)|2 ✅|||2ms| -|[FluentValidation.Tests.CustomFailureActionTester](#r0s11)|3 ✅|||1ms| -|[FluentValidation.Tests.CustomMessageFormatTester](#r0s12)|6 ✅|||3ms| -|[FluentValidation.Tests.CustomValidatorTester](#r0s13)|10 ✅|||6ms| -|[FluentValidation.Tests.DefaultValidatorExtensionTester](#r0s14)|30 ✅|||38ms| -|[FluentValidation.Tests.EmailValidatorTests](#r0s15)|36 ✅|||18ms| -|[FluentValidation.Tests.EmptyTester](#r0s16)|9 ✅|||5ms| -|[FluentValidation.Tests.EnumValidatorTests](#r0s17)|12 ✅|||24ms| -|[FluentValidation.Tests.EqualValidatorTests](#r0s18)|10 ✅|||3ms| -|[FluentValidation.Tests.ExactLengthValidatorTester](#r0s19)|6 ✅|||2ms| -|[FluentValidation.Tests.ExclusiveBetweenValidatorTests](#r0s20)|19 ✅|||6ms| -|[FluentValidation.Tests.ExtensionTester](#r0s21)|4 ✅|||1ms| -|[FluentValidation.Tests.ForEachRuleTests](#r0s22)|34 ✅|||47ms| -|[FluentValidation.Tests.GreaterThanOrEqualToValidatorTester](#r0s23)|14 ✅|||5ms| -|[FluentValidation.Tests.GreaterThanValidatorTester](#r0s24)|13 ✅|||4ms| -|[FluentValidation.Tests.InclusiveBetweenValidatorTests](#r0s25)|18 ✅|||4ms| -|[FluentValidation.Tests.InheritanceValidatorTest](#r0s26)|11 ✅|||18ms| -|[FluentValidation.Tests.InlineValidatorTester](#r0s27)|1 ✅|||2ms| -|[FluentValidation.Tests.LanguageManagerTests](#r0s28)|21 ✅|||28ms| -|[FluentValidation.Tests.LengthValidatorTests](#r0s29)|16 ✅|||17ms| -|[FluentValidation.Tests.LessThanOrEqualToValidatorTester](#r0s30)|13 ✅|||4ms| -|[FluentValidation.Tests.LessThanValidatorTester](#r0s31)|16 ✅|||6ms| -|[FluentValidation.Tests.LocalisedMessagesTester](#r0s32)|6 ✅|||3ms| -|[FluentValidation.Tests.LocalisedNameTester](#r0s33)|2 ✅|||1ms| -|[FluentValidation.Tests.MemberAccessorTests](#r0s34)|9 ✅|||5ms| -|[FluentValidation.Tests.MessageFormatterTests](#r0s35)|10 ✅|||2ms| -|[FluentValidation.Tests.ModelLevelValidatorTests](#r0s36)|2 ✅|||1ms| -|[FluentValidation.Tests.NameResolutionPluggabilityTester](#r0s37)|3 ✅|||2ms| -|[FluentValidation.Tests.NotEmptyTester](#r0s38)|10 ✅|||7ms| -|[FluentValidation.Tests.NotEqualValidatorTests](#r0s39)|11 ✅|||7ms| -|[FluentValidation.Tests.NotNullTester](#r0s40)|5 ✅|||1ms| -|[FluentValidation.Tests.NullTester](#r0s41)|5 ✅|||2ms| -|[FluentValidation.Tests.OnFailureTests](#r0s42)|10 ✅|||8ms| -|[FluentValidation.Tests.PredicateValidatorTester](#r0s43)|5 ✅|||2ms| -|[FluentValidation.Tests.PropertyChainTests](#r0s44)|7 ✅|||1ms| -|[FluentValidation.Tests.RegularExpressionValidatorTests](#r0s45)|15 ✅|||6ms| -|[FluentValidation.Tests.RuleBuilderTests](#r0s46)|29 ✅|||96ms| -|[FluentValidation.Tests.RuleDependencyTests](#r0s47)|14 ✅|||3s| -|[FluentValidation.Tests.RulesetTests](#r0s48)|21 ✅|||14ms| -|[FluentValidation.Tests.ScalePrecisionValidatorTests](#r0s49)|6 ✅|||4ms| -|[FluentValidation.Tests.SharedConditionTests](#r0s50)|42 ✅|||42ms| -|[FluentValidation.Tests.StandalonePropertyValidationTester](#r0s51)|1 ✅|||0ms| -|[FluentValidation.Tests.StringEnumValidatorTests](#r0s52)|10 ✅|||5ms| -|[FluentValidation.Tests.TrackingCollectionTests](#r0s53)|3 ✅|||2ms| -|[FluentValidation.Tests.TransformTests](#r0s54)|4 ✅|||3ms| -|[FluentValidation.Tests.UserSeverityTester](#r0s55)|7 ✅|||3ms| -|[FluentValidation.Tests.UserStateTester](#r0s56)|4 ✅|||3ms| -|[FluentValidation.Tests.ValidateAndThrowTester](#r0s57)|14 ✅|||25ms| -|[FluentValidation.Tests.ValidationResultTests](#r0s58)|8 ✅|||8ms| -|[FluentValidation.Tests.ValidatorDescriptorTester](#r0s59)|5 ✅|||1ms| -|[FluentValidation.Tests.ValidatorSelectorTests](#r0s60)|10 ✅|||9ms| -|[FluentValidation.Tests.ValidatorTesterTester](#r0s61)|73 ✅|||74ms| -### ✅ FluentValidation.Tests.AbstractValidatorTester +|[FluentValidation.Tests.AbstractValidatorTester](#user-content-r0s0)|35 ✅|||12ms| +|[FluentValidation.Tests.AccessorCacheTests](#user-content-r0s1)|4 ✅||1 ⚪|4ms| +|[FluentValidation.Tests.AssemblyScannerTester](#user-content-r0s2)|2 ✅|||2ms| +|[FluentValidation.Tests.CascadingFailuresTester](#user-content-r0s3)|38 ✅|||23ms| +|[FluentValidation.Tests.ChainedValidationTester](#user-content-r0s4)|13 ✅|||6ms| +|[FluentValidation.Tests.ChainingValidatorsTester](#user-content-r0s5)|3 ✅|||1ms| +|[FluentValidation.Tests.ChildRulesTests](#user-content-r0s6)|2 ✅|||7ms| +|[FluentValidation.Tests.CollectionValidatorWithParentTests](#user-content-r0s7)|16 ✅|||13ms| +|[FluentValidation.Tests.ComplexValidationTester](#user-content-r0s8)|17 ✅|||26ms| +|[FluentValidation.Tests.ConditionTests](#user-content-r0s9)|18 ✅|||9ms| +|[FluentValidation.Tests.CreditCardValidatorTests](#user-content-r0s10)|2 ✅|||2ms| +|[FluentValidation.Tests.CustomFailureActionTester](#user-content-r0s11)|3 ✅|||1ms| +|[FluentValidation.Tests.CustomMessageFormatTester](#user-content-r0s12)|6 ✅|||3ms| +|[FluentValidation.Tests.CustomValidatorTester](#user-content-r0s13)|10 ✅|||6ms| +|[FluentValidation.Tests.DefaultValidatorExtensionTester](#user-content-r0s14)|30 ✅|||38ms| +|[FluentValidation.Tests.EmailValidatorTests](#user-content-r0s15)|36 ✅|||18ms| +|[FluentValidation.Tests.EmptyTester](#user-content-r0s16)|9 ✅|||5ms| +|[FluentValidation.Tests.EnumValidatorTests](#user-content-r0s17)|12 ✅|||24ms| +|[FluentValidation.Tests.EqualValidatorTests](#user-content-r0s18)|10 ✅|||3ms| +|[FluentValidation.Tests.ExactLengthValidatorTester](#user-content-r0s19)|6 ✅|||2ms| +|[FluentValidation.Tests.ExclusiveBetweenValidatorTests](#user-content-r0s20)|19 ✅|||6ms| +|[FluentValidation.Tests.ExtensionTester](#user-content-r0s21)|4 ✅|||1ms| +|[FluentValidation.Tests.ForEachRuleTests](#user-content-r0s22)|34 ✅|||47ms| +|[FluentValidation.Tests.GreaterThanOrEqualToValidatorTester](#user-content-r0s23)|14 ✅|||5ms| +|[FluentValidation.Tests.GreaterThanValidatorTester](#user-content-r0s24)|13 ✅|||4ms| +|[FluentValidation.Tests.InclusiveBetweenValidatorTests](#user-content-r0s25)|18 ✅|||4ms| +|[FluentValidation.Tests.InheritanceValidatorTest](#user-content-r0s26)|11 ✅|||18ms| +|[FluentValidation.Tests.InlineValidatorTester](#user-content-r0s27)|1 ✅|||2ms| +|[FluentValidation.Tests.LanguageManagerTests](#user-content-r0s28)|21 ✅|||28ms| +|[FluentValidation.Tests.LengthValidatorTests](#user-content-r0s29)|16 ✅|||17ms| +|[FluentValidation.Tests.LessThanOrEqualToValidatorTester](#user-content-r0s30)|13 ✅|||4ms| +|[FluentValidation.Tests.LessThanValidatorTester](#user-content-r0s31)|16 ✅|||6ms| +|[FluentValidation.Tests.LocalisedMessagesTester](#user-content-r0s32)|6 ✅|||3ms| +|[FluentValidation.Tests.LocalisedNameTester](#user-content-r0s33)|2 ✅|||1ms| +|[FluentValidation.Tests.MemberAccessorTests](#user-content-r0s34)|9 ✅|||5ms| +|[FluentValidation.Tests.MessageFormatterTests](#user-content-r0s35)|10 ✅|||2ms| +|[FluentValidation.Tests.ModelLevelValidatorTests](#user-content-r0s36)|2 ✅|||1ms| +|[FluentValidation.Tests.NameResolutionPluggabilityTester](#user-content-r0s37)|3 ✅|||2ms| +|[FluentValidation.Tests.NotEmptyTester](#user-content-r0s38)|10 ✅|||7ms| +|[FluentValidation.Tests.NotEqualValidatorTests](#user-content-r0s39)|11 ✅|||7ms| +|[FluentValidation.Tests.NotNullTester](#user-content-r0s40)|5 ✅|||1ms| +|[FluentValidation.Tests.NullTester](#user-content-r0s41)|5 ✅|||2ms| +|[FluentValidation.Tests.OnFailureTests](#user-content-r0s42)|10 ✅|||8ms| +|[FluentValidation.Tests.PredicateValidatorTester](#user-content-r0s43)|5 ✅|||2ms| +|[FluentValidation.Tests.PropertyChainTests](#user-content-r0s44)|7 ✅|||1ms| +|[FluentValidation.Tests.RegularExpressionValidatorTests](#user-content-r0s45)|15 ✅|||6ms| +|[FluentValidation.Tests.RuleBuilderTests](#user-content-r0s46)|29 ✅|||96ms| +|[FluentValidation.Tests.RuleDependencyTests](#user-content-r0s47)|14 ✅|||3s| +|[FluentValidation.Tests.RulesetTests](#user-content-r0s48)|21 ✅|||14ms| +|[FluentValidation.Tests.ScalePrecisionValidatorTests](#user-content-r0s49)|6 ✅|||4ms| +|[FluentValidation.Tests.SharedConditionTests](#user-content-r0s50)|42 ✅|||42ms| +|[FluentValidation.Tests.StandalonePropertyValidationTester](#user-content-r0s51)|1 ✅|||0ms| +|[FluentValidation.Tests.StringEnumValidatorTests](#user-content-r0s52)|10 ✅|||5ms| +|[FluentValidation.Tests.TrackingCollectionTests](#user-content-r0s53)|3 ✅|||2ms| +|[FluentValidation.Tests.TransformTests](#user-content-r0s54)|4 ✅|||3ms| +|[FluentValidation.Tests.UserSeverityTester](#user-content-r0s55)|7 ✅|||3ms| +|[FluentValidation.Tests.UserStateTester](#user-content-r0s56)|4 ✅|||3ms| +|[FluentValidation.Tests.ValidateAndThrowTester](#user-content-r0s57)|14 ✅|||25ms| +|[FluentValidation.Tests.ValidationResultTests](#user-content-r0s58)|8 ✅|||8ms| +|[FluentValidation.Tests.ValidatorDescriptorTester](#user-content-r0s59)|5 ✅|||1ms| +|[FluentValidation.Tests.ValidatorSelectorTests](#user-content-r0s60)|10 ✅|||9ms| +|[FluentValidation.Tests.ValidatorTesterTester](#user-content-r0s61)|73 ✅|||74ms| +### ✅ FluentValidation.Tests.AbstractValidatorTester ``` ✅ Can_replace_default_errorcode_resolver ✅ CanValidateInstancesOfType_returns_false_when_comparing_against_some_other_type @@ -108,7 +108,7 @@ ✅ WithName_should_override_field_name ✅ WithName_should_override_field_name_with_value_from_other_property ``` -### ✅ FluentValidation.Tests.AccessorCacheTests +### ✅ FluentValidation.Tests.AccessorCacheTests ``` ⚪ Benchmark ✅ Equality_comparison_check @@ -116,12 +116,12 @@ ✅ Gets_member_for_nested_property ✅ Identifies_if_memberexp_acts_on_model_instance ``` -### ✅ FluentValidation.Tests.AssemblyScannerTester +### ✅ FluentValidation.Tests.AssemblyScannerTester ``` ✅ Finds_validators_for_types ✅ ForEach_iterates_over_types ``` -### ✅ FluentValidation.Tests.CascadingFailuresTester +### ✅ FluentValidation.Tests.CascadingFailuresTester ``` ✅ Cascade_mode_can_be_set_after_validator_instantiated ✅ Cascade_mode_can_be_set_after_validator_instantiated_async @@ -162,7 +162,7 @@ ✅ Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_async_legacy ✅ Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_validator_level_legacy ``` -### ✅ FluentValidation.Tests.ChainedValidationTester +### ✅ FluentValidation.Tests.ChainedValidationTester ``` ✅ Can_validate_using_validator_for_base_type ✅ Chained_property_should_be_excluded @@ -178,18 +178,18 @@ ✅ Uses_explicit_ruleset ✅ Validates_chained_property ``` -### ✅ FluentValidation.Tests.ChainingValidatorsTester +### ✅ FluentValidation.Tests.ChainingValidatorsTester ``` ✅ Options_should_only_apply_to_current_validator ✅ Should_create_multiple_validators ✅ Should_execute_multiple_validators ``` -### ✅ FluentValidation.Tests.ChildRulesTests +### ✅ FluentValidation.Tests.ChildRulesTests ``` ✅ Can_define_nested_rules_for_collection ✅ ChildRules_works_with_RuleSet ``` -### ✅ FluentValidation.Tests.CollectionValidatorWithParentTests +### ✅ FluentValidation.Tests.CollectionValidatorWithParentTests ``` ✅ Async_condition_should_work_with_child_collection ✅ Can_specify_condition_for_individual_collection_elements @@ -208,7 +208,7 @@ ✅ Validates_collection_several_levels_deep ✅ Validates_collection_several_levels_deep_async ``` -### ✅ FluentValidation.Tests.ComplexValidationTester +### ✅ FluentValidation.Tests.ComplexValidationTester ``` ✅ Async_condition_should_work_with_complex_property ✅ Async_condition_should_work_with_complex_property_when_validator_invoked_synchronously @@ -228,7 +228,7 @@ ✅ Validates_child_validator_synchronously ✅ Validates_complex_property ``` -### ✅ FluentValidation.Tests.ConditionTests +### ✅ FluentValidation.Tests.ConditionTests ``` ✅ Async_condition_executed_synchronosuly_with_asynchronous_collection_rule ✅ Async_condition_executed_synchronosuly_with_asynchronous_rule @@ -249,18 +249,18 @@ ✅ Validation_should_succeed_when_condition_does_not_match ✅ Validation_should_succeed_when_condition_matches ``` -### ✅ FluentValidation.Tests.CreditCardValidatorTests +### ✅ FluentValidation.Tests.CreditCardValidatorTests ``` ✅ IsValidTests ✅ When_validation_fails_the_default_error_should_be_set ``` -### ✅ FluentValidation.Tests.CustomFailureActionTester +### ✅ FluentValidation.Tests.CustomFailureActionTester ``` ✅ Does_not_invoke_action_if_validation_success ✅ Invokes_custom_action_on_failure ✅ Passes_object_being_validated_to_action ``` -### ✅ FluentValidation.Tests.CustomMessageFormatTester +### ✅ FluentValidation.Tests.CustomMessageFormatTester ``` ✅ Replaces_propertyvalue_placeholder ✅ Replaces_propertyvalue_with_empty_string_when_null @@ -269,7 +269,7 @@ ✅ Uses_custom_delegate_for_building_message_only_for_specific_validator ✅ Uses_property_value_in_message ``` -### ✅ FluentValidation.Tests.CustomValidatorTester +### ✅ FluentValidation.Tests.CustomValidatorTester ``` ✅ New_Custom_Returns_single_failure ✅ New_Custom_Returns_single_failure_async @@ -282,7 +282,7 @@ ✅ Runs_async_rule_synchronously_when_validator_invoked_synchronously ✅ Runs_sync_rule_asynchronously_when_validator_invoked_asynchronously ``` -### ✅ FluentValidation.Tests.DefaultValidatorExtensionTester +### ✅ FluentValidation.Tests.DefaultValidatorExtensionTester ``` ✅ Empty_should_create_EmptyValidator ✅ Equal_should_create_EqualValidator_with_explicit_value @@ -315,7 +315,7 @@ ✅ ScalePrecision_should_create_ScalePrecisionValidator ✅ ScalePrecision_should_create_ScalePrecisionValidator_with_ignore_trailing_zeros ``` -### ✅ FluentValidation.Tests.EmailValidatorTests +### ✅ FluentValidation.Tests.EmailValidatorTests ``` ✅ Fails_email_validation_aspnetcore_compatible(email: " \r \t \n") ✅ Fails_email_validation_aspnetcore_compatible(email: "") @@ -354,7 +354,7 @@ ✅ Valid_email_addresses_regex(email: "testperson+label@gmail.com") ✅ Valid_email_addresses_regex(email: null) ``` -### ✅ FluentValidation.Tests.EmptyTester +### ✅ FluentValidation.Tests.EmptyTester ``` ✅ Passes_for_ienumerable_that_doesnt_implement_ICollection ✅ Passes_when_collection_empty @@ -366,7 +366,7 @@ ✅ When_value_is_null_validator_should_pass ✅ When_value_is_whitespace_validation_should_pass ``` -### ✅ FluentValidation.Tests.EnumValidatorTests +### ✅ FluentValidation.Tests.EnumValidatorTests ``` ✅ Flags_enum_invalid_when_using_outofrange_negative_value ✅ Flags_enum_invalid_when_using_outofrange_positive_value @@ -381,7 +381,7 @@ ✅ When_the_enum_is_not_initialized_with_valid_value_then_the_validator_should_fail ✅ When_validation_fails_the_default_error_should_be_set ``` -### ✅ FluentValidation.Tests.EqualValidatorTests +### ✅ FluentValidation.Tests.EqualValidatorTests ``` ✅ Comparison_property_uses_custom_resolver ✅ Should_store_comparison_type @@ -394,7 +394,7 @@ ✅ When_the_objects_are_not_equal_validation_should_fail ✅ When_validation_fails_the_error_should_be_set ``` -### ✅ FluentValidation.Tests.ExactLengthValidatorTester +### ✅ FluentValidation.Tests.ExactLengthValidatorTester ``` ✅ Min_and_max_properties_should_be_set ✅ When_exact_length_rule_failes_error_should_have_exact_length_error_errorcode @@ -403,7 +403,7 @@ ✅ When_the_text_length_is_smaller_the_validator_should_fail ✅ When_the_validator_fails_the_error_message_should_be_set ``` -### ✅ FluentValidation.Tests.ExclusiveBetweenValidatorTests +### ✅ FluentValidation.Tests.ExclusiveBetweenValidatorTests ``` ✅ To_and_from_properties_should_be_set ✅ To_and_from_properties_should_be_set_for_dates @@ -425,14 +425,14 @@ ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail_for_strings ``` -### ✅ FluentValidation.Tests.ExtensionTester +### ✅ FluentValidation.Tests.ExtensionTester ``` ✅ Should_extract_member_from_member_expression ✅ Should_return_null_for_non_member_expressions ✅ Should_split_pascal_cased_member_name ✅ SplitPascalCase_should_return_null_when_input_is_null ``` -### ✅ FluentValidation.Tests.ForEachRuleTests +### ✅ FluentValidation.Tests.ForEachRuleTests ``` ✅ Async_condition_should_work_with_child_collection ✅ Can_access_colletion_index @@ -469,7 +469,7 @@ ✅ When_runs_outside_RuleForEach_loop ✅ When_runs_outside_RuleForEach_loop_async ``` -### ✅ FluentValidation.Tests.GreaterThanOrEqualToValidatorTester +### ✅ FluentValidation.Tests.GreaterThanOrEqualToValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_type @@ -486,7 +486,7 @@ ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_property ``` -### ✅ FluentValidation.Tests.GreaterThanValidatorTester +### ✅ FluentValidation.Tests.GreaterThanValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_Type @@ -502,7 +502,7 @@ ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_property ``` -### ✅ FluentValidation.Tests.InclusiveBetweenValidatorTests +### ✅ FluentValidation.Tests.InclusiveBetweenValidatorTests ``` ✅ To_and_from_properties_should_be_set ✅ To_and_from_properties_should_be_set_for_strings @@ -523,7 +523,7 @@ ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail ✅ When_the_value_is_smaller_than_the_range_then_the_validator_should_fail_for_strings ``` -### ✅ FluentValidation.Tests.InheritanceValidatorTest +### ✅ FluentValidation.Tests.InheritanceValidatorTest ``` ✅ Can_use_custom_subclass_with_nongeneric_overload ✅ Validates_collection @@ -537,11 +537,11 @@ ✅ Validates_with_callback_accepting_derived_async ✅ Validates_with_callback_async ``` -### ✅ FluentValidation.Tests.InlineValidatorTester +### ✅ FluentValidation.Tests.InlineValidatorTester ``` ✅ Uses_inline_validator_to_build_rules ``` -### ✅ FluentValidation.Tests.LanguageManagerTests +### ✅ FluentValidation.Tests.LanguageManagerTests ``` ✅ All_languages_should_be_loaded ✅ All_localizations_have_same_parameters_as_English @@ -565,7 +565,7 @@ ✅ Gets_translation_for_specific_culture ✅ Uses_error_code_as_localization_key ``` -### ✅ FluentValidation.Tests.LengthValidatorTests +### ✅ FluentValidation.Tests.LengthValidatorTests ``` ✅ Min_and_max_properties_should_be_set ✅ When_input_is_null_then_the_validator_should_pass @@ -584,7 +584,7 @@ ✅ When_the_text_is_smaller_than_the_range_then_the_validator_should_fail ✅ When_the_validator_fails_the_error_message_should_be_set ``` -### ✅ FluentValidation.Tests.LessThanOrEqualToValidatorTester +### ✅ FluentValidation.Tests.LessThanOrEqualToValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_type @@ -600,7 +600,7 @@ ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_property ``` -### ✅ FluentValidation.Tests.LessThanValidatorTester +### ✅ FluentValidation.Tests.LessThanValidatorTester ``` ✅ Comparison_property_uses_custom_resolver ✅ Comparison_type @@ -619,7 +619,7 @@ ✅ Validates_with_nullable_when_property_not_null_cross_property ✅ Validates_with_nullable_when_property_null_cross_property ``` -### ✅ FluentValidation.Tests.LocalisedMessagesTester +### ✅ FluentValidation.Tests.LocalisedMessagesTester ``` ✅ Correctly_assigns_default_localized_error_message ✅ Does_not_throw_InvalidCastException_when_using_RuleForEach @@ -628,12 +628,12 @@ ✅ Uses_func_to_get_message ✅ Uses_string_format_with_property_value ``` -### ✅ FluentValidation.Tests.LocalisedNameTester +### ✅ FluentValidation.Tests.LocalisedNameTester ``` ✅ Uses_localized_name ✅ Uses_localized_name_expression ``` -### ✅ FluentValidation.Tests.MemberAccessorTests +### ✅ FluentValidation.Tests.MemberAccessorTests ``` ✅ ComplexPropertyGet ✅ ComplexPropertySet @@ -645,7 +645,7 @@ ✅ SimplePropertyGet ✅ SimplePropertySet ``` -### ✅ FluentValidation.Tests.MessageFormatterTests +### ✅ FluentValidation.Tests.MessageFormatterTests ``` ✅ Adds_argument_and_custom_arguments ✅ Adds_formatted_argument_and_custom_arguments @@ -658,18 +658,18 @@ ✅ Understands_date_formats ✅ Understands_numeric_formats ``` -### ✅ FluentValidation.Tests.ModelLevelValidatorTests +### ✅ FluentValidation.Tests.ModelLevelValidatorTests ``` ✅ Can_use_child_validator_at_model_level ✅ Validates_at_model_level ``` -### ✅ FluentValidation.Tests.NameResolutionPluggabilityTester +### ✅ FluentValidation.Tests.NameResolutionPluggabilityTester ``` ✅ Resolves_nested_properties ✅ ShouldHaveValidationError_Should_support_custom_propertynameresolver ✅ Uses_custom_property_name ``` -### ✅ FluentValidation.Tests.NotEmptyTester +### ✅ FluentValidation.Tests.NotEmptyTester ``` ✅ Fails_for_array ✅ Fails_for_ienumerable_that_doesnt_implement_ICollection @@ -682,7 +682,7 @@ ✅ When_value_is_null_validator_should_fail ✅ When_value_is_whitespace_validation_should_fail ``` -### ✅ FluentValidation.Tests.NotEqualValidatorTests +### ✅ FluentValidation.Tests.NotEqualValidatorTests ``` ✅ Comparison_property_uses_custom_resolver ✅ Should_handle_custom_value_types_correctly @@ -696,7 +696,7 @@ ✅ When_the_objects_are_not_equal_then_the_validator_should_pass ✅ When_the_validator_fails_the_error_message_should_be_set ``` -### ✅ FluentValidation.Tests.NotNullTester +### ✅ FluentValidation.Tests.NotNullTester ``` ✅ Fails_when_nullable_value_type_is_null ✅ Not_null_validator_should_not_crash_with_non_nullable_value_type @@ -704,7 +704,7 @@ ✅ NotNullValidator_should_pass_if_value_has_value ✅ When_the_validator_fails_the_error_message_should_be_set ``` -### ✅ FluentValidation.Tests.NullTester +### ✅ FluentValidation.Tests.NullTester ``` ✅ Not_null_validator_should_not_crash_with_non_nullable_value_type ✅ NullValidator_should_fail_if_value_has_value @@ -712,7 +712,7 @@ ✅ Passes_when_nullable_value_type_is_null ✅ When_the_validator_passes_the_error_message_should_be_set ``` -### ✅ FluentValidation.Tests.OnFailureTests +### ✅ FluentValidation.Tests.OnFailureTests ``` ✅ OnFailure_called_for_each_failed_rule ✅ OnFailure_called_for_each_failed_rule_asyncAsync @@ -725,7 +725,7 @@ ✅ WhenWithOnFailure_should_invoke_condition_on_async_inner_validator ✅ WhenWithOnFailure_should_invoke_condition_on_inner_validator ``` -### ✅ FluentValidation.Tests.PredicateValidatorTester +### ✅ FluentValidation.Tests.PredicateValidatorTester ``` ✅ Should_fail_when_predicate_returns_false ✅ Should_succeed_when_predicate_returns_true @@ -733,7 +733,7 @@ ✅ When_validation_fails_metadata_should_be_set_on_failure ✅ When_validation_fails_the_default_error_should_be_set ``` -### ✅ FluentValidation.Tests.PropertyChainTests +### ✅ FluentValidation.Tests.PropertyChainTests ``` ✅ AddIndexer_throws_when_nothing_added ✅ Calling_ToString_should_construct_string_representation_of_chain @@ -743,7 +743,7 @@ ✅ Should_ignore_blanks ✅ Should_not_be_subchain ``` -### ✅ FluentValidation.Tests.RegularExpressionValidatorTests +### ✅ FluentValidation.Tests.RegularExpressionValidatorTests ``` ✅ Can_access_expression_in_message ✅ Can_access_expression_in_message_lambda @@ -761,7 +761,7 @@ ✅ When_the_text_matches_the_regular_expression_then_the_validator_should_pass ✅ When_validation_fails_the_default_error_should_be_set ``` -### ✅ FluentValidation.Tests.RuleBuilderTests +### ✅ FluentValidation.Tests.RuleBuilderTests ``` ✅ Adding_a_validator_should_return_builder ✅ Adding_a_validator_should_store_validator @@ -793,7 +793,7 @@ ✅ Should_throw_when_inverse_predicate_is_null ✅ Should_throw_when_predicate_is_null ``` -### ✅ FluentValidation.Tests.RuleDependencyTests +### ✅ FluentValidation.Tests.RuleDependencyTests ``` ✅ Async_inside_dependent_rules ✅ Async_inside_dependent_rules_when_parent_rule_not_async @@ -810,7 +810,7 @@ ✅ TestAsyncWithDependentRules_SyncEntry ✅ Treats_root_level_RuleFor_call_as_dependent_rule_if_user_forgets_to_use_DependentRulesBuilder ``` -### ✅ FluentValidation.Tests.RulesetTests +### ✅ FluentValidation.Tests.RulesetTests ``` ✅ Applies_multiple_rulesets_to_rule ✅ Combines_rulesets_and_explicit_properties @@ -834,7 +834,7 @@ ✅ Trims_spaces ✅ WithMessage_works_inside_rulesets ``` -### ✅ FluentValidation.Tests.ScalePrecisionValidatorTests +### ✅ FluentValidation.Tests.ScalePrecisionValidatorTests ``` ✅ Scale_precision_should_be_valid ✅ Scale_precision_should_be_valid_when_ignoring_trailing_zeroes @@ -843,7 +843,7 @@ ✅ Scale_precision_should_not_be_valid_when_ignoring_trailing_zeroes ✅ Scale_precision_should_not_be_valid_when_they_are_equal ``` -### ✅ FluentValidation.Tests.SharedConditionTests +### ✅ FluentValidation.Tests.SharedConditionTests ``` ✅ Async_condition_can_be_used_inside_ruleset ✅ Condition_can_be_used_inside_ruleset @@ -888,11 +888,11 @@ ✅ When_condition_only_executed_once ✅ WhenAsync_condition_only_executed_once ``` -### ✅ FluentValidation.Tests.StandalonePropertyValidationTester +### ✅ FluentValidation.Tests.StandalonePropertyValidationTester ``` ✅ Should_validate_property_value_without_instance ``` -### ✅ FluentValidation.Tests.StringEnumValidatorTests +### ✅ FluentValidation.Tests.StringEnumValidatorTests ``` ✅ IsValidTests_CaseInsensitive_CaseCorrect ✅ IsValidTests_CaseInsensitive_CaseIncorrect @@ -905,20 +905,20 @@ ✅ When_the_property_is_initialized_with_null_then_the_validator_should_be_valid ✅ When_validation_fails_the_default_error_should_be_set ``` -### ✅ FluentValidation.Tests.TrackingCollectionTests +### ✅ FluentValidation.Tests.TrackingCollectionTests ``` ✅ Add_AddsItem ✅ Should_not_raise_event_once_handler_detached ✅ When_Item_Added_Raises_ItemAdded ``` -### ✅ FluentValidation.Tests.TransformTests +### ✅ FluentValidation.Tests.TransformTests ``` ✅ Transforms_collection_element ✅ Transforms_collection_element_async ✅ Transforms_property_value ✅ Transforms_property_value_to_another_type ``` -### ✅ FluentValidation.Tests.UserSeverityTester +### ✅ FluentValidation.Tests.UserSeverityTester ``` ✅ Can_Provide_conditional_severity ✅ Can_Provide_severity_for_item_in_collection @@ -928,14 +928,14 @@ ✅ Stores_user_severity_against_validation_failure ✅ Throws_when_provider_is_null ``` -### ✅ FluentValidation.Tests.UserStateTester +### ✅ FluentValidation.Tests.UserStateTester ``` ✅ Can_Provide_state_for_item_in_collection ✅ Correctly_provides_object_being_validated ✅ Stores_user_state_against_validation_failure ✅ Throws_when_provider_is_null ``` -### ✅ FluentValidation.Tests.ValidateAndThrowTester +### ✅ FluentValidation.Tests.ValidateAndThrowTester ``` ✅ Does_not_throw_when_valid ✅ Does_not_throw_when_valid_and_a_ruleset @@ -952,7 +952,7 @@ ✅ ValidationException_provides_correct_message_when_appendDefaultMessage_false ✅ ValidationException_provides_correct_message_when_appendDefaultMessage_true ``` -### ✅ FluentValidation.Tests.ValidationResultTests +### ✅ FluentValidation.Tests.ValidationResultTests ``` ✅ Can_serialize_failure ✅ Can_serialize_result @@ -963,7 +963,7 @@ ✅ ToString_return_error_messages_with_given_separator ✅ ToString_return_error_messages_with_newline_as_separator ``` -### ✅ FluentValidation.Tests.ValidatorDescriptorTester +### ✅ FluentValidation.Tests.ValidatorDescriptorTester ``` ✅ Does_not_throw_when_rule_declared_without_property ✅ Gets_validators_for_property @@ -971,7 +971,7 @@ ✅ Returns_empty_collection_for_property_with_no_validators ✅ Should_retrieve_name_given_to_it_pass_property_as_string ``` -### ✅ FluentValidation.Tests.ValidatorSelectorTests +### ✅ FluentValidation.Tests.ValidatorSelectorTests ``` ✅ Can_use_property_with_include ✅ Does_not_validate_other_property @@ -984,7 +984,7 @@ ✅ Validates_nullable_property_with_overriden_name_when_selected ✅ Validates_property_using_expression ``` -### ✅ FluentValidation.Tests.ValidatorTesterTester +### ✅ FluentValidation.Tests.ValidatorTesterTester ``` ✅ Allows_only_one_failure_to_match ✅ Can_use_indexer_in_string_message diff --git a/__tests__/__outputs__/jest-junit-eslint.md b/__tests__/__outputs__/jest-junit-eslint.md index 32608c3..d3ad9b9 100644 --- a/__tests__/__outputs__/jest-junit-eslint.md +++ b/__tests__/__outputs__/jest-junit-eslint.md @@ -4,12 +4,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/jest-junit-eslint.xml|1 ✅|||0ms| -## ✅ fixtures/jest-junit-eslint.xml +## ✅ fixtures/jest-junit-eslint.xml **1** tests were completed in **0ms** with **1** passed, **0** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[test.jsx](#r0s0)|1 ✅|||0ms| -### ✅ test.jsx +|[test.jsx](#user-content-r0s0)|1 ✅|||0ms| +### ✅ test.jsx ``` test ✅ test.jsx diff --git a/__tests__/__outputs__/jest-junit.md b/__tests__/__outputs__/jest-junit.md index 7c577d3..ed5a174 100644 --- a/__tests__/__outputs__/jest-junit.md +++ b/__tests__/__outputs__/jest-junit.md @@ -2,13 +2,13 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/jest-junit.xml|1 ✅|4 ❌|1 ⚪|1s| -## ❌ fixtures/jest-junit.xml +## ❌ fixtures/jest-junit.xml **6** tests were completed in **1s** with **1** passed, **4** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[__tests__\main.test.js](#r0s0)|1 ✅|3 ❌||486ms| -|[__tests__\second.test.js](#r0s1)||1 ❌|1 ⚪|82ms| -### ❌ __tests__\main.test.js +|[__tests__\main.test.js](#user-content-r0s0)|1 ✅|3 ❌||486ms| +|[__tests__\second.test.js](#user-content-r0s1)||1 ❌|1 ⚪|82ms| +### ❌ __tests__\main.test.js ``` Test 1 ✅ Passing test @@ -21,7 +21,7 @@ Test 2 ❌ Exception in test Error: Some error ``` -### ❌ __tests__\second.test.js +### ❌ __tests__\second.test.js ``` ❌ Timeout test : Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 1 ms timeout specified by jest.setTimeout.Error: diff --git a/__tests__/__outputs__/jest-react-component-test-results.md b/__tests__/__outputs__/jest-react-component-test-results.md index e9dda68..d71db4c 100644 --- a/__tests__/__outputs__/jest-react-component-test-results.md +++ b/__tests__/__outputs__/jest-react-component-test-results.md @@ -4,12 +4,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/jest/jest-react-component-test-results.xml|1 ✅|||1000ms| -## ✅ fixtures/external/jest/jest-react-component-test-results.xml +## ✅ fixtures/external/jest/jest-react-component-test-results.xml **1** tests were completed in **1000ms** with **1** passed, **0** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[\](#r0s0)|1 ✅|||798ms| -### ✅ \ +|[\](#user-content-r0s0)|1 ✅|||798ms| +### ✅ \ ``` ✅ should render properly ``` diff --git a/__tests__/__outputs__/jest-test-results.md b/__tests__/__outputs__/jest-test-results.md index 24b5309..5b154f8 100644 --- a/__tests__/__outputs__/jest-test-results.md +++ b/__tests__/__outputs__/jest-test-results.md @@ -2,7 +2,7 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/jest/jest-test-results.xml|4207 ✅|2 ❌|30 ⚪|166s| -## ❌ fixtures/external/jest/jest-test-results.xml +## ❌ fixtures/external/jest/jest-test-results.xml **4239** tests were completed in **166s** with **4207** passed, **2** failed and **30** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| @@ -81,7 +81,7 @@ |e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts|1 ✅||1 ⚪|72ms| |e2e/__tests__/jest.config.js.test.ts|3 ✅|||2s| |e2e/__tests__/jest.config.ts.test.ts|5 ✅|||14s| -|[e2e/__tests__/jestChangedFiles.test.ts](#r0s75)|9 ✅|1 ❌||9s| +|[e2e/__tests__/jestChangedFiles.test.ts](#user-content-r0s75)|9 ✅|1 ❌||9s| |e2e/__tests__/jestEnvironmentJsdom.test.ts|1 ✅|||2s| |e2e/__tests__/jestRequireActual.test.ts|1 ✅|||2s| |e2e/__tests__/jestRequireMock.test.ts|1 ✅|||2s| @@ -104,7 +104,7 @@ |e2e/__tests__/nodePath.test.ts|1 ✅|||866ms| |e2e/__tests__/noTestFound.test.ts|2 ✅|||1s| |e2e/__tests__/noTestsFound.test.ts|5 ✅|||3s| -|[e2e/__tests__/onlyChanged.test.ts](#r0s98)|8 ✅|1 ❌||22s| +|[e2e/__tests__/onlyChanged.test.ts](#user-content-r0s98)|8 ✅|1 ❌||22s| |e2e/__tests__/onlyFailuresNonWatch.test.ts|1 ✅|||3s| |e2e/__tests__/overrideGlobals.test.ts|2 ✅|||2s| |e2e/__tests__/pnp.test.ts|1 ✅|||3s| @@ -406,7 +406,7 @@ |packages/pretty-format/src/__tests__/prettyFormat.test.ts|86 ✅|||219ms| |packages/pretty-format/src/__tests__/react.test.tsx|55 ✅|||325ms| |packages/pretty-format/src/__tests__/ReactElement.test.ts|3 ✅|||64ms| -### ❌ e2e/__tests__/jestChangedFiles.test.ts +### ❌ e2e/__tests__/jestChangedFiles.test.ts ``` ✅ gets hg SCM roots and dedupes them ✅ gets git SCM roots and dedupes them @@ -420,7 +420,7 @@ ✅ monitors only root paths for hg ✅ handles a bad revision for "changedSince", for hg ``` -### ❌ e2e/__tests__/onlyChanged.test.ts +### ❌ e2e/__tests__/onlyChanged.test.ts ``` ✅ run for "onlyChanged" and "changedSince" ✅ run only changed files diff --git a/__tests__/__outputs__/junit-with-message.md b/__tests__/__outputs__/junit-with-message.md index 948309a..988d8fc 100644 --- a/__tests__/__outputs__/junit-with-message.md +++ b/__tests__/__outputs__/junit-with-message.md @@ -2,12 +2,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/junit-with-message.xml||1 ❌||1ms| -## ❌ fixtures/junit-with-message.xml +## ❌ fixtures/junit-with-message.xml **1** tests were completed in **1ms** with **0** passed, **1** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[Test](#r0s0)||1 ❌||1ms| -### ❌ Test +|[Test](#user-content-r0s0)||1 ❌||1ms| +### ❌ Test ``` Fails ❌ Test diff --git a/__tests__/__outputs__/mocha-json.md b/__tests__/__outputs__/mocha-json.md index 7474b54..50419e1 100644 --- a/__tests__/__outputs__/mocha-json.md +++ b/__tests__/__outputs__/mocha-json.md @@ -2,13 +2,13 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/mocha-json.json|1 ✅|4 ❌|1 ⚪|12ms| -## ❌ fixtures/mocha-json.json +## ❌ fixtures/mocha-json.json **6** tests were completed in **12ms** with **1** passed, **4** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[test/main.test.js](#r0s0)|1 ✅|3 ❌||1ms| -|[test/second.test.js](#r0s1)||1 ❌|1 ⚪|8ms| -### ❌ test/main.test.js +|[test/main.test.js](#user-content-r0s0)|1 ✅|3 ❌||1ms| +|[test/second.test.js](#user-content-r0s1)||1 ❌|1 ⚪|8ms| +### ❌ test/main.test.js ``` Test 1 ✅ Passing test @@ -24,7 +24,7 @@ Test 2 ❌ Exception in test Some error ``` -### ❌ test/second.test.js +### ❌ test/second.test.js ``` ⚪ Skipped test ❌ Timeout test diff --git a/__tests__/__outputs__/mocha-test-results.md b/__tests__/__outputs__/mocha-test-results.md index 4fe3802..8831d7b 100644 --- a/__tests__/__outputs__/mocha-test-results.md +++ b/__tests__/__outputs__/mocha-test-results.md @@ -4,47 +4,47 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/mocha/mocha-test-results.json|833 ✅||6 ⚪|6s| -## ✅ fixtures/external/mocha/mocha-test-results.json +## ✅ fixtures/external/mocha/mocha-test-results.json **839** tests were completed in **6s** with **833** passed, **0** failed and **6** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[test/node-unit/buffered-worker-pool.spec.js](#r0s0)|14 ✅|||8ms| -|[test/node-unit/cli/config.spec.js](#r0s1)|10 ✅|||8ms| -|[test/node-unit/cli/node-flags.spec.js](#r0s2)|105 ✅|||9ms| -|[test/node-unit/cli/options.spec.js](#r0s3)|36 ✅|||250ms| -|[test/node-unit/cli/run-helpers.spec.js](#r0s4)|9 ✅|||8ms| -|[test/node-unit/cli/run.spec.js](#r0s5)|40 ✅|||4ms| -|[test/node-unit/mocha.spec.js](#r0s6)|24 ✅|||33ms| -|[test/node-unit/parallel-buffered-runner.spec.js](#r0s7)|19 ✅|||23ms| -|[test/node-unit/reporters/parallel-buffered.spec.js](#r0s8)|6 ✅|||16ms| -|[test/node-unit/serializer.spec.js](#r0s9)|40 ✅|||31ms| -|[test/node-unit/stack-trace-filter.spec.js](#r0s10)|2 ✅||4 ⚪|1ms| -|[test/node-unit/utils.spec.js](#r0s11)|5 ✅|||1ms| -|[test/node-unit/worker.spec.js](#r0s12)|15 ✅|||92ms| -|[test/unit/context.spec.js](#r0s13)|8 ✅|||5ms| -|[test/unit/duration.spec.js](#r0s14)|3 ✅|||166ms| -|[test/unit/errors.spec.js](#r0s15)|13 ✅|||5ms| -|[test/unit/globals.spec.js](#r0s16)|4 ✅|||0ms| -|[test/unit/grep.spec.js](#r0s17)|8 ✅|||2ms| -|[test/unit/hook-async.spec.js](#r0s18)|3 ✅|||1ms| -|[test/unit/hook-sync-nested.spec.js](#r0s19)|4 ✅|||1ms| -|[test/unit/hook-sync.spec.js](#r0s20)|3 ✅|||0ms| -|[test/unit/hook-timeout.spec.js](#r0s21)|1 ✅|||0ms| -|[test/unit/hook.spec.js](#r0s22)|4 ✅|||0ms| -|[test/unit/mocha.spec.js](#r0s23)|115 ✅||1 ⚪|128ms| -|[test/unit/overspecified-async.spec.js](#r0s24)|1 ✅|||3ms| -|[test/unit/parse-query.spec.js](#r0s25)|2 ✅|||1ms| -|[test/unit/plugin-loader.spec.js](#r0s26)|41 ✅||1 ⚪|16ms| -|[test/unit/required-tokens.spec.js](#r0s27)|1 ✅|||0ms| -|[test/unit/root.spec.js](#r0s28)|1 ✅|||0ms| -|[test/unit/runnable.spec.js](#r0s29)|55 ✅|||122ms| -|[test/unit/runner.spec.js](#r0s30)|77 ✅|||43ms| -|[test/unit/suite.spec.js](#r0s31)|57 ✅|||14ms| -|[test/unit/test.spec.js](#r0s32)|15 ✅|||0ms| -|[test/unit/throw.spec.js](#r0s33)|9 ✅|||9ms| -|[test/unit/timeout.spec.js](#r0s34)|8 ✅|||109ms| -|[test/unit/utils.spec.js](#r0s35)|75 ✅|||24ms| -### ✅ test/node-unit/buffered-worker-pool.spec.js +|[test/node-unit/buffered-worker-pool.spec.js](#user-content-r0s0)|14 ✅|||8ms| +|[test/node-unit/cli/config.spec.js](#user-content-r0s1)|10 ✅|||8ms| +|[test/node-unit/cli/node-flags.spec.js](#user-content-r0s2)|105 ✅|||9ms| +|[test/node-unit/cli/options.spec.js](#user-content-r0s3)|36 ✅|||250ms| +|[test/node-unit/cli/run-helpers.spec.js](#user-content-r0s4)|9 ✅|||8ms| +|[test/node-unit/cli/run.spec.js](#user-content-r0s5)|40 ✅|||4ms| +|[test/node-unit/mocha.spec.js](#user-content-r0s6)|24 ✅|||33ms| +|[test/node-unit/parallel-buffered-runner.spec.js](#user-content-r0s7)|19 ✅|||23ms| +|[test/node-unit/reporters/parallel-buffered.spec.js](#user-content-r0s8)|6 ✅|||16ms| +|[test/node-unit/serializer.spec.js](#user-content-r0s9)|40 ✅|||31ms| +|[test/node-unit/stack-trace-filter.spec.js](#user-content-r0s10)|2 ✅||4 ⚪|1ms| +|[test/node-unit/utils.spec.js](#user-content-r0s11)|5 ✅|||1ms| +|[test/node-unit/worker.spec.js](#user-content-r0s12)|15 ✅|||92ms| +|[test/unit/context.spec.js](#user-content-r0s13)|8 ✅|||5ms| +|[test/unit/duration.spec.js](#user-content-r0s14)|3 ✅|||166ms| +|[test/unit/errors.spec.js](#user-content-r0s15)|13 ✅|||5ms| +|[test/unit/globals.spec.js](#user-content-r0s16)|4 ✅|||0ms| +|[test/unit/grep.spec.js](#user-content-r0s17)|8 ✅|||2ms| +|[test/unit/hook-async.spec.js](#user-content-r0s18)|3 ✅|||1ms| +|[test/unit/hook-sync-nested.spec.js](#user-content-r0s19)|4 ✅|||1ms| +|[test/unit/hook-sync.spec.js](#user-content-r0s20)|3 ✅|||0ms| +|[test/unit/hook-timeout.spec.js](#user-content-r0s21)|1 ✅|||0ms| +|[test/unit/hook.spec.js](#user-content-r0s22)|4 ✅|||0ms| +|[test/unit/mocha.spec.js](#user-content-r0s23)|115 ✅||1 ⚪|128ms| +|[test/unit/overspecified-async.spec.js](#user-content-r0s24)|1 ✅|||3ms| +|[test/unit/parse-query.spec.js](#user-content-r0s25)|2 ✅|||1ms| +|[test/unit/plugin-loader.spec.js](#user-content-r0s26)|41 ✅||1 ⚪|16ms| +|[test/unit/required-tokens.spec.js](#user-content-r0s27)|1 ✅|||0ms| +|[test/unit/root.spec.js](#user-content-r0s28)|1 ✅|||0ms| +|[test/unit/runnable.spec.js](#user-content-r0s29)|55 ✅|||122ms| +|[test/unit/runner.spec.js](#user-content-r0s30)|77 ✅|||43ms| +|[test/unit/suite.spec.js](#user-content-r0s31)|57 ✅|||14ms| +|[test/unit/test.spec.js](#user-content-r0s32)|15 ✅|||0ms| +|[test/unit/throw.spec.js](#user-content-r0s33)|9 ✅|||9ms| +|[test/unit/timeout.spec.js](#user-content-r0s34)|8 ✅|||109ms| +|[test/unit/utils.spec.js](#user-content-r0s35)|75 ✅|||24ms| +### ✅ test/node-unit/buffered-worker-pool.spec.js ``` class BufferedWorkerPool constructor ✅ should apply defaults @@ -73,7 +73,7 @@ class BufferedWorkerPool static method serializeOptions() when called multiple t class BufferedWorkerPool static method serializeOptions() when passed no arguments ✅ should not throw ``` -### ✅ test/node-unit/cli/config.spec.js +### ✅ test/node-unit/cli/config.spec.js ``` cli/config findConfig() ✅ should look for one of the config files using findup-sync @@ -95,7 +95,7 @@ cli/config loadConfig() when parsing succeeds when supplied a filepath with ".ym cli/config loadConfig() when supplied a filepath with unsupported extension ✅ should use the JSON parser ``` -### ✅ test/node-unit/cli/node-flags.spec.js +### ✅ test/node-unit/cli/node-flags.spec.js ``` node-flags impliesNoTimeouts() ✅ should return true for inspect flags @@ -209,7 +209,7 @@ node-flags unparseNodeFlags() ✅ should handle multiple v8 flags ✅ should handle single v8 flags ``` -### ✅ test/node-unit/cli/options.spec.js +### ✅ test/node-unit/cli/options.spec.js ``` options loadOptions() "extension" handling when user does not supply "extension" option ✅ should retain the default @@ -268,7 +268,7 @@ options loadOptions() when parameter provided rc file when path to config (`--co ✅ should not look for a config ✅ should throw to warn the user ``` -### ✅ test/node-unit/cli/run-helpers.spec.js +### ✅ test/node-unit/cli/run-helpers.spec.js ``` helpers list() when given a comma-delimited string ✅ should return a flat array @@ -287,7 +287,7 @@ helpers validateLegacyPlugin() when used with an "interfaces" key helpers validateLegacyPlugin() when used with an unknown plugin type ✅ should fail ``` -### ✅ test/node-unit/cli/run.spec.js +### ✅ test/node-unit/cli/run.spec.js ``` command run builder array type ✅ should include option extension @@ -334,7 +334,7 @@ command run builder string type ✅ should include option timeout ✅ should include option ui ``` -### ✅ test/node-unit/mocha.spec.js +### ✅ test/node-unit/mocha.spec.js ``` Mocha instance method addFile() ✅ should add the given file to the files array @@ -378,7 +378,7 @@ Mocha instance method unloadFiles() Mocha static method unloadFile() ✅ should unload a specific file from cache ``` -### ✅ test/node-unit/parallel-buffered-runner.spec.js +### ✅ test/node-unit/parallel-buffered-runner.spec.js ``` parallel-buffered-runner ParallelBufferedRunner constructor ✅ should start in "IDLE" state @@ -416,7 +416,7 @@ parallel-buffered-runner ParallelBufferedRunner instance method workerReporter() parallel-buffered-runner ParallelBufferedRunner instance property _state ✅ should disallow an invalid state transition ``` -### ✅ test/node-unit/reporters/parallel-buffered.spec.js +### ✅ test/node-unit/reporters/parallel-buffered.spec.js ``` ParallelBuffered constructor ✅ should listen for Runner events @@ -429,7 +429,7 @@ ParallelBuffered instance method done ✅ should execute its callback with a SerializableWorkerResult ✅ should reset its `events` prop ``` -### ✅ test/node-unit/serializer.spec.js +### ✅ test/node-unit/serializer.spec.js ``` serializer function deserialize when passed a non-object value ✅ should return the value @@ -505,7 +505,7 @@ serializer SerializableWorkerResult static method isSerializedWorkerResult when serializer SerializableWorkerResult static method isSerializedWorkerResult when passed an object without an appropriate `__type` prop ✅ should return `false` ``` -### ✅ test/node-unit/stack-trace-filter.spec.js +### ✅ test/node-unit/stack-trace-filter.spec.js ``` stackTraceFilter() on browser ✅ does not strip out other bower_components @@ -517,7 +517,7 @@ stackTraceFilter() on node on POSIX OS stackTraceFilter() on node on Windows ✅ should work on Windows ``` -### ✅ test/node-unit/utils.spec.js +### ✅ test/node-unit/utils.spec.js ``` utils function canonicalType() ✅ should return "asyncfunction" if the parameter is an async function @@ -528,7 +528,7 @@ utils function type() ✅ should return "error" if the parameter is an Error ✅ should return "function" if the parameter is an async function ``` -### ✅ test/node-unit/worker.spec.js +### ✅ test/node-unit/worker.spec.js ``` worker when run as main process ✅ should throw @@ -557,7 +557,7 @@ worker when run as worker process function run() when the file at "filepath" is worker when run as worker process function run() when the file at "filepath" is loadable when serialization succeeds ✅ should resolve with a SerializedWorkerResult ``` -### ✅ test/unit/context.spec.js +### ✅ test/unit/context.spec.js ``` Context nested ✅ should work @@ -574,7 +574,7 @@ methods slow() methods timeout() ✅ should return the timeout ``` -### ✅ test/unit/duration.spec.js +### ✅ test/unit/duration.spec.js ``` durations when fast ✅ should not highlight @@ -583,7 +583,7 @@ durations when reasonable durations when slow ✅ should highlight in red ``` -### ✅ test/unit/errors.spec.js +### ✅ test/unit/errors.spec.js ``` Errors createForbiddenExclusivityError() when Mocha instance is not running in a worker process ✅ should output a message regarding --forbid-only @@ -608,7 +608,7 @@ Errors warn() ✅ should ignore falsy messages ✅ should not cache messages ``` -### ✅ test/unit/globals.spec.js +### ✅ test/unit/globals.spec.js ``` global leaks ✅ should cause tests to fail @@ -616,7 +616,7 @@ global leaks ✅ should pass when prefixed "mocha-" ✅ should pass with wildcard ``` -### ✅ test/unit/grep.spec.js +### ✅ test/unit/grep.spec.js ``` Mocha .grep() ✅ should add a RegExp to the mocha.options object @@ -631,14 +631,14 @@ Mocha "grep" option Mocha "invert" option ✅ should add a Boolean to the mocha.options object ``` -### ✅ test/unit/hook-async.spec.js +### ✅ test/unit/hook-async.spec.js ``` async hooks ✅ one ✅ three ✅ two ``` -### ✅ test/unit/hook-sync-nested.spec.js +### ✅ test/unit/hook-sync-nested.spec.js ``` serial nested ✅ bar @@ -647,19 +647,19 @@ serial nested hooks ✅ one ✅ two ``` -### ✅ test/unit/hook-sync.spec.js +### ✅ test/unit/hook-sync.spec.js ``` serial hooks ✅ one ✅ three ✅ two ``` -### ✅ test/unit/hook-timeout.spec.js +### ✅ test/unit/hook-timeout.spec.js ``` hook timeout ✅ should work ``` -### ✅ test/unit/hook.spec.js +### ✅ test/unit/hook.spec.js ``` Hook error ✅ should get the hook._error when called without arguments @@ -668,7 +668,7 @@ Hook reset ✅ should call Runnable.reset ✅ should reset the error state ``` -### ✅ test/unit/mocha.spec.js +### ✅ test/unit/mocha.spec.js ``` Mocha constructor ✅ should set _cleanReferencesAfterRun to true @@ -868,18 +868,18 @@ Mocha instance method runGlobalTeardown() when fixture(s) are present Mocha instance method unloadFile() when run in a browser ✅ should throw ``` -### ✅ test/unit/overspecified-async.spec.js +### ✅ test/unit/overspecified-async.spec.js ``` overspecified asynchronous resolution method ✅ should fail when multiple methods are used ``` -### ✅ test/unit/parse-query.spec.js +### ✅ test/unit/parse-query.spec.js ``` parseQuery() ✅ should get queryString and return key-value object ✅ should parse "+" as a space ``` -### ✅ test/unit/plugin-loader.spec.js +### ✅ test/unit/plugin-loader.spec.js ``` plugin module class PluginLoader constructor when passed custom plugins ✅ should register the custom plugins @@ -958,17 +958,17 @@ plugin module root hooks plugin 🎣 when impl is an array plugin module root hooks plugin 🎣 when impl is an object of functions ⚪ should pass validation ``` -### ✅ test/unit/required-tokens.spec.js +### ✅ test/unit/required-tokens.spec.js ``` using imported describe ✅ using imported it ``` -### ✅ test/unit/root.spec.js +### ✅ test/unit/root.spec.js ``` root ✅ should be a valid suite ``` -### ✅ test/unit/runnable.spec.js +### ✅ test/unit/runnable.spec.js ``` Runnable(title, fn) .run(fn) if async ✅ this.skip() should halt synchronous execution @@ -1069,7 +1069,7 @@ Runnable(title, fn) when arity >= 1 ✅ should be .async ✅ should not be .sync ``` -### ✅ test/unit/runner.spec.js +### ✅ test/unit/runner.spec.js ``` Runner instance method _uncaught() when called with a non-Runner context ✅ should throw @@ -1185,7 +1185,7 @@ Runner instance method uncaught() when provided an object argument when argument Runner instance method workerReporter() ✅ should throw ``` -### ✅ test/unit/suite.spec.js +### ✅ test/unit/suite.spec.js ``` Suite instance method addSuite() ✅ adds the suite to the suites collection @@ -1278,7 +1278,7 @@ Test initialization ✅ should not throw if the title is a string ✅ should throw an error if the title isn't a string ``` -### ✅ test/unit/test.spec.js +### ✅ test/unit/test.spec.js ``` Test .clone() ✅ should add/keep the retriedTest value @@ -1300,7 +1300,7 @@ Test .reset() ✅ should call Runnable.reset ✅ should reset the run state ``` -### ✅ test/unit/throw.spec.js +### ✅ test/unit/throw.spec.js ``` a test that throws non-extensible ✅ should not pass if throwing async and test is async @@ -1315,7 +1315,7 @@ a test that throws undefined ✅ should not pass if throwing sync and test is async ✅ should not pass if throwing sync and test is sync ``` -### ✅ test/unit/timeout.spec.js +### ✅ test/unit/timeout.spec.js ``` timeouts ✅ should allow overriding per-test @@ -1333,7 +1333,7 @@ timeouts disabling using beforeEach timeouts disabling using timeout(0) ✅ should suppress timeout(4) ``` -### ✅ test/unit/utils.spec.js +### ✅ test/unit/utils.spec.js ``` lib/utils canonicalType() ✅ should recognize various types diff --git a/__tests__/__outputs__/provider-test-results.md b/__tests__/__outputs__/provider-test-results.md index 36abb6e..b2216ad 100644 --- a/__tests__/__outputs__/provider-test-results.md +++ b/__tests__/__outputs__/provider-test-results.md @@ -2,27 +2,27 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/flutter/provider-test-results.json|268 ✅|1 ❌||0ms| -## ❌ fixtures/external/flutter/provider-test-results.json +## ❌ fixtures/external/flutter/provider-test-results.json **269** tests were completed in **0ms** with **268** passed, **1** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[test/builder_test.dart](#r0s0)|24 ✅|||402ms| -|[test/change_notifier_provider_test.dart](#r0s1)|10 ✅|||306ms| -|[test/consumer_test.dart](#r0s2)|18 ✅|||340ms| -|[test/context_test.dart](#r0s3)|31 ✅|||698ms| -|[test/future_provider_test.dart](#r0s4)|10 ✅|||305ms| -|[test/inherited_provider_test.dart](#r0s5)|81 ✅|||1s| -|[test/listenable_provider_test.dart](#r0s6)|16 ✅|||353ms| -|[test/listenable_proxy_provider_test.dart](#r0s7)|12 ✅|||373ms| -|[test/multi_provider_test.dart](#r0s8)|3 ✅|||198ms| -|[test/provider_test.dart](#r0s9)|11 ✅|||306ms| -|[test/proxy_provider_test.dart](#r0s10)|16 ✅|||438ms| -|[test/reassemble_test.dart](#r0s11)|3 ✅|||221ms| -|[test/selector_test.dart](#r0s12)|17 ✅|||364ms| -|[test/stateful_provider_test.dart](#r0s13)|4 ✅|||254ms| -|[test/stream_provider_test.dart](#r0s14)|8 ✅|||282ms| -|[test/value_listenable_provider_test.dart](#r0s15)|4 ✅|1 ❌||327ms| -### ✅ test/builder_test.dart +|[test/builder_test.dart](#user-content-r0s0)|24 ✅|||402ms| +|[test/change_notifier_provider_test.dart](#user-content-r0s1)|10 ✅|||306ms| +|[test/consumer_test.dart](#user-content-r0s2)|18 ✅|||340ms| +|[test/context_test.dart](#user-content-r0s3)|31 ✅|||698ms| +|[test/future_provider_test.dart](#user-content-r0s4)|10 ✅|||305ms| +|[test/inherited_provider_test.dart](#user-content-r0s5)|81 ✅|||1s| +|[test/listenable_provider_test.dart](#user-content-r0s6)|16 ✅|||353ms| +|[test/listenable_proxy_provider_test.dart](#user-content-r0s7)|12 ✅|||373ms| +|[test/multi_provider_test.dart](#user-content-r0s8)|3 ✅|||198ms| +|[test/provider_test.dart](#user-content-r0s9)|11 ✅|||306ms| +|[test/proxy_provider_test.dart](#user-content-r0s10)|16 ✅|||438ms| +|[test/reassemble_test.dart](#user-content-r0s11)|3 ✅|||221ms| +|[test/selector_test.dart](#user-content-r0s12)|17 ✅|||364ms| +|[test/stateful_provider_test.dart](#user-content-r0s13)|4 ✅|||254ms| +|[test/stream_provider_test.dart](#user-content-r0s14)|8 ✅|||282ms| +|[test/value_listenable_provider_test.dart](#user-content-r0s15)|4 ✅|1 ❌||327ms| +### ✅ test/builder_test.dart ``` ChangeNotifierProvider ✅ default @@ -54,7 +54,7 @@ MultiProvider ✅ with ProxyProvider5 ✅ with ProxyProvider6 ``` -### ✅ test/change_notifier_provider_test.dart +### ✅ test/change_notifier_provider_test.dart ``` ✅ Use builder property, not child ChangeNotifierProvider @@ -68,7 +68,7 @@ ChangeNotifierProvider ✅ builder6 ✅ builder0 ``` -### ✅ test/consumer_test.dart +### ✅ test/consumer_test.dart ``` consumer ✅ obtains value from Provider @@ -95,7 +95,7 @@ consumer6 ✅ crashed with no builder ✅ can be used inside MultiProvider ``` -### ✅ test/context_test.dart +### ✅ test/context_test.dart ``` ✅ watch in layoutbuilder ✅ select in layoutbuilder @@ -130,7 +130,7 @@ BuildContext ✅ context.select deeply compares sets ✅ context.watch listens to value changes ``` -### ✅ test/future_provider_test.dart +### ✅ test/future_provider_test.dart ``` ✅ works with MultiProvider ✅ (catchError) previous future completes after transition is no-op @@ -144,7 +144,7 @@ BuildContext FutureProvider() ✅ crashes if builder is null ``` -### ✅ test/inherited_provider_test.dart +### ✅ test/inherited_provider_test.dart ``` ✅ regression test #377 ✅ rebuild on dependency flags update @@ -233,7 +233,7 @@ DeferredInheritedProvider() ✅ dispose ✅ dispose no-op if never built ``` -### ✅ test/listenable_provider_test.dart +### ✅ test/listenable_provider_test.dart ``` ListenableProvider ✅ works with MultiProvider @@ -255,7 +255,7 @@ ListenableProvider stateful constructor ✅ pass down key ✅ throws if create is null ``` -### ✅ test/listenable_proxy_provider_test.dart +### ✅ test/listenable_proxy_provider_test.dart ``` ListenableProxyProvider ✅ throws if update is missing @@ -272,14 +272,14 @@ ListenableProxyProvider variants ✅ ListenableProxyProvider5 ✅ ListenableProxyProvider6 ``` -### ✅ test/multi_provider_test.dart +### ✅ test/multi_provider_test.dart ``` MultiProvider ✅ throw if providers is null ✅ MultiProvider children can only access parent providers ✅ MultiProvider.providers with ignored child ``` -### ✅ test/provider_test.dart +### ✅ test/provider_test.dart ``` ✅ works with MultiProvider Provider.of @@ -295,7 +295,7 @@ Provider ✅ throws an error if no provider found ✅ update should notify ``` -### ✅ test/proxy_provider_test.dart +### ✅ test/proxy_provider_test.dart ``` ProxyProvider ✅ throws if the provided value is a Listenable/Stream @@ -316,13 +316,13 @@ ProxyProvider variants ✅ ProxyProvider5 ✅ ProxyProvider6 ``` -### ✅ test/reassemble_test.dart +### ✅ test/reassemble_test.dart ``` ✅ ReassembleHandler ✅ unevaluated create ✅ unevaluated create ``` -### ✅ test/selector_test.dart +### ✅ test/selector_test.dart ``` ✅ asserts that builder/selector are not null ✅ Deep compare maps by default @@ -342,14 +342,14 @@ ProxyProvider variants ✅ Selector5 ✅ Selector6 ``` -### ✅ test/stateful_provider_test.dart +### ✅ test/stateful_provider_test.dart ``` ✅ asserts ✅ works with MultiProvider ✅ calls create only once ✅ dispose ``` -### ✅ test/stream_provider_test.dart +### ✅ test/stream_provider_test.dart ``` ✅ works with MultiProvider ✅ transition from stream to stream preserve state @@ -361,7 +361,7 @@ StreamProvider() ✅ create and dispose stream with builder ✅ crashes if builder is null ``` -### ❌ test/value_listenable_provider_test.dart +### ❌ test/value_listenable_provider_test.dart ``` valueListenableProvider ✅ rebuilds when value change diff --git a/__tests__/__outputs__/pulsar-test-results-no-merge.md b/__tests__/__outputs__/pulsar-test-results-no-merge.md index 99539b9..b1738a4 100644 --- a/__tests__/__outputs__/pulsar-test-results-no-merge.md +++ b/__tests__/__outputs__/pulsar-test-results-no-merge.md @@ -2,12 +2,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/java/TEST-org.apache.pulsar.AddMissingPatchVersionTest.xml||1 ❌|1 ⚪|116ms| -## ❌ fixtures/external/java/TEST-org.apache.pulsar.AddMissingPatchVersionTest.xml +## ❌ fixtures/external/java/TEST-org.apache.pulsar.AddMissingPatchVersionTest.xml **2** tests were completed in **116ms** with **0** passed, **1** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[org.apache.pulsar.AddMissingPatchVersionTest](#r0s0)||1 ❌|1 ⚪|116ms| -### ❌ org.apache.pulsar.AddMissingPatchVersionTest +|[org.apache.pulsar.AddMissingPatchVersionTest](#user-content-r0s0)||1 ❌|1 ⚪|116ms| +### ❌ org.apache.pulsar.AddMissingPatchVersionTest ``` ⚪ testVersionStrings ❌ testVersionStrings diff --git a/__tests__/__outputs__/pulsar-test-results.md b/__tests__/__outputs__/pulsar-test-results.md index b6d910c..a9a5290 100644 --- a/__tests__/__outputs__/pulsar-test-results.md +++ b/__tests__/__outputs__/pulsar-test-results.md @@ -2,193 +2,193 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/java/pulsar-test-report.xml|793 ✅|1 ❌|14 ⚪|2127s| -## ❌ fixtures/external/java/pulsar-test-report.xml +## ❌ fixtures/external/java/pulsar-test-report.xml **808** tests were completed in **2127s** with **793** passed, **1** failed and **14** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[org.apache.pulsar.AddMissingPatchVersionTest](#r0s0)||1 ❌|1 ⚪|116ms| -|[org.apache.pulsar.broker.admin.AdminApiOffloadTest](#r0s1)|7 ✅|||19s| -|[org.apache.pulsar.broker.auth.AuthenticationServiceTest](#r0s2)|2 ✅|||185ms| -|[org.apache.pulsar.broker.auth.AuthLogsTest](#r0s3)|2 ✅|||1s| -|[org.apache.pulsar.broker.auth.AuthorizationTest](#r0s4)|1 ✅|||2s| -|[org.apache.pulsar.broker.lookup.http.HttpTopicLookupv2Test](#r0s5)|4 ✅|||2s| -|[org.apache.pulsar.broker.namespace.NamespaceCreateBundlesTest](#r0s6)|2 ✅|||33s| -|[org.apache.pulsar.broker.namespace.NamespaceOwnershipListenerTests](#r0s7)|2 ✅|||32s| -|[org.apache.pulsar.broker.namespace.NamespaceServiceTest](#r0s8)|10 ✅|||75s| -|[org.apache.pulsar.broker.namespace.NamespaceUnloadingTest](#r0s9)|2 ✅|||14s| -|[org.apache.pulsar.broker.namespace.OwnerShipCacheForCurrentServerTest](#r0s10)|1 ✅|||16s| -|[org.apache.pulsar.broker.namespace.OwnershipCacheTest](#r0s11)|8 ✅|||16s| -|[org.apache.pulsar.broker.protocol.ProtocolHandlersTest](#r0s12)|6 ✅|||946ms| -|[org.apache.pulsar.broker.protocol.ProtocolHandlerUtilsTest](#r0s13)|3 ✅|||7s| -|[org.apache.pulsar.broker.protocol.ProtocolHandlerWithClassLoaderTest](#r0s14)|1 ✅|||15ms| -|[org.apache.pulsar.broker.PulsarServiceTest](#r0s15)|2 ✅|||96ms| -|[org.apache.pulsar.broker.service.MessagePublishBufferThrottleTest](#r0s16)|3 ✅|||14s| -|[org.apache.pulsar.broker.service.ReplicatorTest](#r0s17)|22 ✅|||40s| -|[org.apache.pulsar.broker.service.TopicOwnerTest](#r0s18)|8 ✅|||114s| -|[org.apache.pulsar.broker.SLAMonitoringTest](#r0s19)|4 ✅|||9s| -|[org.apache.pulsar.broker.stats.BookieClientsStatsGeneratorTest](#r0s20)|2 ✅|||49ms| -|[org.apache.pulsar.broker.stats.ConsumerStatsTest](#r0s21)|3 ✅|||21s| -|[org.apache.pulsar.broker.stats.ManagedCursorMetricsTest](#r0s22)|1 ✅|||281ms| -|[org.apache.pulsar.broker.stats.ManagedLedgerMetricsTest](#r0s23)|1 ✅|||285ms| -|[org.apache.pulsar.broker.stats.prometheus.AggregatedNamespaceStatsTest](#r0s24)|1 ✅|||40ms| -|[org.apache.pulsar.broker.stats.PrometheusMetricsTest](#r0s25)|15 ✅|||83s| -|[org.apache.pulsar.broker.stats.SubscriptionStatsTest](#r0s26)|2 ✅|||2s| -|[org.apache.pulsar.broker.systopic.NamespaceEventsSystemTopicServiceTest](#r0s27)|1 ✅|||1s| -|[org.apache.pulsar.broker.transaction.buffer.InMemTransactionBufferReaderTest](#r0s28)|3 ✅|||28ms| -|[org.apache.pulsar.broker.transaction.buffer.TransactionBufferClientTest](#r0s29)|4 ✅|||93ms| -|[org.apache.pulsar.broker.transaction.buffer.TransactionBufferTest](#r0s30)|7 ✅|||81ms| -|[org.apache.pulsar.broker.transaction.buffer.TransactionEntryImplTest](#r0s31)|1 ✅|||14ms| -|[org.apache.pulsar.broker.transaction.buffer.TransactionLowWaterMarkTest](#r0s32)|2 ✅|||38s| -|[org.apache.pulsar.broker.transaction.buffer.TransactionStablePositionTest](#r0s33)|2 ✅||1 ⚪|49s| -|[org.apache.pulsar.broker.transaction.coordinator.TransactionCoordinatorClientTest](#r0s34)|3 ✅|||95ms| -|[org.apache.pulsar.broker.transaction.coordinator.TransactionMetaStoreAssignmentTest](#r0s35)|1 ✅|||1s| -|[org.apache.pulsar.broker.transaction.pendingack.PendingAckInMemoryDeleteTest](#r0s36)|2 ✅||1 ⚪|57s| -|[org.apache.pulsar.broker.transaction.TransactionConsumeTest](#r0s37)|2 ✅|||30s| -|[org.apache.pulsar.broker.web.RestExceptionTest](#r0s38)|3 ✅|||37ms| -|[org.apache.pulsar.broker.web.WebServiceTest](#r0s39)|9 ✅|||27s| -|[org.apache.pulsar.client.impl.AdminApiKeyStoreTlsAuthTest](#r0s40)|4 ✅|||8s| -|[org.apache.pulsar.client.impl.BatchMessageIdImplSerializationTest](#r0s41)|4 ✅|||30ms| -|[org.apache.pulsar.client.impl.BatchMessageIndexAckDisableTest](#r0s42)|4 ✅|||14s| -|[org.apache.pulsar.client.impl.BatchMessageIndexAckTest](#r0s43)|5 ✅|||44s| -|[org.apache.pulsar.client.impl.BrokerClientIntegrationTest](#r0s44)|15 ✅|||148s| -|[org.apache.pulsar.client.impl.CompactedOutBatchMessageTest](#r0s45)|1 ✅|||1s| -|[org.apache.pulsar.client.impl.ConsumerAckResponseTest](#r0s46)|1 ✅|||549ms| -|[org.apache.pulsar.client.impl.ConsumerConfigurationTest](#r0s47)|4 ✅|||12s| -|[org.apache.pulsar.client.impl.ConsumerDedupPermitsUpdate](#r0s48)|7 ✅|||4s| -|[org.apache.pulsar.client.impl.ConsumerUnsubscribeTest](#r0s49)|1 ✅|||129ms| -|[org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithAuth](#r0s50)|3 ✅|||23s| -|[org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithoutAuth](#r0s51)|3 ✅|||8s| -|[org.apache.pulsar.client.impl.KeyStoreTlsTest](#r0s52)|1 ✅|||183ms| -|[org.apache.pulsar.client.impl.MessageChecksumTest](#r0s53)|3 ✅|||47s| -|[org.apache.pulsar.client.impl.MessageChunkingTest](#r0s54)|8 ✅||1 ⚪|73s| -|[org.apache.pulsar.client.impl.MessageParserTest](#r0s55)|2 ✅|||5s| -|[org.apache.pulsar.client.impl.MultiTopicsReaderTest](#r0s56)|8 ✅|||35s| -|[org.apache.pulsar.client.impl.NegativeAcksTest](#r0s57)|32 ✅|||11s| -|[org.apache.pulsar.client.impl.PatternTopicsConsumerImplTest](#r0s58)|11 ✅|||63s| -|[org.apache.pulsar.client.impl.PerMessageUnAcknowledgedRedeliveryTest](#r0s59)|5 ✅|||34s| -|[org.apache.pulsar.client.impl.PulsarMultiHostClientTest](#r0s60)|3 ✅|||15s| -|[org.apache.pulsar.client.impl.RawMessageSerDeserTest](#r0s61)|1 ✅|||10ms| -|[org.apache.pulsar.client.impl.SchemaDeleteTest](#r0s62)|1 ✅|||2s| -|[org.apache.pulsar.client.impl.SequenceIdWithErrorTest](#r0s63)|3 ✅||2 ⚪|18s| -|[org.apache.pulsar.client.impl.TopicDoesNotExistsTest](#r0s64)|2 ✅|||4s| -|[org.apache.pulsar.client.impl.TopicFromMessageTest](#r0s65)|5 ✅|||14s| -|[org.apache.pulsar.client.impl.TopicsConsumerImplTest](#r0s66)|17 ✅|||133s| -|[org.apache.pulsar.client.impl.UnAcknowledgedMessagesTimeoutTest](#r0s67)|7 ✅|||44s| -|[org.apache.pulsar.client.impl.ZeroQueueSizeTest](#r0s68)|14 ✅|||16s| -|[org.apache.pulsar.common.api.raw.RawMessageImplTest](#r0s69)|1 ✅|||316ms| -|[org.apache.pulsar.common.compression.CommandsTest](#r0s70)|1 ✅|||30ms| -|[org.apache.pulsar.common.compression.CompressorCodecBackwardCompatTest](#r0s71)|6 ✅|||223ms| -|[org.apache.pulsar.common.compression.CompressorCodecTest](#r0s72)|45 ✅|||737ms| -|[org.apache.pulsar.common.compression.Crc32cChecksumTest](#r0s73)|6 ✅|||5s| -|[org.apache.pulsar.common.lookup.data.LookupDataTest](#r0s74)|4 ✅|||2s| -|[org.apache.pulsar.common.naming.MetadataTests](#r0s75)|2 ✅|||161ms| -|[org.apache.pulsar.common.naming.NamespaceBundlesTest](#r0s76)|5 ✅|||99ms| -|[org.apache.pulsar.common.naming.NamespaceBundleTest](#r0s77)|6 ✅|||64ms| -|[org.apache.pulsar.common.naming.NamespaceNameTest](#r0s78)|2 ✅|||207ms| -|[org.apache.pulsar.common.naming.ServiceConfigurationTest](#r0s79)|4 ✅|||48ms| -|[org.apache.pulsar.common.naming.TopicNameTest](#r0s80)|4 ✅|||529ms| -|[org.apache.pulsar.common.net.ServiceURITest](#r0s81)|21 ✅|||237ms| -|[org.apache.pulsar.common.policies.data.AutoFailoverPolicyDataTest](#r0s82)|1 ✅|||15ms| -|[org.apache.pulsar.common.policies.data.AutoFailoverPolicyTypeTest](#r0s83)|1 ✅|||19ms| -|[org.apache.pulsar.common.policies.data.AutoTopicCreationOverrideTest](#r0s84)|6 ✅|||64ms| -|[org.apache.pulsar.common.policies.data.BacklogQuotaTest](#r0s85)|1 ✅|||12ms| -|[org.apache.pulsar.common.policies.data.ClusterDataTest](#r0s86)|1 ✅|||9ms| -|[org.apache.pulsar.common.policies.data.ConsumerStatsTest](#r0s87)|1 ✅|||8ms| -|[org.apache.pulsar.common.policies.data.EnsemblePlacementPolicyConfigTest](#r0s88)|2 ✅|||948ms| -|[org.apache.pulsar.common.policies.data.LocalPolicesTest](#r0s89)|1 ✅|||48ms| -|[org.apache.pulsar.common.policies.data.NamespaceIsolationDataTest](#r0s90)|1 ✅|||76ms| -|[org.apache.pulsar.common.policies.data.NamespaceOwnershipStatusTest](#r0s91)|1 ✅|||45ms| -|[org.apache.pulsar.common.policies.data.OffloadPoliciesTest](#r0s92)|6 ✅|||216ms| -|[org.apache.pulsar.common.policies.data.PartitionedTopicStatsTest](#r0s93)|1 ✅|||12ms| -|[org.apache.pulsar.common.policies.data.PersistencePoliciesTest](#r0s94)|1 ✅|||19ms| -|[org.apache.pulsar.common.policies.data.PersistentOfflineTopicStatsTest](#r0s95)|1 ✅|||29ms| -|[org.apache.pulsar.common.policies.data.PersistentTopicStatsTest](#r0s96)|2 ✅|||51ms| -|[org.apache.pulsar.common.policies.data.PoliciesDataTest](#r0s97)|4 ✅|||1s| -|[org.apache.pulsar.common.policies.data.PublisherStatsTest](#r0s98)|2 ✅|||37ms| -|[org.apache.pulsar.common.policies.data.ReplicatorStatsTest](#r0s99)|2 ✅|||30ms| -|[org.apache.pulsar.common.policies.data.ResourceQuotaTest](#r0s100)|2 ✅|||45ms| -|[org.apache.pulsar.common.policies.data.RetentionPolicesTest](#r0s101)|1 ✅|||8ms| -|[org.apache.pulsar.common.policies.impl.AutoFailoverPolicyFactoryTest](#r0s102)|1 ✅|||22ms| -|[org.apache.pulsar.common.policies.impl.MinAvailablePolicyTest](#r0s103)|1 ✅|||1ms| -|[org.apache.pulsar.common.policies.impl.NamespaceIsolationPoliciesTest](#r0s104)|7 ✅|||265ms| -|[org.apache.pulsar.common.policies.impl.NamespaceIsolationPolicyImplTest](#r0s105)|7 ✅|||309ms| -|[org.apache.pulsar.common.protocol.ByteBufPairTest](#r0s106)|2 ✅|||5s| -|[org.apache.pulsar.common.protocol.CommandUtilsTests](#r0s107)|7 ✅|||3s| -|[org.apache.pulsar.common.protocol.MarkersTest](#r0s108)|6 ✅|||3s| -|[org.apache.pulsar.common.protocol.PulsarDecoderTest](#r0s109)|1 ✅|||4s| -|[org.apache.pulsar.common.stats.JvmDefaultGCMetricsLoggerTest](#r0s110)|1 ✅|||82ms| -|[org.apache.pulsar.common.util.collections.BitSetRecyclableRecyclableTest](#r0s111)|2 ✅|||13ms| -|[org.apache.pulsar.common.util.collections.ConcurrentBitSetRecyclableTest](#r0s112)|2 ✅|||63ms| -|[org.apache.pulsar.common.util.collections.ConcurrentLongHashMapTest](#r0s113)|13 ✅|||28s| -|[org.apache.pulsar.common.util.collections.ConcurrentLongPairSetTest](#r0s114)|15 ✅|||2s| -|[org.apache.pulsar.common.util.collections.ConcurrentOpenHashMapTest](#r0s115)|12 ✅|||9s| -|[org.apache.pulsar.common.util.collections.ConcurrentOpenHashSetTest](#r0s116)|11 ✅|||7s| -|[org.apache.pulsar.common.util.collections.ConcurrentOpenLongPairRangeSetTest](#r0s117)|13 ✅|||1s| -|[org.apache.pulsar.common.util.collections.ConcurrentSortedLongPairSetTest](#r0s118)|9 ✅|||342ms| -|[org.apache.pulsar.common.util.collections.FieldParserTest](#r0s119)|2 ✅|||64ms| -|[org.apache.pulsar.common.util.collections.GrowableArrayBlockingQueueTest](#r0s120)|6 ✅|||350ms| -|[org.apache.pulsar.common.util.collections.GrowablePriorityLongPairQueueTest](#r0s121)|15 ✅|||3s| -|[org.apache.pulsar.common.util.collections.TripleLongPriorityQueueTest](#r0s122)|3 ✅|||238ms| -|[org.apache.pulsar.common.util.FieldParserTest](#r0s123)|1 ✅|||242ms| -|[org.apache.pulsar.common.util.FileModifiedTimeUpdaterTest](#r0s124)|6 ✅|||6s| -|[org.apache.pulsar.common.util.netty.ChannelFuturesTest](#r0s125)|5 ✅|||2s| -|[org.apache.pulsar.common.util.RateLimiterTest](#r0s126)|11 ✅|||7s| -|[org.apache.pulsar.common.util.ReflectionsTest](#r0s127)|12 ✅|||172ms| -|[org.apache.pulsar.common.util.RelativeTimeUtilTest](#r0s128)|1 ✅|||39ms| -|[org.apache.pulsar.discovery.service.web.DiscoveryServiceWebTest](#r0s129)|1 ✅|||5s| -|[org.apache.pulsar.functions.worker.PulsarFunctionE2ESecurityTest](#r0s130)|2 ✅|||28s| -|[org.apache.pulsar.functions.worker.PulsarFunctionPublishTest](#r0s131)|3 ✅|||42s| -|[org.apache.pulsar.functions.worker.PulsarFunctionTlsTest](#r0s132)|1 ✅|||12s| -|[org.apache.pulsar.io.PulsarFunctionTlsTest](#r0s133)|1 ✅|||30s| -|[org.apache.pulsar.proxy.server.AdminProxyHandlerTest](#r0s134)|1 ✅|||474ms| -|[org.apache.pulsar.proxy.server.AuthedAdminProxyHandlerTest](#r0s135)|1 ✅|||2s| -|[org.apache.pulsar.proxy.server.FunctionWorkerRoutingTest](#r0s136)|1 ✅|||10ms| -|[org.apache.pulsar.proxy.server.ProxyAdditionalServletTest](#r0s137)|1 ✅|||125ms| -|[org.apache.pulsar.proxy.server.ProxyAuthenticatedProducerConsumerTest](#r0s138)|1 ✅|||2s| -|[org.apache.pulsar.proxy.server.ProxyAuthenticationTest](#r0s139)|1 ✅|||17s| -|[org.apache.pulsar.proxy.server.ProxyConnectionThrottlingTest](#r0s140)|1 ✅|||2s| -|[org.apache.pulsar.proxy.server.ProxyEnableHAProxyProtocolTest](#r0s141)|1 ✅|||511ms| -|[org.apache.pulsar.proxy.server.ProxyForwardAuthDataTest](#r0s142)|1 ✅|||32s| -|[org.apache.pulsar.proxy.server.ProxyIsAHttpProxyTest](#r0s143)|10 ✅|||2s| -|[org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithAuth](#r0s144)|3 ✅|||7s| -|[org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithoutAuth](#r0s145)|3 ✅|||7s| -|[org.apache.pulsar.proxy.server.ProxyLookupThrottlingTest](#r0s146)|1 ✅|||3s| -|[org.apache.pulsar.proxy.server.ProxyParserTest](#r0s147)|5 ✅|||1s| -|[org.apache.pulsar.proxy.server.ProxyRolesEnforcementTest](#r0s148)|1 ✅|||10s| -|[org.apache.pulsar.proxy.server.ProxyStatsTest](#r0s149)|3 ✅|||533ms| -|[org.apache.pulsar.proxy.server.ProxyTest](#r0s150)|6 ✅|||3s| -|[org.apache.pulsar.proxy.server.ProxyTlsTest](#r0s151)|2 ✅|||414ms| -|[org.apache.pulsar.proxy.server.ProxyTlsTestWithAuth](#r0s152)|1 ✅|||4ms| -|[org.apache.pulsar.proxy.server.ProxyWithAuthorizationNegTest](#r0s153)|1 ✅|||2s| -|[org.apache.pulsar.proxy.server.ProxyWithAuthorizationTest](#r0s154)|13 ✅|||33s| -|[org.apache.pulsar.proxy.server.ProxyWithoutServiceDiscoveryTest](#r0s155)|1 ✅|||2s| -|[org.apache.pulsar.proxy.server.SuperUserAuthedAdminProxyHandlerTest](#r0s156)|3 ✅|||8s| -|[org.apache.pulsar.proxy.server.UnauthedAdminProxyHandlerTest](#r0s157)|2 ✅|||114ms| -|[org.apache.pulsar.PulsarBrokerStarterTest](#r0s158)|9 ✅|||591ms| -|[org.apache.pulsar.schema.compatibility.SchemaCompatibilityCheckTest](#r0s159)|23 ✅|||107s| -|[org.apache.pulsar.schema.PartitionedTopicSchemaTest](#r0s160)|1 ✅|||29s| -|[org.apache.pulsar.schema.SchemaTest](#r0s161)|3 ✅|||31s| -|[org.apache.pulsar.stats.client.PulsarBrokerStatsClientTest](#r0s162)|2 ✅|||41s| -|[org.apache.pulsar.tests.EnumValuesDataProviderTest](#r0s163)|6 ✅|||23ms| -|[org.apache.pulsar.tests.TestRetrySupportBeforeMethodRetryTest](#r0s164)|1 ✅||4 ⚪|36ms| -|[org.apache.pulsar.tests.TestRetrySupportRetryTest](#r0s165)|1 ✅||4 ⚪|27ms| -|[org.apache.pulsar.tests.TestRetrySupportSuccessTest](#r0s166)|3 ✅|||1ms| -|[org.apache.pulsar.tests.ThreadDumpUtilTest](#r0s167)|2 ✅|||17ms| -|[org.apache.pulsar.utils.SimpleTextOutputStreamTest](#r0s168)|4 ✅|||50ms| -|[org.apache.pulsar.utils.StatsOutputStreamTest](#r0s169)|6 ✅|||59ms| -|[org.apache.pulsar.websocket.proxy.ProxyAuthenticationTest](#r0s170)|4 ✅|||29s| -|[org.apache.pulsar.websocket.proxy.ProxyAuthorizationTest](#r0s171)|1 ✅|||1s| -|[org.apache.pulsar.websocket.proxy.ProxyConfigurationTest](#r0s172)|2 ✅|||9s| -|[org.apache.pulsar.websocket.proxy.ProxyPublishConsumeTlsTest](#r0s173)|1 ✅|||11s| -|[org.apache.pulsar.websocket.proxy.ProxyPublishConsumeWithoutZKTest](#r0s174)|1 ✅|||7s| -|[org.apache.pulsar.websocket.proxy.v1.V1_ProxyAuthenticationTest](#r0s175)|4 ✅|||30s| -### ❌ org.apache.pulsar.AddMissingPatchVersionTest +|[org.apache.pulsar.AddMissingPatchVersionTest](#user-content-r0s0)||1 ❌|1 ⚪|116ms| +|[org.apache.pulsar.broker.admin.AdminApiOffloadTest](#user-content-r0s1)|7 ✅|||19s| +|[org.apache.pulsar.broker.auth.AuthenticationServiceTest](#user-content-r0s2)|2 ✅|||185ms| +|[org.apache.pulsar.broker.auth.AuthLogsTest](#user-content-r0s3)|2 ✅|||1s| +|[org.apache.pulsar.broker.auth.AuthorizationTest](#user-content-r0s4)|1 ✅|||2s| +|[org.apache.pulsar.broker.lookup.http.HttpTopicLookupv2Test](#user-content-r0s5)|4 ✅|||2s| +|[org.apache.pulsar.broker.namespace.NamespaceCreateBundlesTest](#user-content-r0s6)|2 ✅|||33s| +|[org.apache.pulsar.broker.namespace.NamespaceOwnershipListenerTests](#user-content-r0s7)|2 ✅|||32s| +|[org.apache.pulsar.broker.namespace.NamespaceServiceTest](#user-content-r0s8)|10 ✅|||75s| +|[org.apache.pulsar.broker.namespace.NamespaceUnloadingTest](#user-content-r0s9)|2 ✅|||14s| +|[org.apache.pulsar.broker.namespace.OwnerShipCacheForCurrentServerTest](#user-content-r0s10)|1 ✅|||16s| +|[org.apache.pulsar.broker.namespace.OwnershipCacheTest](#user-content-r0s11)|8 ✅|||16s| +|[org.apache.pulsar.broker.protocol.ProtocolHandlersTest](#user-content-r0s12)|6 ✅|||946ms| +|[org.apache.pulsar.broker.protocol.ProtocolHandlerUtilsTest](#user-content-r0s13)|3 ✅|||7s| +|[org.apache.pulsar.broker.protocol.ProtocolHandlerWithClassLoaderTest](#user-content-r0s14)|1 ✅|||15ms| +|[org.apache.pulsar.broker.PulsarServiceTest](#user-content-r0s15)|2 ✅|||96ms| +|[org.apache.pulsar.broker.service.MessagePublishBufferThrottleTest](#user-content-r0s16)|3 ✅|||14s| +|[org.apache.pulsar.broker.service.ReplicatorTest](#user-content-r0s17)|22 ✅|||40s| +|[org.apache.pulsar.broker.service.TopicOwnerTest](#user-content-r0s18)|8 ✅|||114s| +|[org.apache.pulsar.broker.SLAMonitoringTest](#user-content-r0s19)|4 ✅|||9s| +|[org.apache.pulsar.broker.stats.BookieClientsStatsGeneratorTest](#user-content-r0s20)|2 ✅|||49ms| +|[org.apache.pulsar.broker.stats.ConsumerStatsTest](#user-content-r0s21)|3 ✅|||21s| +|[org.apache.pulsar.broker.stats.ManagedCursorMetricsTest](#user-content-r0s22)|1 ✅|||281ms| +|[org.apache.pulsar.broker.stats.ManagedLedgerMetricsTest](#user-content-r0s23)|1 ✅|||285ms| +|[org.apache.pulsar.broker.stats.prometheus.AggregatedNamespaceStatsTest](#user-content-r0s24)|1 ✅|||40ms| +|[org.apache.pulsar.broker.stats.PrometheusMetricsTest](#user-content-r0s25)|15 ✅|||83s| +|[org.apache.pulsar.broker.stats.SubscriptionStatsTest](#user-content-r0s26)|2 ✅|||2s| +|[org.apache.pulsar.broker.systopic.NamespaceEventsSystemTopicServiceTest](#user-content-r0s27)|1 ✅|||1s| +|[org.apache.pulsar.broker.transaction.buffer.InMemTransactionBufferReaderTest](#user-content-r0s28)|3 ✅|||28ms| +|[org.apache.pulsar.broker.transaction.buffer.TransactionBufferClientTest](#user-content-r0s29)|4 ✅|||93ms| +|[org.apache.pulsar.broker.transaction.buffer.TransactionBufferTest](#user-content-r0s30)|7 ✅|||81ms| +|[org.apache.pulsar.broker.transaction.buffer.TransactionEntryImplTest](#user-content-r0s31)|1 ✅|||14ms| +|[org.apache.pulsar.broker.transaction.buffer.TransactionLowWaterMarkTest](#user-content-r0s32)|2 ✅|||38s| +|[org.apache.pulsar.broker.transaction.buffer.TransactionStablePositionTest](#user-content-r0s33)|2 ✅||1 ⚪|49s| +|[org.apache.pulsar.broker.transaction.coordinator.TransactionCoordinatorClientTest](#user-content-r0s34)|3 ✅|||95ms| +|[org.apache.pulsar.broker.transaction.coordinator.TransactionMetaStoreAssignmentTest](#user-content-r0s35)|1 ✅|||1s| +|[org.apache.pulsar.broker.transaction.pendingack.PendingAckInMemoryDeleteTest](#user-content-r0s36)|2 ✅||1 ⚪|57s| +|[org.apache.pulsar.broker.transaction.TransactionConsumeTest](#user-content-r0s37)|2 ✅|||30s| +|[org.apache.pulsar.broker.web.RestExceptionTest](#user-content-r0s38)|3 ✅|||37ms| +|[org.apache.pulsar.broker.web.WebServiceTest](#user-content-r0s39)|9 ✅|||27s| +|[org.apache.pulsar.client.impl.AdminApiKeyStoreTlsAuthTest](#user-content-r0s40)|4 ✅|||8s| +|[org.apache.pulsar.client.impl.BatchMessageIdImplSerializationTest](#user-content-r0s41)|4 ✅|||30ms| +|[org.apache.pulsar.client.impl.BatchMessageIndexAckDisableTest](#user-content-r0s42)|4 ✅|||14s| +|[org.apache.pulsar.client.impl.BatchMessageIndexAckTest](#user-content-r0s43)|5 ✅|||44s| +|[org.apache.pulsar.client.impl.BrokerClientIntegrationTest](#user-content-r0s44)|15 ✅|||148s| +|[org.apache.pulsar.client.impl.CompactedOutBatchMessageTest](#user-content-r0s45)|1 ✅|||1s| +|[org.apache.pulsar.client.impl.ConsumerAckResponseTest](#user-content-r0s46)|1 ✅|||549ms| +|[org.apache.pulsar.client.impl.ConsumerConfigurationTest](#user-content-r0s47)|4 ✅|||12s| +|[org.apache.pulsar.client.impl.ConsumerDedupPermitsUpdate](#user-content-r0s48)|7 ✅|||4s| +|[org.apache.pulsar.client.impl.ConsumerUnsubscribeTest](#user-content-r0s49)|1 ✅|||129ms| +|[org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithAuth](#user-content-r0s50)|3 ✅|||23s| +|[org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithoutAuth](#user-content-r0s51)|3 ✅|||8s| +|[org.apache.pulsar.client.impl.KeyStoreTlsTest](#user-content-r0s52)|1 ✅|||183ms| +|[org.apache.pulsar.client.impl.MessageChecksumTest](#user-content-r0s53)|3 ✅|||47s| +|[org.apache.pulsar.client.impl.MessageChunkingTest](#user-content-r0s54)|8 ✅||1 ⚪|73s| +|[org.apache.pulsar.client.impl.MessageParserTest](#user-content-r0s55)|2 ✅|||5s| +|[org.apache.pulsar.client.impl.MultiTopicsReaderTest](#user-content-r0s56)|8 ✅|||35s| +|[org.apache.pulsar.client.impl.NegativeAcksTest](#user-content-r0s57)|32 ✅|||11s| +|[org.apache.pulsar.client.impl.PatternTopicsConsumerImplTest](#user-content-r0s58)|11 ✅|||63s| +|[org.apache.pulsar.client.impl.PerMessageUnAcknowledgedRedeliveryTest](#user-content-r0s59)|5 ✅|||34s| +|[org.apache.pulsar.client.impl.PulsarMultiHostClientTest](#user-content-r0s60)|3 ✅|||15s| +|[org.apache.pulsar.client.impl.RawMessageSerDeserTest](#user-content-r0s61)|1 ✅|||10ms| +|[org.apache.pulsar.client.impl.SchemaDeleteTest](#user-content-r0s62)|1 ✅|||2s| +|[org.apache.pulsar.client.impl.SequenceIdWithErrorTest](#user-content-r0s63)|3 ✅||2 ⚪|18s| +|[org.apache.pulsar.client.impl.TopicDoesNotExistsTest](#user-content-r0s64)|2 ✅|||4s| +|[org.apache.pulsar.client.impl.TopicFromMessageTest](#user-content-r0s65)|5 ✅|||14s| +|[org.apache.pulsar.client.impl.TopicsConsumerImplTest](#user-content-r0s66)|17 ✅|||133s| +|[org.apache.pulsar.client.impl.UnAcknowledgedMessagesTimeoutTest](#user-content-r0s67)|7 ✅|||44s| +|[org.apache.pulsar.client.impl.ZeroQueueSizeTest](#user-content-r0s68)|14 ✅|||16s| +|[org.apache.pulsar.common.api.raw.RawMessageImplTest](#user-content-r0s69)|1 ✅|||316ms| +|[org.apache.pulsar.common.compression.CommandsTest](#user-content-r0s70)|1 ✅|||30ms| +|[org.apache.pulsar.common.compression.CompressorCodecBackwardCompatTest](#user-content-r0s71)|6 ✅|||223ms| +|[org.apache.pulsar.common.compression.CompressorCodecTest](#user-content-r0s72)|45 ✅|||737ms| +|[org.apache.pulsar.common.compression.Crc32cChecksumTest](#user-content-r0s73)|6 ✅|||5s| +|[org.apache.pulsar.common.lookup.data.LookupDataTest](#user-content-r0s74)|4 ✅|||2s| +|[org.apache.pulsar.common.naming.MetadataTests](#user-content-r0s75)|2 ✅|||161ms| +|[org.apache.pulsar.common.naming.NamespaceBundlesTest](#user-content-r0s76)|5 ✅|||99ms| +|[org.apache.pulsar.common.naming.NamespaceBundleTest](#user-content-r0s77)|6 ✅|||64ms| +|[org.apache.pulsar.common.naming.NamespaceNameTest](#user-content-r0s78)|2 ✅|||207ms| +|[org.apache.pulsar.common.naming.ServiceConfigurationTest](#user-content-r0s79)|4 ✅|||48ms| +|[org.apache.pulsar.common.naming.TopicNameTest](#user-content-r0s80)|4 ✅|||529ms| +|[org.apache.pulsar.common.net.ServiceURITest](#user-content-r0s81)|21 ✅|||237ms| +|[org.apache.pulsar.common.policies.data.AutoFailoverPolicyDataTest](#user-content-r0s82)|1 ✅|||15ms| +|[org.apache.pulsar.common.policies.data.AutoFailoverPolicyTypeTest](#user-content-r0s83)|1 ✅|||19ms| +|[org.apache.pulsar.common.policies.data.AutoTopicCreationOverrideTest](#user-content-r0s84)|6 ✅|||64ms| +|[org.apache.pulsar.common.policies.data.BacklogQuotaTest](#user-content-r0s85)|1 ✅|||12ms| +|[org.apache.pulsar.common.policies.data.ClusterDataTest](#user-content-r0s86)|1 ✅|||9ms| +|[org.apache.pulsar.common.policies.data.ConsumerStatsTest](#user-content-r0s87)|1 ✅|||8ms| +|[org.apache.pulsar.common.policies.data.EnsemblePlacementPolicyConfigTest](#user-content-r0s88)|2 ✅|||948ms| +|[org.apache.pulsar.common.policies.data.LocalPolicesTest](#user-content-r0s89)|1 ✅|||48ms| +|[org.apache.pulsar.common.policies.data.NamespaceIsolationDataTest](#user-content-r0s90)|1 ✅|||76ms| +|[org.apache.pulsar.common.policies.data.NamespaceOwnershipStatusTest](#user-content-r0s91)|1 ✅|||45ms| +|[org.apache.pulsar.common.policies.data.OffloadPoliciesTest](#user-content-r0s92)|6 ✅|||216ms| +|[org.apache.pulsar.common.policies.data.PartitionedTopicStatsTest](#user-content-r0s93)|1 ✅|||12ms| +|[org.apache.pulsar.common.policies.data.PersistencePoliciesTest](#user-content-r0s94)|1 ✅|||19ms| +|[org.apache.pulsar.common.policies.data.PersistentOfflineTopicStatsTest](#user-content-r0s95)|1 ✅|||29ms| +|[org.apache.pulsar.common.policies.data.PersistentTopicStatsTest](#user-content-r0s96)|2 ✅|||51ms| +|[org.apache.pulsar.common.policies.data.PoliciesDataTest](#user-content-r0s97)|4 ✅|||1s| +|[org.apache.pulsar.common.policies.data.PublisherStatsTest](#user-content-r0s98)|2 ✅|||37ms| +|[org.apache.pulsar.common.policies.data.ReplicatorStatsTest](#user-content-r0s99)|2 ✅|||30ms| +|[org.apache.pulsar.common.policies.data.ResourceQuotaTest](#user-content-r0s100)|2 ✅|||45ms| +|[org.apache.pulsar.common.policies.data.RetentionPolicesTest](#user-content-r0s101)|1 ✅|||8ms| +|[org.apache.pulsar.common.policies.impl.AutoFailoverPolicyFactoryTest](#user-content-r0s102)|1 ✅|||22ms| +|[org.apache.pulsar.common.policies.impl.MinAvailablePolicyTest](#user-content-r0s103)|1 ✅|||1ms| +|[org.apache.pulsar.common.policies.impl.NamespaceIsolationPoliciesTest](#user-content-r0s104)|7 ✅|||265ms| +|[org.apache.pulsar.common.policies.impl.NamespaceIsolationPolicyImplTest](#user-content-r0s105)|7 ✅|||309ms| +|[org.apache.pulsar.common.protocol.ByteBufPairTest](#user-content-r0s106)|2 ✅|||5s| +|[org.apache.pulsar.common.protocol.CommandUtilsTests](#user-content-r0s107)|7 ✅|||3s| +|[org.apache.pulsar.common.protocol.MarkersTest](#user-content-r0s108)|6 ✅|||3s| +|[org.apache.pulsar.common.protocol.PulsarDecoderTest](#user-content-r0s109)|1 ✅|||4s| +|[org.apache.pulsar.common.stats.JvmDefaultGCMetricsLoggerTest](#user-content-r0s110)|1 ✅|||82ms| +|[org.apache.pulsar.common.util.collections.BitSetRecyclableRecyclableTest](#user-content-r0s111)|2 ✅|||13ms| +|[org.apache.pulsar.common.util.collections.ConcurrentBitSetRecyclableTest](#user-content-r0s112)|2 ✅|||63ms| +|[org.apache.pulsar.common.util.collections.ConcurrentLongHashMapTest](#user-content-r0s113)|13 ✅|||28s| +|[org.apache.pulsar.common.util.collections.ConcurrentLongPairSetTest](#user-content-r0s114)|15 ✅|||2s| +|[org.apache.pulsar.common.util.collections.ConcurrentOpenHashMapTest](#user-content-r0s115)|12 ✅|||9s| +|[org.apache.pulsar.common.util.collections.ConcurrentOpenHashSetTest](#user-content-r0s116)|11 ✅|||7s| +|[org.apache.pulsar.common.util.collections.ConcurrentOpenLongPairRangeSetTest](#user-content-r0s117)|13 ✅|||1s| +|[org.apache.pulsar.common.util.collections.ConcurrentSortedLongPairSetTest](#user-content-r0s118)|9 ✅|||342ms| +|[org.apache.pulsar.common.util.collections.FieldParserTest](#user-content-r0s119)|2 ✅|||64ms| +|[org.apache.pulsar.common.util.collections.GrowableArrayBlockingQueueTest](#user-content-r0s120)|6 ✅|||350ms| +|[org.apache.pulsar.common.util.collections.GrowablePriorityLongPairQueueTest](#user-content-r0s121)|15 ✅|||3s| +|[org.apache.pulsar.common.util.collections.TripleLongPriorityQueueTest](#user-content-r0s122)|3 ✅|||238ms| +|[org.apache.pulsar.common.util.FieldParserTest](#user-content-r0s123)|1 ✅|||242ms| +|[org.apache.pulsar.common.util.FileModifiedTimeUpdaterTest](#user-content-r0s124)|6 ✅|||6s| +|[org.apache.pulsar.common.util.netty.ChannelFuturesTest](#user-content-r0s125)|5 ✅|||2s| +|[org.apache.pulsar.common.util.RateLimiterTest](#user-content-r0s126)|11 ✅|||7s| +|[org.apache.pulsar.common.util.ReflectionsTest](#user-content-r0s127)|12 ✅|||172ms| +|[org.apache.pulsar.common.util.RelativeTimeUtilTest](#user-content-r0s128)|1 ✅|||39ms| +|[org.apache.pulsar.discovery.service.web.DiscoveryServiceWebTest](#user-content-r0s129)|1 ✅|||5s| +|[org.apache.pulsar.functions.worker.PulsarFunctionE2ESecurityTest](#user-content-r0s130)|2 ✅|||28s| +|[org.apache.pulsar.functions.worker.PulsarFunctionPublishTest](#user-content-r0s131)|3 ✅|||42s| +|[org.apache.pulsar.functions.worker.PulsarFunctionTlsTest](#user-content-r0s132)|1 ✅|||12s| +|[org.apache.pulsar.io.PulsarFunctionTlsTest](#user-content-r0s133)|1 ✅|||30s| +|[org.apache.pulsar.proxy.server.AdminProxyHandlerTest](#user-content-r0s134)|1 ✅|||474ms| +|[org.apache.pulsar.proxy.server.AuthedAdminProxyHandlerTest](#user-content-r0s135)|1 ✅|||2s| +|[org.apache.pulsar.proxy.server.FunctionWorkerRoutingTest](#user-content-r0s136)|1 ✅|||10ms| +|[org.apache.pulsar.proxy.server.ProxyAdditionalServletTest](#user-content-r0s137)|1 ✅|||125ms| +|[org.apache.pulsar.proxy.server.ProxyAuthenticatedProducerConsumerTest](#user-content-r0s138)|1 ✅|||2s| +|[org.apache.pulsar.proxy.server.ProxyAuthenticationTest](#user-content-r0s139)|1 ✅|||17s| +|[org.apache.pulsar.proxy.server.ProxyConnectionThrottlingTest](#user-content-r0s140)|1 ✅|||2s| +|[org.apache.pulsar.proxy.server.ProxyEnableHAProxyProtocolTest](#user-content-r0s141)|1 ✅|||511ms| +|[org.apache.pulsar.proxy.server.ProxyForwardAuthDataTest](#user-content-r0s142)|1 ✅|||32s| +|[org.apache.pulsar.proxy.server.ProxyIsAHttpProxyTest](#user-content-r0s143)|10 ✅|||2s| +|[org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithAuth](#user-content-r0s144)|3 ✅|||7s| +|[org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithoutAuth](#user-content-r0s145)|3 ✅|||7s| +|[org.apache.pulsar.proxy.server.ProxyLookupThrottlingTest](#user-content-r0s146)|1 ✅|||3s| +|[org.apache.pulsar.proxy.server.ProxyParserTest](#user-content-r0s147)|5 ✅|||1s| +|[org.apache.pulsar.proxy.server.ProxyRolesEnforcementTest](#user-content-r0s148)|1 ✅|||10s| +|[org.apache.pulsar.proxy.server.ProxyStatsTest](#user-content-r0s149)|3 ✅|||533ms| +|[org.apache.pulsar.proxy.server.ProxyTest](#user-content-r0s150)|6 ✅|||3s| +|[org.apache.pulsar.proxy.server.ProxyTlsTest](#user-content-r0s151)|2 ✅|||414ms| +|[org.apache.pulsar.proxy.server.ProxyTlsTestWithAuth](#user-content-r0s152)|1 ✅|||4ms| +|[org.apache.pulsar.proxy.server.ProxyWithAuthorizationNegTest](#user-content-r0s153)|1 ✅|||2s| +|[org.apache.pulsar.proxy.server.ProxyWithAuthorizationTest](#user-content-r0s154)|13 ✅|||33s| +|[org.apache.pulsar.proxy.server.ProxyWithoutServiceDiscoveryTest](#user-content-r0s155)|1 ✅|||2s| +|[org.apache.pulsar.proxy.server.SuperUserAuthedAdminProxyHandlerTest](#user-content-r0s156)|3 ✅|||8s| +|[org.apache.pulsar.proxy.server.UnauthedAdminProxyHandlerTest](#user-content-r0s157)|2 ✅|||114ms| +|[org.apache.pulsar.PulsarBrokerStarterTest](#user-content-r0s158)|9 ✅|||591ms| +|[org.apache.pulsar.schema.compatibility.SchemaCompatibilityCheckTest](#user-content-r0s159)|23 ✅|||107s| +|[org.apache.pulsar.schema.PartitionedTopicSchemaTest](#user-content-r0s160)|1 ✅|||29s| +|[org.apache.pulsar.schema.SchemaTest](#user-content-r0s161)|3 ✅|||31s| +|[org.apache.pulsar.stats.client.PulsarBrokerStatsClientTest](#user-content-r0s162)|2 ✅|||41s| +|[org.apache.pulsar.tests.EnumValuesDataProviderTest](#user-content-r0s163)|6 ✅|||23ms| +|[org.apache.pulsar.tests.TestRetrySupportBeforeMethodRetryTest](#user-content-r0s164)|1 ✅||4 ⚪|36ms| +|[org.apache.pulsar.tests.TestRetrySupportRetryTest](#user-content-r0s165)|1 ✅||4 ⚪|27ms| +|[org.apache.pulsar.tests.TestRetrySupportSuccessTest](#user-content-r0s166)|3 ✅|||1ms| +|[org.apache.pulsar.tests.ThreadDumpUtilTest](#user-content-r0s167)|2 ✅|||17ms| +|[org.apache.pulsar.utils.SimpleTextOutputStreamTest](#user-content-r0s168)|4 ✅|||50ms| +|[org.apache.pulsar.utils.StatsOutputStreamTest](#user-content-r0s169)|6 ✅|||59ms| +|[org.apache.pulsar.websocket.proxy.ProxyAuthenticationTest](#user-content-r0s170)|4 ✅|||29s| +|[org.apache.pulsar.websocket.proxy.ProxyAuthorizationTest](#user-content-r0s171)|1 ✅|||1s| +|[org.apache.pulsar.websocket.proxy.ProxyConfigurationTest](#user-content-r0s172)|2 ✅|||9s| +|[org.apache.pulsar.websocket.proxy.ProxyPublishConsumeTlsTest](#user-content-r0s173)|1 ✅|||11s| +|[org.apache.pulsar.websocket.proxy.ProxyPublishConsumeWithoutZKTest](#user-content-r0s174)|1 ✅|||7s| +|[org.apache.pulsar.websocket.proxy.v1.V1_ProxyAuthenticationTest](#user-content-r0s175)|4 ✅|||30s| +### ❌ org.apache.pulsar.AddMissingPatchVersionTest ``` ⚪ testVersionStrings ❌ testVersionStrings java.lang.AssertionError: expected [1.2.1] but found [1.2.0] ``` -### ✅ org.apache.pulsar.broker.admin.AdminApiOffloadTest +### ✅ org.apache.pulsar.broker.admin.AdminApiOffloadTest ``` ✅ testOffloadPoliciesAppliedApi ✅ testOffloadV2 @@ -198,38 +198,38 @@ ✅ testOffloadPolicies ✅ testOffloadPoliciesApi ``` -### ✅ org.apache.pulsar.broker.auth.AuthenticationServiceTest +### ✅ org.apache.pulsar.broker.auth.AuthenticationServiceTest ``` ✅ testAuthentication ✅ testAuthenticationHttp ``` -### ✅ org.apache.pulsar.broker.auth.AuthLogsTest +### ✅ org.apache.pulsar.broker.auth.AuthLogsTest ``` ✅ httpEndpoint ✅ binaryEndpoint ``` -### ✅ org.apache.pulsar.broker.auth.AuthorizationTest +### ✅ org.apache.pulsar.broker.auth.AuthorizationTest ``` ✅ simple ``` -### ✅ org.apache.pulsar.broker.lookup.http.HttpTopicLookupv2Test +### ✅ org.apache.pulsar.broker.lookup.http.HttpTopicLookupv2Test ``` ✅ crossColoLookup ✅ testNotEnoughLookupPermits ✅ testValidateReplicationSettingsOnNamespace ✅ testDataPojo ``` -### ✅ org.apache.pulsar.broker.namespace.NamespaceCreateBundlesTest +### ✅ org.apache.pulsar.broker.namespace.NamespaceCreateBundlesTest ``` ✅ testCreateNamespaceWithDefaultBundles ✅ testSplitBundleUpdatesLocalPoliciesWithoutOverwriting ``` -### ✅ org.apache.pulsar.broker.namespace.NamespaceOwnershipListenerTests +### ✅ org.apache.pulsar.broker.namespace.NamespaceOwnershipListenerTests ``` ✅ testGetAllPartitions ✅ testNamespaceBundleOwnershipListener ``` -### ✅ org.apache.pulsar.broker.namespace.NamespaceServiceTest +### ✅ org.apache.pulsar.broker.namespace.NamespaceServiceTest ``` ✅ testSplitMapWithRefreshedStatMap ✅ testRemoveOwnershipNamespaceBundle @@ -242,16 +242,16 @@ ✅ testCreateNamespaceWithDefaultNumberOfBundles ✅ testRemoveOwnershipAndSplitBundle ``` -### ✅ org.apache.pulsar.broker.namespace.NamespaceUnloadingTest +### ✅ org.apache.pulsar.broker.namespace.NamespaceUnloadingTest ``` ✅ testUnloadNotLoadedNamespace ✅ testUnloadPartiallyLoadedNamespace ``` -### ✅ org.apache.pulsar.broker.namespace.OwnerShipCacheForCurrentServerTest +### ✅ org.apache.pulsar.broker.namespace.OwnerShipCacheForCurrentServerTest ``` ✅ testOwnershipForCurrentServer ``` -### ✅ org.apache.pulsar.broker.namespace.OwnershipCacheTest +### ✅ org.apache.pulsar.broker.namespace.OwnershipCacheTest ``` ✅ testGetOwnedServiceUnits ✅ testRemoveOwnership @@ -262,7 +262,7 @@ ✅ testDisableOwnership ✅ testReestablishOwnership ``` -### ✅ org.apache.pulsar.broker.protocol.ProtocolHandlersTest +### ✅ org.apache.pulsar.broker.protocol.ProtocolHandlersTest ``` ✅ testStart ✅ testGetProtocol @@ -271,28 +271,28 @@ ✅ testNewChannelInitializersOverlapped ✅ testGetProtocolDataToAdvertise ``` -### ✅ org.apache.pulsar.broker.protocol.ProtocolHandlerUtilsTest +### ✅ org.apache.pulsar.broker.protocol.ProtocolHandlerUtilsTest ``` ✅ testLoadProtocolHandler ✅ testLoadProtocolHandlerBlankHandlerClass ✅ testLoadProtocolHandlerWrongHandlerClass ``` -### ✅ org.apache.pulsar.broker.protocol.ProtocolHandlerWithClassLoaderTest +### ✅ org.apache.pulsar.broker.protocol.ProtocolHandlerWithClassLoaderTest ``` ✅ testWrapper ``` -### ✅ org.apache.pulsar.broker.PulsarServiceTest +### ✅ org.apache.pulsar.broker.PulsarServiceTest ``` ✅ testGetWorkerService ✅ testGetWorkerServiceException ``` -### ✅ org.apache.pulsar.broker.service.MessagePublishBufferThrottleTest +### ✅ org.apache.pulsar.broker.service.MessagePublishBufferThrottleTest ``` ✅ testMessagePublishBufferThrottleEnable ✅ testBlockByPublishRateLimiting ✅ testMessagePublishBufferThrottleDisabled ``` -### ✅ org.apache.pulsar.broker.service.ReplicatorTest +### ✅ org.apache.pulsar.broker.service.ReplicatorTest ``` ✅ testResumptionAfterBacklogRelaxed ✅ testReplicationOverrides @@ -317,7 +317,7 @@ ✅ testFailures ✅ testReplicatorProducerClosing ``` -### ✅ org.apache.pulsar.broker.service.TopicOwnerTest +### ✅ org.apache.pulsar.broker.service.TopicOwnerTest ``` ✅ testReleaseOwnershipWithZookeeperDisconnectedBeforeOwnershipNodeDeleted ✅ testAcquireOwnershipWithZookeeperDisconnectedAfterOwnershipNodeCreated @@ -328,37 +328,37 @@ ✅ testReleaseOwnershipWithZookeeperDisconnectedAfterOwnershipNodeDeleted ✅ testReestablishOwnershipAfterInvalidateCache ``` -### ✅ org.apache.pulsar.broker.SLAMonitoringTest +### ✅ org.apache.pulsar.broker.SLAMonitoringTest ``` ✅ testOwnedNamespaces ✅ testOwnershipAfterSetup ✅ testUnloadIfBrokerCrashes ✅ testOwnershipViaAdminAfterSetup ``` -### ✅ org.apache.pulsar.broker.stats.BookieClientsStatsGeneratorTest +### ✅ org.apache.pulsar.broker.stats.BookieClientsStatsGeneratorTest ``` ✅ testJvmDirectMemoryUsedMetric ✅ testBookieClientStatsGenerator ``` -### ✅ org.apache.pulsar.broker.stats.ConsumerStatsTest +### ✅ org.apache.pulsar.broker.stats.ConsumerStatsTest ``` ✅ testAckStatsOnPartitionedTopicForExclusiveSubscription ✅ testConsumerStatsOnZeroMaxUnackedMessagesPerConsumer ✅ testUpdateStatsForActiveConsumerAndSubscription ``` -### ✅ org.apache.pulsar.broker.stats.ManagedCursorMetricsTest +### ✅ org.apache.pulsar.broker.stats.ManagedCursorMetricsTest ``` ✅ testManagedCursorMetrics ``` -### ✅ org.apache.pulsar.broker.stats.ManagedLedgerMetricsTest +### ✅ org.apache.pulsar.broker.stats.ManagedLedgerMetricsTest ``` ✅ testManagedLedgerMetrics ``` -### ✅ org.apache.pulsar.broker.stats.prometheus.AggregatedNamespaceStatsTest +### ✅ org.apache.pulsar.broker.stats.prometheus.AggregatedNamespaceStatsTest ``` ✅ testSimpleAggregation ``` -### ✅ org.apache.pulsar.broker.stats.PrometheusMetricsTest +### ✅ org.apache.pulsar.broker.stats.PrometheusMetricsTest ``` ✅ testPerTopicStats ✅ testAuthMetrics @@ -376,29 +376,29 @@ ✅ testManagedLedgerCacheStats ✅ testManagedLedgerStats ``` -### ✅ org.apache.pulsar.broker.stats.SubscriptionStatsTest +### ✅ org.apache.pulsar.broker.stats.SubscriptionStatsTest ``` ✅ testConsumersAfterMarkDelete ✅ testNonContiguousDeletedMessagesRanges ``` -### ✅ org.apache.pulsar.broker.systopic.NamespaceEventsSystemTopicServiceTest +### ✅ org.apache.pulsar.broker.systopic.NamespaceEventsSystemTopicServiceTest ``` ✅ testSendAndReceiveNamespaceEvents ``` -### ✅ org.apache.pulsar.broker.transaction.buffer.InMemTransactionBufferReaderTest +### ✅ org.apache.pulsar.broker.transaction.buffer.InMemTransactionBufferReaderTest ``` ✅ testCloseReleaseAllEntries ✅ testInvalidNumEntriesArgument ✅ testEndOfTransactionException ``` -### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionBufferClientTest +### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionBufferClientTest ``` ✅ testAbortOnTopic ✅ testAbortOnSubscription ✅ testCommitOnTopic ✅ testCommitOnSubscription ``` -### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionBufferTest +### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionBufferTest ``` ✅ testOpenReaderOnNonExistentTxn ✅ testAbortCommittedTxn @@ -408,49 +408,49 @@ ✅ testCommitTxn ✅ testOpenReaderOnAnOpenTxn ``` -### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionEntryImplTest +### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionEntryImplTest ``` ✅ testCloseShouldReleaseBuffer ``` -### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionLowWaterMarkTest +### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionLowWaterMarkTest ``` ✅ testTransactionBufferLowWaterMark ✅ testPendingAckLowWaterMark ``` -### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionStablePositionTest +### ✅ org.apache.pulsar.broker.transaction.buffer.TransactionStablePositionTest ``` ✅ commitTxnTest ✅ abortTxnTest ⚪ commitTxnTest ``` -### ✅ org.apache.pulsar.broker.transaction.coordinator.TransactionCoordinatorClientTest +### ✅ org.apache.pulsar.broker.transaction.coordinator.TransactionCoordinatorClientTest ``` ✅ testClientStart ✅ testCommitAndAbort ✅ testNewTxn ``` -### ✅ org.apache.pulsar.broker.transaction.coordinator.TransactionMetaStoreAssignmentTest +### ✅ org.apache.pulsar.broker.transaction.coordinator.TransactionMetaStoreAssignmentTest ``` ✅ testTransactionMetaStoreAssignAndFailover ``` -### ✅ org.apache.pulsar.broker.transaction.pendingack.PendingAckInMemoryDeleteTest +### ✅ org.apache.pulsar.broker.transaction.pendingack.PendingAckInMemoryDeleteTest ``` ⚪ txnAckTestNoBatchAndSharedSubMemoryDeleteTest ✅ txnAckTestNoBatchAndSharedSubMemoryDeleteTest ✅ txnAckTestBatchAndSharedSubMemoryDeleteTest ``` -### ✅ org.apache.pulsar.broker.transaction.TransactionConsumeTest +### ✅ org.apache.pulsar.broker.transaction.TransactionConsumeTest ``` ✅ noSortedTest ✅ sortedTest ``` -### ✅ org.apache.pulsar.broker.web.RestExceptionTest +### ✅ org.apache.pulsar.broker.web.RestExceptionTest ``` ✅ testRestException ✅ testWebApplicationException ✅ testOtherException ``` -### ✅ org.apache.pulsar.broker.web.WebServiceTest +### ✅ org.apache.pulsar.broker.web.WebServiceTest ``` ✅ testTlsAuthDisallowInsecure ✅ testBrokerReady @@ -462,28 +462,28 @@ ✅ testTlsDisabled ✅ testRateLimiting ``` -### ✅ org.apache.pulsar.client.impl.AdminApiKeyStoreTlsAuthTest +### ✅ org.apache.pulsar.client.impl.AdminApiKeyStoreTlsAuthTest ``` ✅ testAuthorizedUserAsOriginalPrincipal ✅ testSuperUserCantListNamespaces ✅ testPersistentList ✅ testSuperUserCanListTenants ``` -### ✅ org.apache.pulsar.client.impl.BatchMessageIdImplSerializationTest +### ✅ org.apache.pulsar.client.impl.BatchMessageIdImplSerializationTest ``` ✅ testSerializationEmpty ✅ testSerialization1 ✅ testSerializationNull ✅ testSerialization2 ``` -### ✅ org.apache.pulsar.client.impl.BatchMessageIndexAckDisableTest +### ✅ org.apache.pulsar.client.impl.BatchMessageIndexAckDisableTest ``` ✅ testBatchMessageIndexAckForExclusiveSubscription ✅ testBatchMessageIndexAckForSharedSubscription ✅ testBatchMessageIndexAckForExclusiveSubscription ✅ testBatchMessageIndexAckForSharedSubscription ``` -### ✅ org.apache.pulsar.client.impl.BatchMessageIndexAckTest +### ✅ org.apache.pulsar.client.impl.BatchMessageIndexAckTest ``` ✅ testBatchMessageIndexAckForSharedSubscription ✅ testBatchMessageIndexAckForSharedSubscription @@ -491,7 +491,7 @@ ✅ testBatchMessageIndexAckForExclusiveSubscription ✅ testBatchMessageIndexAckForExclusiveSubscription ``` -### ✅ org.apache.pulsar.client.impl.BrokerClientIntegrationTest +### ✅ org.apache.pulsar.client.impl.BrokerClientIntegrationTest ``` ✅ testDisconnectClientWithoutClosingConnection ✅ testResetCursor @@ -509,22 +509,22 @@ ✅ testMaxConcurrentTopicLoading ✅ testCloseConnectionOnInternalServerError ``` -### ✅ org.apache.pulsar.client.impl.CompactedOutBatchMessageTest +### ✅ org.apache.pulsar.client.impl.CompactedOutBatchMessageTest ``` ✅ testCompactedOutMessages ``` -### ✅ org.apache.pulsar.client.impl.ConsumerAckResponseTest +### ✅ org.apache.pulsar.client.impl.ConsumerAckResponseTest ``` ✅ testAckResponse ``` -### ✅ org.apache.pulsar.client.impl.ConsumerConfigurationTest +### ✅ org.apache.pulsar.client.impl.ConsumerConfigurationTest ``` ✅ testReadCompactNonPersistentExclusive ✅ testReadCompactPersistentExclusive ✅ testReadCompactPersistentFailover ✅ testReadCompactPersistentShared ``` -### ✅ org.apache.pulsar.client.impl.ConsumerDedupPermitsUpdate +### ✅ org.apache.pulsar.client.impl.ConsumerDedupPermitsUpdate ``` ✅ testConsumerDedup ✅ testConsumerDedup @@ -534,33 +534,33 @@ ✅ testConsumerDedup ✅ testConsumerDedup ``` -### ✅ org.apache.pulsar.client.impl.ConsumerUnsubscribeTest +### ✅ org.apache.pulsar.client.impl.ConsumerUnsubscribeTest ``` ✅ testConsumerUnsubscribeReference ``` -### ✅ org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithAuth +### ✅ org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithAuth ``` ✅ testTlsClientAuthOverHTTPProtocol ✅ testTlsClientAuthOverBinaryProtocol ✅ testTlsLargeSizeMessage ``` -### ✅ org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithoutAuth +### ✅ org.apache.pulsar.client.impl.KeyStoreTlsProducerConsumerTestWithoutAuth ``` ✅ testTlsClientAuthOverHTTPProtocol ✅ testTlsClientAuthOverBinaryProtocol ✅ testTlsLargeSizeMessage ``` -### ✅ org.apache.pulsar.client.impl.KeyStoreTlsTest +### ✅ org.apache.pulsar.client.impl.KeyStoreTlsTest ``` ✅ testValidate ``` -### ✅ org.apache.pulsar.client.impl.MessageChecksumTest +### ✅ org.apache.pulsar.client.impl.MessageChecksumTest ``` ✅ testChecksumCompatibilityInMixedVersionBrokerCluster ✅ testTamperingMessageIsDetected ✅ testChecksumCompatibilityInMixedVersionBrokerCluster ``` -### ✅ org.apache.pulsar.client.impl.MessageChunkingTest +### ✅ org.apache.pulsar.client.impl.MessageChunkingTest ``` ✅ testPublishWithFailure ✅ testInvalidUseCaseForChunking @@ -572,12 +572,12 @@ ✅ testLargeMessage ⚪ testMaxPendingChunkMessages ``` -### ✅ org.apache.pulsar.client.impl.MessageParserTest +### ✅ org.apache.pulsar.client.impl.MessageParserTest ``` ✅ testWithoutBatches ✅ testWithBatches ``` -### ✅ org.apache.pulsar.client.impl.MultiTopicsReaderTest +### ✅ org.apache.pulsar.client.impl.MultiTopicsReaderTest ``` ✅ testReadMessageWithBatchingWithMessageInclusive ✅ testKeyHashRangeReader @@ -588,7 +588,7 @@ ✅ testReadMessageWithoutBatching ✅ testReaderWithTimeLong ``` -### ✅ org.apache.pulsar.client.impl.NegativeAcksTest +### ✅ org.apache.pulsar.client.impl.NegativeAcksTest ``` ✅ testNegativeAcks ✅ testNegativeAcks @@ -623,7 +623,7 @@ ✅ testNegativeAcks ✅ testNegativeAcks ``` -### ✅ org.apache.pulsar.client.impl.PatternTopicsConsumerImplTest +### ✅ org.apache.pulsar.client.impl.PatternTopicsConsumerImplTest ``` ✅ testStartEmptyPatternConsumer ✅ testBinaryProtoToGetTopicsOfNamespaceAll @@ -637,7 +637,7 @@ ✅ testTopicsListMinus ✅ testAutoSubscribePatternConsumer ``` -### ✅ org.apache.pulsar.client.impl.PerMessageUnAcknowledgedRedeliveryTest +### ✅ org.apache.pulsar.client.impl.PerMessageUnAcknowledgedRedeliveryTest ``` ✅ testSharedAckedNormalTopic ✅ testUnAckedMessageTrackerSize @@ -645,21 +645,21 @@ ✅ testExclusiveAckedNormalTopic ✅ testFailoverAckedNormalTopic ``` -### ✅ org.apache.pulsar.client.impl.PulsarMultiHostClientTest +### ✅ org.apache.pulsar.client.impl.PulsarMultiHostClientTest ``` ✅ testMultiHostUrlRetrySuccess ✅ testGetPartitionedTopicDataTimeout ✅ testGetPartitionedTopicMetaData ``` -### ✅ org.apache.pulsar.client.impl.RawMessageSerDeserTest +### ✅ org.apache.pulsar.client.impl.RawMessageSerDeserTest ``` ✅ testSerializationAndDeserialization ``` -### ✅ org.apache.pulsar.client.impl.SchemaDeleteTest +### ✅ org.apache.pulsar.client.impl.SchemaDeleteTest ``` ✅ createTopicDeleteTopicCreateTopic ``` -### ✅ org.apache.pulsar.client.impl.SequenceIdWithErrorTest +### ✅ org.apache.pulsar.client.impl.SequenceIdWithErrorTest ``` ✅ testCheckSequenceId ✅ testDeleteTopicWithMissingData @@ -667,12 +667,12 @@ ⚪ testCrashBrokerWithoutCursorLedgerLeak ⚪ testSkipCorruptDataLedger ``` -### ✅ org.apache.pulsar.client.impl.TopicDoesNotExistsTest +### ✅ org.apache.pulsar.client.impl.TopicDoesNotExistsTest ``` ✅ testCreateConsumerOnNotExistsTopic ✅ testCreateProducerOnNotExistsTopic ``` -### ✅ org.apache.pulsar.client.impl.TopicFromMessageTest +### ✅ org.apache.pulsar.client.impl.TopicFromMessageTest ``` ✅ testSingleTopicConsumerNoBatchFullName ✅ testMultiTopicConsumerBatchShortName @@ -680,7 +680,7 @@ ✅ testMultiTopicConsumerNoBatchShortName ✅ testSingleTopicConsumerBatchShortName ``` -### ✅ org.apache.pulsar.client.impl.TopicsConsumerImplTest +### ✅ org.apache.pulsar.client.impl.TopicsConsumerImplTest ``` ✅ testTopicAutoUpdatePartitions ✅ testDifferentTopicsNameSubscribe @@ -700,7 +700,7 @@ ✅ testTopicNameValid ✅ testAsyncConsumer ``` -### ✅ org.apache.pulsar.client.impl.UnAcknowledgedMessagesTimeoutTest +### ✅ org.apache.pulsar.client.impl.UnAcknowledgedMessagesTimeoutTest ``` ✅ testCheckUnAcknowledgedMessageTimer ✅ testExclusiveSingleAckedNormalTopic @@ -710,7 +710,7 @@ ✅ testExclusiveCumulativeAckedNormalTopic ✅ testSingleMessageBatch ``` -### ✅ org.apache.pulsar.client.impl.ZeroQueueSizeTest +### ✅ org.apache.pulsar.client.impl.ZeroQueueSizeTest ``` ✅ zeroQueueSizeSharedSubscription ✅ testPauseAndResume @@ -727,15 +727,15 @@ ✅ testFailedZeroQueueSizeBatchMessage ✅ testPauseAndResumeWithUnloading ``` -### ✅ org.apache.pulsar.common.api.raw.RawMessageImplTest +### ✅ org.apache.pulsar.common.api.raw.RawMessageImplTest ``` ✅ testGetProperties ``` -### ✅ org.apache.pulsar.common.compression.CommandsTest +### ✅ org.apache.pulsar.common.compression.CommandsTest ``` ✅ testChecksumSendCommand ``` -### ✅ org.apache.pulsar.common.compression.CompressorCodecBackwardCompatTest +### ✅ org.apache.pulsar.common.compression.CompressorCodecBackwardCompatTest ``` ✅ testCompressDecompress ✅ testCompressDecompress @@ -744,7 +744,7 @@ ✅ testCompressDecompress ✅ testCompressDecompress ``` -### ✅ org.apache.pulsar.common.compression.CompressorCodecTest +### ✅ org.apache.pulsar.common.compression.CompressorCodecTest ``` ✅ testCompressDecompress ✅ testMultpileUsages @@ -792,7 +792,7 @@ ✅ testDecompressReadonlyByteBuf ✅ testMultpileUsages ``` -### ✅ org.apache.pulsar.common.compression.Crc32cChecksumTest +### ✅ org.apache.pulsar.common.compression.Crc32cChecksumTest ``` ✅ testCrc32cHardware ✅ testCrc32cDirectMemoryHardware @@ -801,19 +801,19 @@ ✅ testCrc32cIncremental ✅ testCrc32cIncrementalUsingProvider ``` -### ✅ org.apache.pulsar.common.lookup.data.LookupDataTest +### ✅ org.apache.pulsar.common.lookup.data.LookupDataTest ``` ✅ testLoadReportSerialization ✅ testUrlEncoder ✅ serializeToJsonTest ✅ withConstructor ``` -### ✅ org.apache.pulsar.common.naming.MetadataTests +### ✅ org.apache.pulsar.common.naming.MetadataTests ``` ✅ testInvalidMetadata ✅ testValidMetadata ``` -### ✅ org.apache.pulsar.common.naming.NamespaceBundlesTest +### ✅ org.apache.pulsar.common.naming.NamespaceBundlesTest ``` ✅ testConstructor ✅ testSplitBundleInTwo @@ -821,7 +821,7 @@ ✅ testFindBundle ✅ testSplitBundleByFixBoundary ``` -### ✅ org.apache.pulsar.common.naming.NamespaceBundleTest +### ✅ org.apache.pulsar.common.naming.NamespaceBundleTest ``` ✅ testIncludes ✅ testGetBundle @@ -830,26 +830,26 @@ ✅ testToString ✅ testEquals ``` -### ✅ org.apache.pulsar.common.naming.NamespaceNameTest +### ✅ org.apache.pulsar.common.naming.NamespaceNameTest ``` ✅ namespace ✅ testNewScheme ``` -### ✅ org.apache.pulsar.common.naming.ServiceConfigurationTest +### ✅ org.apache.pulsar.common.naming.ServiceConfigurationTest ``` ✅ testOptionalSettingPresent ✅ testOptionalSettingEmpty ✅ testInit ✅ testInitFailure ``` -### ✅ org.apache.pulsar.common.naming.TopicNameTest +### ✅ org.apache.pulsar.common.naming.TopicNameTest ``` ✅ testShortTopicName ✅ topic ✅ testTopicNameWithoutCluster ✅ testDecodeEncode ``` -### ✅ org.apache.pulsar.common.net.ServiceURITest +### ✅ org.apache.pulsar.common.net.ServiceURITest ``` ✅ testEmptyServiceUriString ✅ testMultipleHostsSemiColon @@ -873,15 +873,15 @@ ✅ testMultipleHostsWithoutPulsarPorts ✅ testIpv6Uri ``` -### ✅ org.apache.pulsar.common.policies.data.AutoFailoverPolicyDataTest +### ✅ org.apache.pulsar.common.policies.data.AutoFailoverPolicyDataTest ``` ✅ testAutoFailoverPolicyData ``` -### ✅ org.apache.pulsar.common.policies.data.AutoFailoverPolicyTypeTest +### ✅ org.apache.pulsar.common.policies.data.AutoFailoverPolicyTypeTest ``` ✅ testAutoFailoverPolicyType ``` -### ✅ org.apache.pulsar.common.policies.data.AutoTopicCreationOverrideTest +### ✅ org.apache.pulsar.common.policies.data.AutoTopicCreationOverrideTest ``` ✅ testInvalidTopicType ✅ testNumPartitionsTooLow @@ -890,36 +890,36 @@ ✅ testNumPartitionsOnNonPartitioned ✅ testValidOverridePartitioned ``` -### ✅ org.apache.pulsar.common.policies.data.BacklogQuotaTest +### ✅ org.apache.pulsar.common.policies.data.BacklogQuotaTest ``` ✅ testBacklogQuotaIdentity ``` -### ✅ org.apache.pulsar.common.policies.data.ClusterDataTest +### ✅ org.apache.pulsar.common.policies.data.ClusterDataTest ``` ✅ simple ``` -### ✅ org.apache.pulsar.common.policies.data.ConsumerStatsTest +### ✅ org.apache.pulsar.common.policies.data.ConsumerStatsTest ``` ✅ testConsumerStats ``` -### ✅ org.apache.pulsar.common.policies.data.EnsemblePlacementPolicyConfigTest +### ✅ org.apache.pulsar.common.policies.data.EnsemblePlacementPolicyConfigTest ``` ✅ testDecodeFailed ✅ testEncodeDecodeSuccessfully ``` -### ✅ org.apache.pulsar.common.policies.data.LocalPolicesTest +### ✅ org.apache.pulsar.common.policies.data.LocalPolicesTest ``` ✅ testLocalPolices ``` -### ✅ org.apache.pulsar.common.policies.data.NamespaceIsolationDataTest +### ✅ org.apache.pulsar.common.policies.data.NamespaceIsolationDataTest ``` ✅ testNamespaceIsolationData ``` -### ✅ org.apache.pulsar.common.policies.data.NamespaceOwnershipStatusTest +### ✅ org.apache.pulsar.common.policies.data.NamespaceOwnershipStatusTest ``` ✅ testSerialization ``` -### ✅ org.apache.pulsar.common.policies.data.OffloadPoliciesTest +### ✅ org.apache.pulsar.common.policies.data.OffloadPoliciesTest ``` ✅ testGcsConfiguration ✅ mergeTest @@ -928,58 +928,58 @@ ✅ testS3Configuration ✅ oldPoliciesCompatibleTest ``` -### ✅ org.apache.pulsar.common.policies.data.PartitionedTopicStatsTest +### ✅ org.apache.pulsar.common.policies.data.PartitionedTopicStatsTest ``` ✅ testPartitionedTopicStats ``` -### ✅ org.apache.pulsar.common.policies.data.PersistencePoliciesTest +### ✅ org.apache.pulsar.common.policies.data.PersistencePoliciesTest ``` ✅ testPersistencePolicies ``` -### ✅ org.apache.pulsar.common.policies.data.PersistentOfflineTopicStatsTest +### ✅ org.apache.pulsar.common.policies.data.PersistentOfflineTopicStatsTest ``` ✅ testPersistentOfflineTopicStats ``` -### ✅ org.apache.pulsar.common.policies.data.PersistentTopicStatsTest +### ✅ org.apache.pulsar.common.policies.data.PersistentTopicStatsTest ``` ✅ testPersistentTopicStatsAggregation ✅ testPersistentTopicStats ``` -### ✅ org.apache.pulsar.common.policies.data.PoliciesDataTest +### ✅ org.apache.pulsar.common.policies.data.PoliciesDataTest ``` ✅ propertyAdmin ✅ policies ✅ bundlesData ✅ bundlesPolicies ``` -### ✅ org.apache.pulsar.common.policies.data.PublisherStatsTest +### ✅ org.apache.pulsar.common.policies.data.PublisherStatsTest ``` ✅ testPublisherStats ✅ testPublisherStatsAggregation ``` -### ✅ org.apache.pulsar.common.policies.data.ReplicatorStatsTest +### ✅ org.apache.pulsar.common.policies.data.ReplicatorStatsTest ``` ✅ testReplicatorStatsAdd ✅ testReplicatorStatsNull ``` -### ✅ org.apache.pulsar.common.policies.data.ResourceQuotaTest +### ✅ org.apache.pulsar.common.policies.data.ResourceQuotaTest ``` ✅ testResourceQuotaDefault ✅ testResourceQuotaEqual ``` -### ✅ org.apache.pulsar.common.policies.data.RetentionPolicesTest +### ✅ org.apache.pulsar.common.policies.data.RetentionPolicesTest ``` ✅ testRetentionPolices ``` -### ✅ org.apache.pulsar.common.policies.impl.AutoFailoverPolicyFactoryTest +### ✅ org.apache.pulsar.common.policies.impl.AutoFailoverPolicyFactoryTest ``` ✅ testAutoFailoverPolicyFactory ``` -### ✅ org.apache.pulsar.common.policies.impl.MinAvailablePolicyTest +### ✅ org.apache.pulsar.common.policies.impl.MinAvailablePolicyTest ``` ✅ testMinAvailablePolicty ``` -### ✅ org.apache.pulsar.common.policies.impl.NamespaceIsolationPoliciesTest +### ✅ org.apache.pulsar.common.policies.impl.NamespaceIsolationPoliciesTest ``` ✅ testBrokerAssignment ✅ testGetNamespaceIsolationPolicyByName @@ -989,7 +989,7 @@ ✅ testDefaultConstructor ✅ testGetNamespaceIsolationPolicyByNamespace ``` -### ✅ org.apache.pulsar.common.policies.impl.NamespaceIsolationPolicyImplTest +### ✅ org.apache.pulsar.common.policies.impl.NamespaceIsolationPolicyImplTest ``` ✅ testFindBrokers ✅ testGetSecondaryBrokers @@ -999,12 +999,12 @@ ✅ testConstructor ✅ testIsPrimaryOrSecondaryBroker ``` -### ✅ org.apache.pulsar.common.protocol.ByteBufPairTest +### ✅ org.apache.pulsar.common.protocol.ByteBufPairTest ``` ✅ testEncoder ✅ testDoubleByteBuf ``` -### ✅ org.apache.pulsar.common.protocol.CommandUtilsTests +### ✅ org.apache.pulsar.common.protocol.CommandUtilsTests ``` ✅ testSkipBrokerEntryMetadata ✅ testPeekBrokerEntryMetadata @@ -1014,7 +1014,7 @@ ✅ testAddBrokerEntryMetadata ✅ testByteBufComposite ``` -### ✅ org.apache.pulsar.common.protocol.MarkersTest +### ✅ org.apache.pulsar.common.protocol.MarkersTest ``` ✅ testSnapshot ✅ testTxnAbortMarker @@ -1023,25 +1023,25 @@ ✅ testSnapshotRequest ✅ testSnapshotResponse ``` -### ✅ org.apache.pulsar.common.protocol.PulsarDecoderTest +### ✅ org.apache.pulsar.common.protocol.PulsarDecoderTest ``` ✅ testChannelRead ``` -### ✅ org.apache.pulsar.common.stats.JvmDefaultGCMetricsLoggerTest +### ✅ org.apache.pulsar.common.stats.JvmDefaultGCMetricsLoggerTest ``` ✅ testInvokeJVMInternals ``` -### ✅ org.apache.pulsar.common.util.collections.BitSetRecyclableRecyclableTest +### ✅ org.apache.pulsar.common.util.collections.BitSetRecyclableRecyclableTest ``` ✅ testResetWords ✅ testRecycle ``` -### ✅ org.apache.pulsar.common.util.collections.ConcurrentBitSetRecyclableTest +### ✅ org.apache.pulsar.common.util.collections.ConcurrentBitSetRecyclableTest ``` ✅ testRecycle ✅ testGenerateByBitSet ``` -### ✅ org.apache.pulsar.common.util.collections.ConcurrentLongHashMapTest +### ✅ org.apache.pulsar.common.util.collections.ConcurrentLongHashMapTest ``` ✅ testRehashingWithDeletes ✅ concurrentInsertionsAndReads @@ -1057,7 +1057,7 @@ ✅ stressConcurrentInsertionsAndReads ✅ testNegativeUsedBucketCount ``` -### ✅ org.apache.pulsar.common.util.collections.ConcurrentLongPairSetTest +### ✅ org.apache.pulsar.common.util.collections.ConcurrentLongPairSetTest ``` ✅ concurrentInsertionsAndReads ✅ testEqualsObjects @@ -1075,7 +1075,7 @@ ✅ testConstructor ✅ concurrentInsertions ``` -### ✅ org.apache.pulsar.common.util.collections.ConcurrentOpenHashMapTest +### ✅ org.apache.pulsar.common.util.collections.ConcurrentOpenHashMapTest ``` ✅ testRemove ✅ simpleInsertions @@ -1090,7 +1090,7 @@ ✅ concurrentInsertionsAndReads ✅ testConstructor ``` -### ✅ org.apache.pulsar.common.util.collections.ConcurrentOpenHashSetTest +### ✅ org.apache.pulsar.common.util.collections.ConcurrentOpenHashSetTest ``` ✅ concurrentInsertions ✅ testRehashing @@ -1104,7 +1104,7 @@ ✅ testRehashingWithDeletes ✅ testRemove ``` -### ✅ org.apache.pulsar.common.util.collections.ConcurrentOpenLongPairRangeSetTest +### ✅ org.apache.pulsar.common.util.collections.ConcurrentOpenLongPairRangeSetTest ``` ✅ testAddForDifferentKey ✅ testToString @@ -1120,7 +1120,7 @@ ✅ testDeleteWithAtMost ✅ testRangeContaining ``` -### ✅ org.apache.pulsar.common.util.collections.ConcurrentSortedLongPairSetTest +### ✅ org.apache.pulsar.common.util.collections.ConcurrentSortedLongPairSetTest ``` ✅ concurrentInsertions ✅ testIfRemoval @@ -1132,12 +1132,12 @@ ✅ testIteration ✅ testToString ``` -### ✅ org.apache.pulsar.common.util.collections.FieldParserTest +### ✅ org.apache.pulsar.common.util.collections.FieldParserTest ``` ✅ testUpdateObject ✅ testConversion ``` -### ✅ org.apache.pulsar.common.util.collections.GrowableArrayBlockingQueueTest +### ✅ org.apache.pulsar.common.util.collections.GrowableArrayBlockingQueueTest ``` ✅ removeTest ✅ growArray @@ -1146,7 +1146,7 @@ ✅ pollTimeout2 ✅ blockingTake ``` -### ✅ org.apache.pulsar.common.util.collections.GrowablePriorityLongPairQueueTest +### ✅ org.apache.pulsar.common.util.collections.GrowablePriorityLongPairQueueTest ``` ✅ testItems ✅ testRemove @@ -1164,17 +1164,17 @@ ✅ testRemoval ✅ testIfRemoval ``` -### ✅ org.apache.pulsar.common.util.collections.TripleLongPriorityQueueTest +### ✅ org.apache.pulsar.common.util.collections.TripleLongPriorityQueueTest ``` ✅ testQueue ✅ testCheckForEmpty ✅ testCompareWithSamePrefix ``` -### ✅ org.apache.pulsar.common.util.FieldParserTest +### ✅ org.apache.pulsar.common.util.FieldParserTest ``` ✅ testMap ``` -### ✅ org.apache.pulsar.common.util.FileModifiedTimeUpdaterTest +### ✅ org.apache.pulsar.common.util.FileModifiedTimeUpdaterTest ``` ✅ testFileNotModified ✅ testFileModified @@ -1183,7 +1183,7 @@ ✅ testFileModified ✅ testFileNotModified ``` -### ✅ org.apache.pulsar.common.util.netty.ChannelFuturesTest +### ✅ org.apache.pulsar.common.util.netty.ChannelFuturesTest ``` ✅ toCompletableFuture_shouldCompleteExceptionally_channelFutureCompletedAfter ✅ toCompletableFuture_shouldCompleteSuccessfully_channelFutureCompletedAfter @@ -1191,7 +1191,7 @@ ✅ toCompletableFuture_shouldCompleteExceptionally_channelFutureCompletedBefore ✅ toCompletableFuture_shouldRequireNonNullArgument ``` -### ✅ org.apache.pulsar.common.util.RateLimiterTest +### ✅ org.apache.pulsar.common.util.RateLimiterTest ``` ✅ testMultipleTryAcquire ✅ testRateLimiterWithPermitUpdater @@ -1205,7 +1205,7 @@ ✅ testRateLimiterWithFunction ✅ testAcquireBlock ``` -### ✅ org.apache.pulsar.common.util.ReflectionsTest +### ✅ org.apache.pulsar.common.util.ReflectionsTest ``` ✅ testCreateInstanceNoNoArgConstructor ✅ testCreateInstanceConstructorThrowsException @@ -1220,70 +1220,70 @@ ✅ testLoadClass ✅ testClassInJarImplementsIface ``` -### ✅ org.apache.pulsar.common.util.RelativeTimeUtilTest +### ✅ org.apache.pulsar.common.util.RelativeTimeUtilTest ``` ✅ testParseRelativeTime ``` -### ✅ org.apache.pulsar.discovery.service.web.DiscoveryServiceWebTest +### ✅ org.apache.pulsar.discovery.service.web.DiscoveryServiceWebTest ``` ✅ testRedirectUrlWithServerStarted ``` -### ✅ org.apache.pulsar.functions.worker.PulsarFunctionE2ESecurityTest +### ✅ org.apache.pulsar.functions.worker.PulsarFunctionE2ESecurityTest ``` ✅ testAuthorizationWithAnonymousUser ✅ testAuthorization ``` -### ✅ org.apache.pulsar.functions.worker.PulsarFunctionPublishTest +### ✅ org.apache.pulsar.functions.worker.PulsarFunctionPublishTest ``` ✅ testPulsarFunctionState ✅ testMultipleAddress ✅ testPulsarFunctionBKCleanup ``` -### ✅ org.apache.pulsar.functions.worker.PulsarFunctionTlsTest +### ✅ org.apache.pulsar.functions.worker.PulsarFunctionTlsTest ``` ✅ testFunctionsCreation ``` -### ✅ org.apache.pulsar.io.PulsarFunctionTlsTest +### ✅ org.apache.pulsar.io.PulsarFunctionTlsTest ``` ✅ testAuthorization ``` -### ✅ org.apache.pulsar.proxy.server.AdminProxyHandlerTest +### ✅ org.apache.pulsar.proxy.server.AdminProxyHandlerTest ``` ✅ replayableProxyContentProviderTest ``` -### ✅ org.apache.pulsar.proxy.server.AuthedAdminProxyHandlerTest +### ✅ org.apache.pulsar.proxy.server.AuthedAdminProxyHandlerTest ``` ✅ testAuthenticatedProxyAsNonAdmin ``` -### ✅ org.apache.pulsar.proxy.server.FunctionWorkerRoutingTest +### ✅ org.apache.pulsar.proxy.server.FunctionWorkerRoutingTest ``` ✅ testFunctionWorkerRedirect ``` -### ✅ org.apache.pulsar.proxy.server.ProxyAdditionalServletTest +### ✅ org.apache.pulsar.proxy.server.ProxyAdditionalServletTest ``` ✅ test ``` -### ✅ org.apache.pulsar.proxy.server.ProxyAuthenticatedProducerConsumerTest +### ✅ org.apache.pulsar.proxy.server.ProxyAuthenticatedProducerConsumerTest ``` ✅ testTlsSyncProducerAndConsumer ``` -### ✅ org.apache.pulsar.proxy.server.ProxyAuthenticationTest +### ✅ org.apache.pulsar.proxy.server.ProxyAuthenticationTest ``` ✅ testAuthentication ``` -### ✅ org.apache.pulsar.proxy.server.ProxyConnectionThrottlingTest +### ✅ org.apache.pulsar.proxy.server.ProxyConnectionThrottlingTest ``` ✅ testInboundConnection ``` -### ✅ org.apache.pulsar.proxy.server.ProxyEnableHAProxyProtocolTest +### ✅ org.apache.pulsar.proxy.server.ProxyEnableHAProxyProtocolTest ``` ✅ testSimpleProduceAndConsume ``` -### ✅ org.apache.pulsar.proxy.server.ProxyForwardAuthDataTest +### ✅ org.apache.pulsar.proxy.server.ProxyForwardAuthDataTest ``` ✅ testForwardAuthData ``` -### ✅ org.apache.pulsar.proxy.server.ProxyIsAHttpProxyTest +### ✅ org.apache.pulsar.proxy.server.ProxyIsAHttpProxyTest ``` ✅ testProxyToEndsInSlash ✅ testStreaming @@ -1296,23 +1296,23 @@ ✅ testSingleRedirect ✅ testRedirectNotSpecified ``` -### ✅ org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithAuth +### ✅ org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithAuth ``` ✅ testProducerFailed ✅ testPartitions ✅ testProducer ``` -### ✅ org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithoutAuth +### ✅ org.apache.pulsar.proxy.server.ProxyKeyStoreTlsTestWithoutAuth ``` ✅ testPartitions ✅ testProducerFailed ✅ testProducer ``` -### ✅ org.apache.pulsar.proxy.server.ProxyLookupThrottlingTest +### ✅ org.apache.pulsar.proxy.server.ProxyLookupThrottlingTest ``` ✅ testLookup ``` -### ✅ org.apache.pulsar.proxy.server.ProxyParserTest +### ✅ org.apache.pulsar.proxy.server.ProxyParserTest ``` ✅ testRegexSubscription ✅ testProducerConsumer @@ -1320,17 +1320,17 @@ ✅ testPartitions ✅ testProtocolVersionAdvertisement ``` -### ✅ org.apache.pulsar.proxy.server.ProxyRolesEnforcementTest +### ✅ org.apache.pulsar.proxy.server.ProxyRolesEnforcementTest ``` ✅ testIncorrectRoles ``` -### ✅ org.apache.pulsar.proxy.server.ProxyStatsTest +### ✅ org.apache.pulsar.proxy.server.ProxyStatsTest ``` ✅ testChangeLogLevel ✅ testConnectionsStats ✅ testTopicStats ``` -### ✅ org.apache.pulsar.proxy.server.ProxyTest +### ✅ org.apache.pulsar.proxy.server.ProxyTest ``` ✅ testPartitions ✅ testRegexSubscription @@ -1339,20 +1339,20 @@ ✅ testProducer ✅ testProducerConsumer ``` -### ✅ org.apache.pulsar.proxy.server.ProxyTlsTest +### ✅ org.apache.pulsar.proxy.server.ProxyTlsTest ``` ✅ testProducer ✅ testPartitions ``` -### ✅ org.apache.pulsar.proxy.server.ProxyTlsTestWithAuth +### ✅ org.apache.pulsar.proxy.server.ProxyTlsTestWithAuth ``` ✅ testServiceStartup ``` -### ✅ org.apache.pulsar.proxy.server.ProxyWithAuthorizationNegTest +### ✅ org.apache.pulsar.proxy.server.ProxyWithAuthorizationNegTest ``` ✅ testProxyAuthorization ``` -### ✅ org.apache.pulsar.proxy.server.ProxyWithAuthorizationTest +### ✅ org.apache.pulsar.proxy.server.ProxyWithAuthorizationTest ``` ✅ tlsCiphersAndProtocols ✅ testTlsHostVerificationProxyToClient @@ -1368,22 +1368,22 @@ ✅ testTlsHostVerificationProxyToClient ✅ tlsCiphersAndProtocols ``` -### ✅ org.apache.pulsar.proxy.server.ProxyWithoutServiceDiscoveryTest +### ✅ org.apache.pulsar.proxy.server.ProxyWithoutServiceDiscoveryTest ``` ✅ testDiscoveryService ``` -### ✅ org.apache.pulsar.proxy.server.SuperUserAuthedAdminProxyHandlerTest +### ✅ org.apache.pulsar.proxy.server.SuperUserAuthedAdminProxyHandlerTest ``` ✅ testAuthWithRandoCert ✅ testAuthenticatedProxyAsAdmin ✅ testAuthenticatedProxyAsNonAdmin ``` -### ✅ org.apache.pulsar.proxy.server.UnauthedAdminProxyHandlerTest +### ✅ org.apache.pulsar.proxy.server.UnauthedAdminProxyHandlerTest ``` ✅ testUnauthenticatedProxy ✅ testVipStatus ``` -### ✅ org.apache.pulsar.PulsarBrokerStarterTest +### ✅ org.apache.pulsar.PulsarBrokerStarterTest ``` ✅ testMainRunBookieNoConfig ✅ testLoadConfigWithException @@ -1395,7 +1395,7 @@ ✅ testMainEnableRunBookieThroughBrokerConfig ✅ testMainRunBookieAndAutoRecoveryNoConfig ``` -### ✅ org.apache.pulsar.schema.compatibility.SchemaCompatibilityCheckTest +### ✅ org.apache.pulsar.schema.compatibility.SchemaCompatibilityCheckTest ``` ✅ testConsumerCompatibilityCheckCanReadLastTest ✅ testConsumerWithNotCompatibilitySchema @@ -1421,22 +1421,22 @@ ✅ testConsumerCompatibilityCheckCanReadLastTest ✅ testIsAutoUpdateSchema ``` -### ✅ org.apache.pulsar.schema.PartitionedTopicSchemaTest +### ✅ org.apache.pulsar.schema.PartitionedTopicSchemaTest ``` ✅ test ``` -### ✅ org.apache.pulsar.schema.SchemaTest +### ✅ org.apache.pulsar.schema.SchemaTest ``` ✅ testIsUsingAvroSchemaParser ✅ testBytesSchemaDeserialize ✅ testMultiTopicSetSchemaProvider ``` -### ✅ org.apache.pulsar.stats.client.PulsarBrokerStatsClientTest +### ✅ org.apache.pulsar.stats.client.PulsarBrokerStatsClientTest ``` ✅ testServiceException ✅ testTopicInternalStats ``` -### ✅ org.apache.pulsar.tests.EnumValuesDataProviderTest +### ✅ org.apache.pulsar.tests.EnumValuesDataProviderTest ``` ✅ shouldFailIfEnumParameterIsMissing ✅ testEnumValuesProvider @@ -1445,7 +1445,7 @@ ✅ shouldContainAllEnumValues ✅ testEnumValuesProvider ``` -### ✅ org.apache.pulsar.tests.TestRetrySupportBeforeMethodRetryTest +### ✅ org.apache.pulsar.tests.TestRetrySupportBeforeMethodRetryTest ``` ✅ shouldNotDoAnythingWhenThereIsBeforeAndAfterMethod ⚪ shouldNotDoAnythingWhenThereIsBeforeAndAfterMethod @@ -1453,7 +1453,7 @@ ⚪ shouldNotDoAnythingWhenThereIsBeforeAndAfterMethod ⚪ shouldNotDoAnythingWhenThereIsBeforeAndAfterMethod ``` -### ✅ org.apache.pulsar.tests.TestRetrySupportRetryTest +### ✅ org.apache.pulsar.tests.TestRetrySupportRetryTest ``` ⚪ shouldCallSetupBeforeRetrying ✅ shouldCallSetupBeforeRetrying @@ -1461,25 +1461,25 @@ ⚪ shouldCallSetupBeforeRetrying ⚪ shouldCallSetupBeforeRetrying ``` -### ✅ org.apache.pulsar.tests.TestRetrySupportSuccessTest +### ✅ org.apache.pulsar.tests.TestRetrySupportSuccessTest ``` ✅ shouldCallSetupOnce1 ✅ shouldCallSetupOnce3 ✅ shouldCallSetupOnce2 ``` -### ✅ org.apache.pulsar.tests.ThreadDumpUtilTest +### ✅ org.apache.pulsar.tests.ThreadDumpUtilTest ``` ✅ testHelp ✅ testThreadDump ``` -### ✅ org.apache.pulsar.utils.SimpleTextOutputStreamTest +### ✅ org.apache.pulsar.utils.SimpleTextOutputStreamTest ``` ✅ testBooleanFormat ✅ testDoubleFormat ✅ testLongFormat ✅ testString ``` -### ✅ org.apache.pulsar.utils.StatsOutputStreamTest +### ✅ org.apache.pulsar.utils.StatsOutputStreamTest ``` ✅ testLists ✅ testNamedObjects @@ -1488,31 +1488,31 @@ ✅ testPairs ✅ testObjects ``` -### ✅ org.apache.pulsar.websocket.proxy.ProxyAuthenticationTest +### ✅ org.apache.pulsar.websocket.proxy.ProxyAuthenticationTest ``` ✅ unauthenticatedSocketTest ✅ authenticatedSocketTest ✅ statsTest ✅ anonymousSocketTest ``` -### ✅ org.apache.pulsar.websocket.proxy.ProxyAuthorizationTest +### ✅ org.apache.pulsar.websocket.proxy.ProxyAuthorizationTest ``` ✅ test ``` -### ✅ org.apache.pulsar.websocket.proxy.ProxyConfigurationTest +### ✅ org.apache.pulsar.websocket.proxy.ProxyConfigurationTest ``` ✅ configTest ✅ configTest ``` -### ✅ org.apache.pulsar.websocket.proxy.ProxyPublishConsumeTlsTest +### ✅ org.apache.pulsar.websocket.proxy.ProxyPublishConsumeTlsTest ``` ✅ socketTest ``` -### ✅ org.apache.pulsar.websocket.proxy.ProxyPublishConsumeWithoutZKTest +### ✅ org.apache.pulsar.websocket.proxy.ProxyPublishConsumeWithoutZKTest ``` ✅ socketTest ``` -### ✅ org.apache.pulsar.websocket.proxy.v1.V1_ProxyAuthenticationTest +### ✅ org.apache.pulsar.websocket.proxy.v1.V1_ProxyAuthenticationTest ``` ✅ anonymousSocketTest ✅ authenticatedSocketTest diff --git a/__tests__/__outputs__/rspec-json.md b/__tests__/__outputs__/rspec-json.md index 88336be..7444608 100644 --- a/__tests__/__outputs__/rspec-json.md +++ b/__tests__/__outputs__/rspec-json.md @@ -2,12 +2,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/rspec-json.json|1 ✅|1 ❌|1 ⚪|0ms| -## ❌ fixtures/rspec-json.json +## ❌ fixtures/rspec-json.json **3** tests were completed in **0ms** with **1** passed, **1** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[./spec/config/check_env_vars_spec.rb](#r0s0)|1 ✅|1 ❌|1 ⚪|0ms| -### ❌ ./spec/config/check_env_vars_spec.rb +|[./spec/config/check_env_vars_spec.rb](#user-content-r0s0)|1 ✅|1 ❌|1 ⚪|0ms| +### ❌ ./spec/config/check_env_vars_spec.rb ``` CheckEnvVars#call when all env vars are defined behaves like success load ❌ CheckEnvVars#call when all env vars are defined behaves like success load fails in assertion diff --git a/__tests__/__outputs__/silent-notes-test-results.md b/__tests__/__outputs__/silent-notes-test-results.md index 9cd23f5..34f5bab 100644 --- a/__tests__/__outputs__/silent-notes-test-results.md +++ b/__tests__/__outputs__/silent-notes-test-results.md @@ -4,24 +4,24 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/external/SilentNotes.trx|67 ✅||12 ⚪|1s| -## ✅ fixtures/external/SilentNotes.trx +## ✅ fixtures/external/SilentNotes.trx **79** tests were completed in **1s** with **67** passed, **0** failed and **12** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[VanillaCloudStorageClientTest.CloudStorageCredentialsTest](#r0s0)|6 ✅|||30ms| -|[VanillaCloudStorageClientTest.CloudStorageProviders.DropboxCloudStorageClientTest](#r0s1)|2 ✅||3 ⚪|101ms| -|[VanillaCloudStorageClientTest.CloudStorageProviders.FtpCloudStorageClientTest](#r0s2)|4 ✅||3 ⚪|166ms| -|[VanillaCloudStorageClientTest.CloudStorageProviders.GmxCloudStorageClientTest](#r0s3)|2 ✅|||7ms| -|[VanillaCloudStorageClientTest.CloudStorageProviders.GoogleCloudStorageClientTest](#r0s4)|1 ✅||3 ⚪|40ms| -|[VanillaCloudStorageClientTest.CloudStorageProviders.OnedriveCloudStorageClientTest](#r0s5)|1 ✅||3 ⚪|15ms| -|[VanillaCloudStorageClientTest.CloudStorageProviders.WebdavCloudStorageClientTest](#r0s6)|5 ✅|||16ms| -|[VanillaCloudStorageClientTest.CloudStorageTokenTest](#r0s7)|9 ✅|||0ms| -|[VanillaCloudStorageClientTest.OAuth2.AuthorizationResponseErrorTest](#r0s8)|3 ✅|||3ms| -|[VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest](#r0s9)|9 ✅|||12ms| -|[VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest](#r0s10)|5 ✅|||13ms| -|[VanillaCloudStorageClientTest.SecureStringExtensionsTest](#r0s11)|7 ✅|||0ms| -|[VanillaCloudStorageClientTest.SerializeableCloudStorageCredentialsTest](#r0s12)|13 ✅|||43ms| -### ✅ VanillaCloudStorageClientTest.CloudStorageCredentialsTest +|[VanillaCloudStorageClientTest.CloudStorageCredentialsTest](#user-content-r0s0)|6 ✅|||30ms| +|[VanillaCloudStorageClientTest.CloudStorageProviders.DropboxCloudStorageClientTest](#user-content-r0s1)|2 ✅||3 ⚪|101ms| +|[VanillaCloudStorageClientTest.CloudStorageProviders.FtpCloudStorageClientTest](#user-content-r0s2)|4 ✅||3 ⚪|166ms| +|[VanillaCloudStorageClientTest.CloudStorageProviders.GmxCloudStorageClientTest](#user-content-r0s3)|2 ✅|||7ms| +|[VanillaCloudStorageClientTest.CloudStorageProviders.GoogleCloudStorageClientTest](#user-content-r0s4)|1 ✅||3 ⚪|40ms| +|[VanillaCloudStorageClientTest.CloudStorageProviders.OnedriveCloudStorageClientTest](#user-content-r0s5)|1 ✅||3 ⚪|15ms| +|[VanillaCloudStorageClientTest.CloudStorageProviders.WebdavCloudStorageClientTest](#user-content-r0s6)|5 ✅|||16ms| +|[VanillaCloudStorageClientTest.CloudStorageTokenTest](#user-content-r0s7)|9 ✅|||0ms| +|[VanillaCloudStorageClientTest.OAuth2.AuthorizationResponseErrorTest](#user-content-r0s8)|3 ✅|||3ms| +|[VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest](#user-content-r0s9)|9 ✅|||12ms| +|[VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest](#user-content-r0s10)|5 ✅|||13ms| +|[VanillaCloudStorageClientTest.SecureStringExtensionsTest](#user-content-r0s11)|7 ✅|||0ms| +|[VanillaCloudStorageClientTest.SerializeableCloudStorageCredentialsTest](#user-content-r0s12)|13 ✅|||43ms| +### ✅ VanillaCloudStorageClientTest.CloudStorageCredentialsTest ``` ✅ AreEqualWorksWithDifferentPassword ✅ AreEqualWorksWithSameContent @@ -30,7 +30,7 @@ ✅ ValidateAcceptsValidCredentials ✅ ValidateRejectsInvalidCredentials ``` -### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.DropboxCloudStorageClientTest +### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.DropboxCloudStorageClientTest ``` ✅ FileLifecycleWorks ⚪ ReallyDoFetchToken @@ -38,7 +38,7 @@ ⚪ ReallyDoRefreshToken ✅ ThrowsAccessDeniedExceptionWithInvalidToken ``` -### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.FtpCloudStorageClientTest +### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.FtpCloudStorageClientTest ``` ✅ FileLifecycleWorks ✅ SanitizeCredentials_ChangesInvalidPrefix @@ -48,26 +48,26 @@ ⚪ ThrowsWithInvalidUrl ⚪ ThrowsWithInvalidUsername ``` -### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.GmxCloudStorageClientTest +### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.GmxCloudStorageClientTest ``` ✅ ChoosesCorrectUrlForGmxComEmail ✅ ChoosesCorrectUrlForGmxNetEmail ``` -### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.GoogleCloudStorageClientTest +### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.GoogleCloudStorageClientTest ``` ✅ FileLifecycleWorks ⚪ ReallyDoFetchToken ⚪ ReallyDoOpenAuthorizationPageInBrowser ⚪ ReallyDoRefreshToken ``` -### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.OnedriveCloudStorageClientTest +### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.OnedriveCloudStorageClientTest ``` ✅ FileLifecycleWorks ⚪ ReallyDoFetchToken ⚪ ReallyDoOpenAuthorizationPageInBrowser ⚪ ReallyDoRefreshToken ``` -### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.WebdavCloudStorageClientTest +### ✅ VanillaCloudStorageClientTest.CloudStorageProviders.WebdavCloudStorageClientTest ``` ✅ FileLifecycleWorks ✅ ParseGmxWebdavResponseCorrectly @@ -75,7 +75,7 @@ ✅ ThrowsWithInvalidPath ✅ ThrowsWithInvalidUsername ``` -### ✅ VanillaCloudStorageClientTest.CloudStorageTokenTest +### ✅ VanillaCloudStorageClientTest.CloudStorageTokenTest ``` ✅ AreEqualWorksWithNullDate ✅ AreEqualWorksWithSameContent @@ -87,13 +87,13 @@ ✅ SetExpiryDateBySecondsWorksWithNull ✅ SetExpiryDateBySecondsWorksWithVeryShortPeriod ``` -### ✅ VanillaCloudStorageClientTest.OAuth2.AuthorizationResponseErrorTest +### ✅ VanillaCloudStorageClientTest.OAuth2.AuthorizationResponseErrorTest ``` ✅ ParsesAllErrorCodesCorrectly ✅ ParsesNullErrorCodeCorrectly ✅ ParsesUnknownErrorCodeCorrectly ``` -### ✅ VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest +### ✅ VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest ``` ✅ BuildAuthorizationRequestUrlEscapesParameters ✅ BuildAuthorizationRequestUrlLeavesOutOptionalParameters @@ -105,7 +105,7 @@ ✅ ParseRealWorldGoogleRejectResponse ✅ ParseRealWorldGoogleSuccessResponse ``` -### ✅ VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest +### ✅ VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest ``` ✅ BuildOAuth2AuthorizationRequestUrlWorks ✅ FetchTokenCanInterpretGoogleResponse @@ -113,7 +113,7 @@ ✅ FetchTokenThrowsWithWrongState ✅ RefreshTokenCanInterpretGoogleResponse ``` -### ✅ VanillaCloudStorageClientTest.SecureStringExtensionsTest +### ✅ VanillaCloudStorageClientTest.SecureStringExtensionsTest ``` ✅ AreEqualsWorksCorrectly ✅ CorrectlyConvertsSecureStringToString @@ -123,7 +123,7 @@ ✅ CorrectlyConvertsUnicodeBytesToSecureString ✅ CorrectlyConvertsUtf8BytesToSecureString ``` -### ✅ VanillaCloudStorageClientTest.SerializeableCloudStorageCredentialsTest +### ✅ VanillaCloudStorageClientTest.SerializeableCloudStorageCredentialsTest ``` ✅ DecryptAfterDesrializationCanReadAllPropertiesBack ✅ DecryptAfterDesrializationRespectsNullProperties diff --git a/__tests__/__outputs__/swift-xunit.md b/__tests__/__outputs__/swift-xunit.md index b84a926..6f9ed46 100644 --- a/__tests__/__outputs__/swift-xunit.md +++ b/__tests__/__outputs__/swift-xunit.md @@ -2,12 +2,12 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| |fixtures/swift-xunit.xml|2 ✅|1 ❌||220ms| -## ❌ fixtures/swift-xunit.xml +## ❌ fixtures/swift-xunit.xml **3** tests were completed in **220ms** with **2** passed, **1** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[TestResults](#r0s0)|2 ✅|1 ❌||220ms| -### ❌ TestResults +|[TestResults](#user-content-r0s0)|2 ✅|1 ❌||220ms| +### ❌ TestResults ``` AcmeLibTests.AcmeLibTests ✅ test_always_pass diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 99bf270..9253f8f 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -185,7 +185,7 @@ function getSuitesReport(tr: TestRunResult, runIndex: number, options: ReportOpt const suites = options.listSuites === 'failed' ? tr.failedSuites : tr.suites if (options.listSuites !== 'none') { - const trSlug = makeRunSlug(runIndex) + const trSlug = makeRunSlug(runIndex, options) const nameLink = `${tr.path}` const icon = getResultIcon(tr.result) sections.push(`## ${icon}\xa0${nameLink}`) @@ -205,7 +205,7 @@ function getSuitesReport(tr: TestRunResult, runIndex: number, options: ReportOpt const tsTime = formatTime(s.time) const tsName = s.name const skipLink = options.listTests === 'none' || (options.listTests === 'failed' && s.result !== 'failed') - const tsAddr = options.baseUrl + makeSuiteSlug(runIndex, suiteIndex).link + const tsAddr = options.baseUrl + makeSuiteSlug(runIndex, suiteIndex, options).link const tsNameLink = skipLink ? tsName : link(tsName, tsAddr) const passed = s.passed > 0 ? `${s.passed} ${Icon.success}` : '' const failed = s.failed > 0 ? `${s.failed} ${Icon.fail}` : '' @@ -240,7 +240,7 @@ function getTestsReport(ts: TestSuiteResult, runIndex: number, suiteIndex: numbe const sections: string[] = [] const tsName = ts.name - const tsSlug = makeSuiteSlug(runIndex, suiteIndex) + const tsSlug = makeSuiteSlug(runIndex, suiteIndex, options) const tsNameLink = `${tsName}` const icon = getResultIcon(ts.result) sections.push(`### ${icon}\xa0${tsNameLink}`) @@ -269,14 +269,14 @@ function getTestsReport(ts: TestSuiteResult, runIndex: number, suiteIndex: numbe return sections } -function makeRunSlug(runIndex: number): {id: string; link: string} { +function makeRunSlug(runIndex: number, options: ReportOptions): {id: string; link: string} { // use prefix to avoid slug conflicts after escaping the paths - return slug(`r${runIndex}`) + return slug(`r${runIndex}`, options) } -function makeSuiteSlug(runIndex: number, suiteIndex: number): {id: string; link: string} { +function makeSuiteSlug(runIndex: number, suiteIndex: number, options: ReportOptions): {id: string; link: string} { // use prefix to avoid slug conflicts after escaping the paths - return slug(`r${runIndex}s${suiteIndex}`) + return slug(`r${runIndex}s${suiteIndex}`, options) } function getResultIcon(result: TestExecutionResult): string { diff --git a/src/utils/slugger.ts b/src/utils/slugger.ts index e7d4fe0..1f3c956 100644 --- a/src/utils/slugger.ts +++ b/src/utils/slugger.ts @@ -1,7 +1,9 @@ // Returns HTML element id and href link usable as manual anchor links // This is needed because Github in check run summary doesn't automatically // create links out of headings as it normally does for other markdown content -export function slug(name: string): {id: string; link: string} { +import {ReportOptions} from '../report/get-report' + +export function slug(name: string, options: ReportOptions): {id: string; link: string} { const slugId = name .trim() .replace(/_/g, '') @@ -9,6 +11,7 @@ export function slug(name: string): {id: string; link: string} { .replace(/[^\w-]/g, '') const id = `user-content-${slugId}` - const link = `#${slugId}` + // When using the Action Summary for display, links must include the "user-content-" prefix. + const link = options.useActionsSummary ? `#${id}` : `#${slugId}` return {id, link} } From 8039983cdb6a4e0a87156734941c6adf73bb4bcf Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Tue, 25 Mar 2025 15:10:26 -0400 Subject: [PATCH 02/80] Add dist changes --- dist/index.js | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/dist/index.js b/dist/index.js index 8dbf93d..b0f6516 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1931,7 +1931,7 @@ function getSuitesReport(tr, runIndex, options) { const sections = []; const suites = options.listSuites === 'failed' ? tr.failedSuites : tr.suites; if (options.listSuites !== 'none') { - const trSlug = makeRunSlug(runIndex); + const trSlug = makeRunSlug(runIndex, options); const nameLink = `${tr.path}`; const icon = getResultIcon(tr.result); sections.push(`## ${icon}\xa0${nameLink}`); @@ -1945,7 +1945,7 @@ function getSuitesReport(tr, runIndex, options) { const tsTime = (0, markdown_utils_1.formatTime)(s.time); const tsName = s.name; const skipLink = options.listTests === 'none' || (options.listTests === 'failed' && s.result !== 'failed'); - const tsAddr = options.baseUrl + makeSuiteSlug(runIndex, suiteIndex).link; + const tsAddr = options.baseUrl + makeSuiteSlug(runIndex, suiteIndex, options).link; const tsNameLink = skipLink ? tsName : (0, markdown_utils_1.link)(tsName, tsAddr); const passed = s.passed > 0 ? `${s.passed} ${markdown_utils_1.Icon.success}` : ''; const failed = s.failed > 0 ? `${s.failed} ${markdown_utils_1.Icon.fail}` : ''; @@ -1973,7 +1973,7 @@ function getTestsReport(ts, runIndex, suiteIndex, options) { } const sections = []; const tsName = ts.name; - const tsSlug = makeSuiteSlug(runIndex, suiteIndex); + const tsSlug = makeSuiteSlug(runIndex, suiteIndex, options); const tsNameLink = `${tsName}`; const icon = getResultIcon(ts.result); sections.push(`### ${icon}\xa0${tsNameLink}`); @@ -1999,13 +1999,13 @@ function getTestsReport(ts, runIndex, suiteIndex, options) { sections.push('```'); return sections; } -function makeRunSlug(runIndex) { +function makeRunSlug(runIndex, options) { // use prefix to avoid slug conflicts after escaping the paths - return (0, slugger_1.slug)(`r${runIndex}`); + return (0, slugger_1.slug)(`r${runIndex}`, options); } -function makeSuiteSlug(runIndex, suiteIndex) { +function makeSuiteSlug(runIndex, suiteIndex, options) { // use prefix to avoid slug conflicts after escaping the paths - return (0, slugger_1.slug)(`r${runIndex}s${suiteIndex}`); + return (0, slugger_1.slug)(`r${runIndex}s${suiteIndex}`, options); } function getResultIcon(result) { switch (result) { @@ -2544,17 +2544,15 @@ function getBasePath(path, trackedFiles) { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.slug = slug; -// Returns HTML element id and href link usable as manual anchor links -// This is needed because Github in check run summary doesn't automatically -// create links out of headings as it normally does for other markdown content -function slug(name) { +function slug(name, options) { const slugId = name .trim() .replace(/_/g, '') .replace(/[./\\]/g, '-') .replace(/[^\w-]/g, ''); const id = `user-content-${slugId}`; - const link = `#${slugId}`; + // When using the Action Summary for display, links must include the "user-content-" prefix. + const link = options.useActionsSummary ? `#${id}` : `#${slugId}`; return { id, link }; } From 596aee5d4e4558170261588c4a4ef99b72617f40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Kautler?= Date: Mon, 28 Apr 2025 12:08:48 +0200 Subject: [PATCH 03/80] Fix input description for list options --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index dae5bc0..ec4772f 100644 --- a/action.yml +++ b/action.yml @@ -39,7 +39,7 @@ inputs: description: | Limits which test suites are listed. Supported options: - all - - only-failed + - failed - none required: false default: 'all' @@ -47,7 +47,7 @@ inputs: description: | Limits which test cases are listed. Supported options: - all - - only-failed + - failed - none required: false default: 'all' From bb9fb75efbb9a1893502b81106e644e409cde0f5 Mon Sep 17 00:00:00 2001 From: Lucas Soares Date: Thu, 8 May 2025 10:10:26 -0300 Subject: [PATCH 04/80] docs: make sure list-tests is correctly documented on action.yml --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index dae5bc0..ec4772f 100644 --- a/action.yml +++ b/action.yml @@ -39,7 +39,7 @@ inputs: description: | Limits which test suites are listed. Supported options: - all - - only-failed + - failed - none required: false default: 'all' @@ -47,7 +47,7 @@ inputs: description: | Limits which test cases are listed. Supported options: - all - - only-failed + - failed - none required: false default: 'all' From 8b055ac24765452d8e118d8fa75f87dae009522a Mon Sep 17 00:00:00 2001 From: Oles Galatsan Date: Thu, 15 May 2025 15:37:31 +0300 Subject: [PATCH 05/80] Increase step summary limit --- dist/index.js | 2 +- src/report/get-report.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index b0f6516..1852d0c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1792,7 +1792,7 @@ const node_utils_1 = __nccwpck_require__(5384); const parse_utils_1 = __nccwpck_require__(9633); const slugger_1 = __nccwpck_require__(9537); const MAX_REPORT_LENGTH = 65535; -const MAX_ACTIONS_SUMMARY_LENGTH = 131072; // 1048576 soon +const MAX_ACTIONS_SUMMARY_LENGTH = 1048576; const defaultOptions = { listSuites: 'all', listTests: 'all', diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 9253f8f..a16dba1 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -6,7 +6,7 @@ import {getFirstNonEmptyLine} from '../utils/parse-utils' import {slug} from '../utils/slugger' const MAX_REPORT_LENGTH = 65535 -const MAX_ACTIONS_SUMMARY_LENGTH = 131072 // 1048576 soon +const MAX_ACTIONS_SUMMARY_LENGTH = 1048576 export interface ReportOptions { listSuites: 'all' | 'failed' | 'none' From 2acf6c2ccdac711265d342c72997dafaa1e62d6b Mon Sep 17 00:00:00 2001 From: Oles Galatsan Date: Thu, 15 May 2025 15:40:14 +0300 Subject: [PATCH 06/80] Fix for empty TRX TestDefinitions --- dist/index.js | 3 ++- src/parsers/dotnet-trx/dotnet-trx-parser.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index b0f6516..31f2cf0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -937,7 +937,8 @@ class DotnetTrxParser { } } getTestClasses(trx) { - if (trx.TestRun.TestDefinitions === undefined || trx.TestRun.Results === undefined) { + if (trx.TestRun.TestDefinitions === undefined || trx.TestRun.Results === undefined || + !trx.TestRun.TestDefinitions.some(td => td.UnitTest && Array.isArray(td.UnitTest))) { return []; } const unitTests = {}; diff --git a/src/parsers/dotnet-trx/dotnet-trx-parser.ts b/src/parsers/dotnet-trx/dotnet-trx-parser.ts index a81d4a2..3b7acc4 100644 --- a/src/parsers/dotnet-trx/dotnet-trx-parser.ts +++ b/src/parsers/dotnet-trx/dotnet-trx-parser.ts @@ -62,7 +62,8 @@ export class DotnetTrxParser implements TestParser { } private getTestClasses(trx: TrxReport): TestClass[] { - if (trx.TestRun.TestDefinitions === undefined || trx.TestRun.Results === undefined) { + if (trx.TestRun.TestDefinitions === undefined || trx.TestRun.Results === undefined || + !trx.TestRun.TestDefinitions.some(td => td.UnitTest && Array.isArray(td.UnitTest))) { return [] } From 5b447747020a91b5bbb3c716d4297516d99e7d05 Mon Sep 17 00:00:00 2001 From: Oles Galatsan Date: Fri, 16 May 2025 10:25:02 +0300 Subject: [PATCH 07/80] Add integration test for empty TRX TestDefinitions --- __tests__/dotnet-trx.test.ts | 16 ++++++++++++++ .../dotnet-trx-empty-test-definitions.trx | 22 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 __tests__/fixtures/empty/dotnet-trx-empty-test-definitions.trx diff --git a/__tests__/dotnet-trx.test.ts b/__tests__/dotnet-trx.test.ts index d4d5dac..498abcb 100644 --- a/__tests__/dotnet-trx.test.ts +++ b/__tests__/dotnet-trx.test.ts @@ -23,6 +23,22 @@ describe('dotnet-trx tests', () => { expect(result.result).toBe('success') }) + it('produces empty test run result when TestDefinitions is empty', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'dotnet-trx-empty-test-definitions.trx') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + expect(result.tests).toBe(0) + expect(result.result).toBe('success') + }) + it('matches report snapshot', async () => { const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') const outputPath = path.join(__dirname, '__outputs__', 'dotnet-trx.md') diff --git a/__tests__/fixtures/empty/dotnet-trx-empty-test-definitions.trx b/__tests__/fixtures/empty/dotnet-trx-empty-test-definitions.trx new file mode 100644 index 0000000..7066144 --- /dev/null +++ b/__tests__/fixtures/empty/dotnet-trx-empty-test-definitions.trx @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + No test is available in (...). Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again. + + + + From 0841c8130ed6243a18f17c6b3778d9fcf2579f68 Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Thu, 27 Mar 2025 12:33:59 -0400 Subject: [PATCH 08/80] Feature: Add summary title Add new option `report-title` to add H1 title to the Markdown report Resolves #540 --- __tests__/__outputs__/dart-json.md | 1 + __tests__/__outputs__/dotnet-nunit.md | 1 + __tests__/__outputs__/dotnet-trx.md | 1 + .../fluent-validation-test-results.md | 1 + __tests__/__outputs__/jest-junit-eslint.md | 1 + __tests__/__outputs__/jest-junit.md | 1 + .../jest-react-component-test-results.md | 1 + __tests__/__outputs__/jest-test-results.md | 1 + __tests__/__outputs__/junit-with-message.md | 1 + __tests__/__outputs__/mocha-json.md | 1 + __tests__/__outputs__/mocha-test-results.md | 1 + .../__outputs__/provider-test-results.md | 1 + .../pulsar-test-results-no-merge.md | 1 + __tests__/__outputs__/pulsar-test-results.md | 1 + __tests__/__outputs__/rspec-json.md | 1 + .../__outputs__/silent-notes-test-results.md | 1 + __tests__/__outputs__/swift-xunit.md | 1 + dist/index.js | 27 ++++++++++++++++--- src/main.ts | 23 +++++++++++++--- src/report/get-report.ts | 6 ++++- 20 files changed, 65 insertions(+), 8 deletions(-) diff --git a/__tests__/__outputs__/dart-json.md b/__tests__/__outputs__/dart-json.md index 9805d20..37aa462 100644 --- a/__tests__/__outputs__/dart-json.md +++ b/__tests__/__outputs__/dart-json.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/dotnet-nunit.md b/__tests__/__outputs__/dotnet-nunit.md index e33c66d..a706bb0 100644 --- a/__tests__/__outputs__/dotnet-nunit.md +++ b/__tests__/__outputs__/dotnet-nunit.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%205%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/dotnet-trx.md b/__tests__/__outputs__/dotnet-trx.md index eedab46..0c6435d 100644 --- a/__tests__/__outputs__/dotnet-trx.md +++ b/__tests__/__outputs__/dotnet-trx.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%205%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/fluent-validation-test-results.md b/__tests__/__outputs__/fluent-validation-test-results.md index 9337a62..7a1ef40 100644 --- a/__tests__/__outputs__/fluent-validation-test-results.md +++ b/__tests__/__outputs__/fluent-validation-test-results.md @@ -1,3 +1,4 @@ +# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-803%20passed%2C%201%20skipped-success)
Expand for details diff --git a/__tests__/__outputs__/jest-junit-eslint.md b/__tests__/__outputs__/jest-junit-eslint.md index d3ad9b9..a2052d4 100644 --- a/__tests__/__outputs__/jest-junit-eslint.md +++ b/__tests__/__outputs__/jest-junit-eslint.md @@ -1,3 +1,4 @@ +# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-1%20passed-success)
Expand for details diff --git a/__tests__/__outputs__/jest-junit.md b/__tests__/__outputs__/jest-junit.md index ed5a174..8b9086e 100644 --- a/__tests__/__outputs__/jest-junit.md +++ b/__tests__/__outputs__/jest-junit.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/jest-react-component-test-results.md b/__tests__/__outputs__/jest-react-component-test-results.md index d71db4c..d8ff9a2 100644 --- a/__tests__/__outputs__/jest-react-component-test-results.md +++ b/__tests__/__outputs__/jest-react-component-test-results.md @@ -1,3 +1,4 @@ +# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-1%20passed-success)
Expand for details diff --git a/__tests__/__outputs__/jest-test-results.md b/__tests__/__outputs__/jest-test-results.md index 5b154f8..2c72c93 100644 --- a/__tests__/__outputs__/jest-test-results.md +++ b/__tests__/__outputs__/jest-test-results.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-4207%20passed%2C%202%20failed%2C%2030%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/junit-with-message.md b/__tests__/__outputs__/junit-with-message.md index 988d8fc..3c1197a 100644 --- a/__tests__/__outputs__/junit-with-message.md +++ b/__tests__/__outputs__/junit-with-message.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/mocha-json.md b/__tests__/__outputs__/mocha-json.md index 50419e1..29ad677 100644 --- a/__tests__/__outputs__/mocha-json.md +++ b/__tests__/__outputs__/mocha-json.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/mocha-test-results.md b/__tests__/__outputs__/mocha-test-results.md index 8831d7b..dfc8903 100644 --- a/__tests__/__outputs__/mocha-test-results.md +++ b/__tests__/__outputs__/mocha-test-results.md @@ -1,3 +1,4 @@ +# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-833%20passed%2C%206%20skipped-success)
Expand for details diff --git a/__tests__/__outputs__/provider-test-results.md b/__tests__/__outputs__/provider-test-results.md index b2216ad..450a425 100644 --- a/__tests__/__outputs__/provider-test-results.md +++ b/__tests__/__outputs__/provider-test-results.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-268%20passed%2C%201%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/pulsar-test-results-no-merge.md b/__tests__/__outputs__/pulsar-test-results-no-merge.md index b1738a4..baf94dc 100644 --- a/__tests__/__outputs__/pulsar-test-results-no-merge.md +++ b/__tests__/__outputs__/pulsar-test-results-no-merge.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/pulsar-test-results.md b/__tests__/__outputs__/pulsar-test-results.md index a9a5290..ed2e54c 100644 --- a/__tests__/__outputs__/pulsar-test-results.md +++ b/__tests__/__outputs__/pulsar-test-results.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-793%20passed%2C%201%20failed%2C%2014%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/rspec-json.md b/__tests__/__outputs__/rspec-json.md index 7444608..8b9d300 100644 --- a/__tests__/__outputs__/rspec-json.md +++ b/__tests__/__outputs__/rspec-json.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/silent-notes-test-results.md b/__tests__/__outputs__/silent-notes-test-results.md index 34f5bab..b397c16 100644 --- a/__tests__/__outputs__/silent-notes-test-results.md +++ b/__tests__/__outputs__/silent-notes-test-results.md @@ -1,3 +1,4 @@ +# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-67%20passed%2C%2012%20skipped-success)
Expand for details diff --git a/__tests__/__outputs__/swift-xunit.md b/__tests__/__outputs__/swift-xunit.md index 6f9ed46..be1f937 100644 --- a/__tests__/__outputs__/swift-xunit.md +++ b/__tests__/__outputs__/swift-xunit.md @@ -1,3 +1,4 @@ +# Test Results ![Tests failed](https://img.shields.io/badge/tests-2%20passed%2C%201%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/dist/index.js b/dist/index.js index dc37566..a6710fc 100644 --- a/dist/index.js +++ b/dist/index.js @@ -307,6 +307,7 @@ class TestReporter { onlySummary = core.getInput('only-summary', { required: false }) === 'true'; useActionsSummary = core.getInput('use-actions-summary', { required: false }) === 'true'; badgeTitle = core.getInput('badge-title', { required: false }); + reportTitle = core.getInput('report-title', { required: false }); token = core.getInput('token', { required: true }); octokit; context = (0, github_utils_1.getCheckRunContext)(); @@ -399,10 +400,18 @@ class TestReporter { throw error; } } - const { listSuites, listTests, onlySummary, useActionsSummary, badgeTitle } = this; + const { listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle } = this; let baseUrl = ''; if (this.useActionsSummary) { - const summary = (0, get_report_1.getReport)(results, { listSuites, listTests, baseUrl, onlySummary, useActionsSummary, badgeTitle }); + const summary = (0, get_report_1.getReport)(results, { + listSuites, + listTests, + baseUrl, + onlySummary, + useActionsSummary, + badgeTitle, + reportTitle + }); core.info('Summary content:'); core.info(summary); await core.summary.addRaw(summary).write(); @@ -421,7 +430,15 @@ class TestReporter { }); core.info('Creating report summary'); baseUrl = createResp.data.html_url; - const summary = (0, get_report_1.getReport)(results, { listSuites, listTests, baseUrl, onlySummary, useActionsSummary, badgeTitle }); + const summary = (0, get_report_1.getReport)(results, { + listSuites, + listTests, + baseUrl, + onlySummary, + useActionsSummary, + badgeTitle, + reportTitle + }); core.info('Creating annotations'); const annotations = (0, get_annotations_1.getAnnotations)(results, this.maxAnnotations); const isFailed = this.failOnError && results.some(tr => tr.result === 'failed'); @@ -1800,7 +1817,8 @@ const defaultOptions = { baseUrl: '', onlySummary: false, useActionsSummary: true, - badgeTitle: 'tests' + badgeTitle: 'tests', + reportTitle: 'Test Results' }; function getReport(results, options = defaultOptions) { core.info('Generating check run summary'); @@ -1863,6 +1881,7 @@ function getByteLength(text) { } function renderReport(results, options) { const sections = []; + sections.push(`# ${options.reportTitle}`); const badge = getReportBadge(results, options); sections.push(badge); const runs = getTestRunsReport(results, options); diff --git a/src/main.ts b/src/main.ts index 31eda0d..109d75b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -47,6 +47,7 @@ class TestReporter { readonly onlySummary = core.getInput('only-summary', {required: false}) === 'true' readonly useActionsSummary = core.getInput('use-actions-summary', {required: false}) === 'true' readonly badgeTitle = core.getInput('badge-title', {required: false}) + readonly reportTitle = core.getInput('report-title', {required: false}) readonly token = core.getInput('token', {required: true}) readonly octokit: InstanceType readonly context = getCheckRunContext() @@ -164,11 +165,19 @@ class TestReporter { } } - const {listSuites, listTests, onlySummary, useActionsSummary, badgeTitle} = this + const {listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle} = this let baseUrl = '' if (this.useActionsSummary) { - const summary = getReport(results, {listSuites, listTests, baseUrl, onlySummary, useActionsSummary, badgeTitle}) + const summary = getReport(results, { + listSuites, + listTests, + baseUrl, + onlySummary, + useActionsSummary, + badgeTitle, + reportTitle + }) core.info('Summary content:') core.info(summary) @@ -188,7 +197,15 @@ class TestReporter { core.info('Creating report summary') baseUrl = createResp.data.html_url as string - const summary = getReport(results, {listSuites, listTests, baseUrl, onlySummary, useActionsSummary, badgeTitle}) + const summary = getReport(results, { + listSuites, + listTests, + baseUrl, + onlySummary, + useActionsSummary, + badgeTitle, + reportTitle + }) core.info('Creating annotations') const annotations = getAnnotations(results, this.maxAnnotations) diff --git a/src/report/get-report.ts b/src/report/get-report.ts index a16dba1..4557960 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -15,6 +15,7 @@ export interface ReportOptions { onlySummary: boolean useActionsSummary: boolean badgeTitle: string + reportTitle: string } const defaultOptions: ReportOptions = { @@ -23,7 +24,8 @@ const defaultOptions: ReportOptions = { baseUrl: '', onlySummary: false, useActionsSummary: true, - badgeTitle: 'tests' + badgeTitle: 'tests', + reportTitle: 'Test Results' } export function getReport(results: TestRunResult[], options: ReportOptions = defaultOptions): string { @@ -101,6 +103,8 @@ function getByteLength(text: string): number { function renderReport(results: TestRunResult[], options: ReportOptions): string[] { const sections: string[] = [] + sections.push(`# ${options.reportTitle}`) + const badge = getReportBadge(results, options) sections.push(badge) From 0840d7c281ae6ec666de42665a6598c6244dae5a Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Thu, 27 Mar 2025 12:49:54 -0400 Subject: [PATCH 09/80] Add test for java-junit --- __tests__/java-junit.test.ts | 45 +++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/__tests__/java-junit.test.ts b/__tests__/java-junit.test.ts index e8111d4..7c87993 100644 --- a/__tests__/java-junit.test.ts +++ b/__tests__/java-junit.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {JavaJunitParser} from '../src/parsers/java-junit/java-junit-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {ReportOptions, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('java-junit tests', () => { @@ -90,4 +90,47 @@ describe('java-junit tests', () => { expect(result.result === 'failed') expect(result.failed === 1) }) + + it('report includes the default report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'java-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JavaJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the title as the first line + expect(report).toMatch(/^# Test Results\n/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'java-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JavaJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const reportOpts: ReportOptions = { + listSuites: 'all', + listTests: 'all', + baseUrl: '', + onlySummary: false, + useActionsSummary: true, + badgeTitle: 'tests', + reportTitle: 'My Custom Title' + } + const report = getReport([result], reportOpts) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) From 2b2d091d3db18c95a486e873b2ab2ec263954461 Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Fri, 28 Mar 2025 16:59:54 -0400 Subject: [PATCH 10/80] Do not print a title if none is specified in the config --- __tests__/__outputs__/dart-json.md | 1 - __tests__/__outputs__/dotnet-nunit.md | 1 - __tests__/__outputs__/dotnet-trx.md | 1 - .../fluent-validation-test-results.md | 1 - __tests__/__outputs__/jest-junit-eslint.md | 1 - __tests__/__outputs__/jest-junit.md | 1 - .../jest-react-component-test-results.md | 1 - __tests__/__outputs__/jest-test-results.md | 1 - __tests__/__outputs__/junit-with-message.md | 1 - __tests__/__outputs__/mocha-json.md | 1 - __tests__/__outputs__/mocha-test-results.md | 1 - .../__outputs__/provider-test-results.md | 1 - .../pulsar-test-results-no-merge.md | 1 - __tests__/__outputs__/pulsar-test-results.md | 1 - __tests__/__outputs__/rspec-json.md | 1 - .../__outputs__/silent-notes-test-results.md | 1 - __tests__/__outputs__/swift-xunit.md | 1 - __tests__/java-junit.test.ts | 42 +++++++++++++++++-- dist/index.js | 9 ++-- src/report/get-report.ts | 12 ++++-- 20 files changed, 52 insertions(+), 28 deletions(-) diff --git a/__tests__/__outputs__/dart-json.md b/__tests__/__outputs__/dart-json.md index 37aa462..9805d20 100644 --- a/__tests__/__outputs__/dart-json.md +++ b/__tests__/__outputs__/dart-json.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/dotnet-nunit.md b/__tests__/__outputs__/dotnet-nunit.md index a706bb0..e33c66d 100644 --- a/__tests__/__outputs__/dotnet-nunit.md +++ b/__tests__/__outputs__/dotnet-nunit.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%205%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/dotnet-trx.md b/__tests__/__outputs__/dotnet-trx.md index 0c6435d..eedab46 100644 --- a/__tests__/__outputs__/dotnet-trx.md +++ b/__tests__/__outputs__/dotnet-trx.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%205%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/fluent-validation-test-results.md b/__tests__/__outputs__/fluent-validation-test-results.md index 7a1ef40..9337a62 100644 --- a/__tests__/__outputs__/fluent-validation-test-results.md +++ b/__tests__/__outputs__/fluent-validation-test-results.md @@ -1,4 +1,3 @@ -# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-803%20passed%2C%201%20skipped-success)
Expand for details diff --git a/__tests__/__outputs__/jest-junit-eslint.md b/__tests__/__outputs__/jest-junit-eslint.md index a2052d4..d3ad9b9 100644 --- a/__tests__/__outputs__/jest-junit-eslint.md +++ b/__tests__/__outputs__/jest-junit-eslint.md @@ -1,4 +1,3 @@ -# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-1%20passed-success)
Expand for details diff --git a/__tests__/__outputs__/jest-junit.md b/__tests__/__outputs__/jest-junit.md index 8b9086e..ed5a174 100644 --- a/__tests__/__outputs__/jest-junit.md +++ b/__tests__/__outputs__/jest-junit.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/jest-react-component-test-results.md b/__tests__/__outputs__/jest-react-component-test-results.md index d8ff9a2..d71db4c 100644 --- a/__tests__/__outputs__/jest-react-component-test-results.md +++ b/__tests__/__outputs__/jest-react-component-test-results.md @@ -1,4 +1,3 @@ -# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-1%20passed-success)
Expand for details diff --git a/__tests__/__outputs__/jest-test-results.md b/__tests__/__outputs__/jest-test-results.md index 2c72c93..5b154f8 100644 --- a/__tests__/__outputs__/jest-test-results.md +++ b/__tests__/__outputs__/jest-test-results.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-4207%20passed%2C%202%20failed%2C%2030%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/junit-with-message.md b/__tests__/__outputs__/junit-with-message.md index 3c1197a..988d8fc 100644 --- a/__tests__/__outputs__/junit-with-message.md +++ b/__tests__/__outputs__/junit-with-message.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/mocha-json.md b/__tests__/__outputs__/mocha-json.md index 29ad677..50419e1 100644 --- a/__tests__/__outputs__/mocha-json.md +++ b/__tests__/__outputs__/mocha-json.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/mocha-test-results.md b/__tests__/__outputs__/mocha-test-results.md index dfc8903..8831d7b 100644 --- a/__tests__/__outputs__/mocha-test-results.md +++ b/__tests__/__outputs__/mocha-test-results.md @@ -1,4 +1,3 @@ -# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-833%20passed%2C%206%20skipped-success)
Expand for details diff --git a/__tests__/__outputs__/provider-test-results.md b/__tests__/__outputs__/provider-test-results.md index 450a425..b2216ad 100644 --- a/__tests__/__outputs__/provider-test-results.md +++ b/__tests__/__outputs__/provider-test-results.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-268%20passed%2C%201%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/pulsar-test-results-no-merge.md b/__tests__/__outputs__/pulsar-test-results-no-merge.md index baf94dc..b1738a4 100644 --- a/__tests__/__outputs__/pulsar-test-results-no-merge.md +++ b/__tests__/__outputs__/pulsar-test-results-no-merge.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/pulsar-test-results.md b/__tests__/__outputs__/pulsar-test-results.md index ed2e54c..a9a5290 100644 --- a/__tests__/__outputs__/pulsar-test-results.md +++ b/__tests__/__outputs__/pulsar-test-results.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-793%20passed%2C%201%20failed%2C%2014%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/rspec-json.md b/__tests__/__outputs__/rspec-json.md index 8b9d300..7444608 100644 --- a/__tests__/__outputs__/rspec-json.md +++ b/__tests__/__outputs__/rspec-json.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/__outputs__/silent-notes-test-results.md b/__tests__/__outputs__/silent-notes-test-results.md index b397c16..34f5bab 100644 --- a/__tests__/__outputs__/silent-notes-test-results.md +++ b/__tests__/__outputs__/silent-notes-test-results.md @@ -1,4 +1,3 @@ -# Test Results ![Tests passed successfully](https://img.shields.io/badge/tests-67%20passed%2C%2012%20skipped-success)
Expand for details diff --git a/__tests__/__outputs__/swift-xunit.md b/__tests__/__outputs__/swift-xunit.md index be1f937..6f9ed46 100644 --- a/__tests__/__outputs__/swift-xunit.md +++ b/__tests__/__outputs__/swift-xunit.md @@ -1,4 +1,3 @@ -# Test Results ![Tests failed](https://img.shields.io/badge/tests-2%20passed%2C%201%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| diff --git a/__tests__/java-junit.test.ts b/__tests__/java-junit.test.ts index 7c87993..949341f 100644 --- a/__tests__/java-junit.test.ts +++ b/__tests__/java-junit.test.ts @@ -7,6 +7,15 @@ import {ReportOptions, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('java-junit tests', () => { + const reportOpts: ReportOptions = { + listSuites: 'all', + listTests: 'all', + baseUrl: '', + onlySummary: false, + useActionsSummary: true, + badgeTitle: 'tests' + } + it('produces empty test run result when there are no test cases', async () => { const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'java-junit.xml') const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) @@ -91,8 +100,8 @@ describe('java-junit tests', () => { expect(result.failed === 1) }) - it('report includes the default report title', async () => { - const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'java-junit.xml') + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'junit-with-message.xml') const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) @@ -104,8 +113,33 @@ describe('java-junit tests', () => { const parser = new JavaJunitParser(opts) const result = await parser.parse(filePath, fileContent) const report = getReport([result]) - // Report should have the title as the first line - expect(report).toMatch(/^# Test Results\n/) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'junit-with-message.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JavaJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...reportOpts, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) }) it('report includes a custom report title', async () => { diff --git a/dist/index.js b/dist/index.js index a6710fc..0e63008 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1817,8 +1817,7 @@ const defaultOptions = { baseUrl: '', onlySummary: false, useActionsSummary: true, - badgeTitle: 'tests', - reportTitle: 'Test Results' + badgeTitle: 'tests' }; function getReport(results, options = defaultOptions) { core.info('Generating check run summary'); @@ -1881,7 +1880,11 @@ function getByteLength(text) { } function renderReport(results, options) { const sections = []; - sections.push(`# ${options.reportTitle}`); + const { reportTitle } = options; + // Suppress the report title for empty string or whitespace + if (reportTitle && reportTitle.trim()) { + sections.push(`# ${reportTitle}`); + } const badge = getReportBadge(results, options); sections.push(badge); const runs = getTestRunsReport(results, options); diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 4557960..01320b7 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -15,7 +15,7 @@ export interface ReportOptions { onlySummary: boolean useActionsSummary: boolean badgeTitle: string - reportTitle: string + reportTitle?: string } const defaultOptions: ReportOptions = { @@ -24,8 +24,7 @@ const defaultOptions: ReportOptions = { baseUrl: '', onlySummary: false, useActionsSummary: true, - badgeTitle: 'tests', - reportTitle: 'Test Results' + badgeTitle: 'tests' } export function getReport(results: TestRunResult[], options: ReportOptions = defaultOptions): string { @@ -103,7 +102,12 @@ function getByteLength(text: string): number { function renderReport(results: TestRunResult[], options: ReportOptions): string[] { const sections: string[] = [] - sections.push(`# ${options.reportTitle}`) + + const {reportTitle} = options + // Suppress the report title for empty string or whitespace + if (reportTitle && reportTitle.trim()) { + sections.push(`# ${reportTitle}`) + } const badge = getReportBadge(results, options) sections.push(badge) From 0f47a5bec1212ec4da3285a85656427f189fbf2c Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Fri, 28 Mar 2025 17:11:15 -0400 Subject: [PATCH 11/80] Update README; use empty string as default --- README.md | 7 ++++++- __tests__/java-junit.test.ts | 3 ++- dist/index.js | 8 ++++---- src/report/get-report.ts | 10 +++++----- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3f8afbe..e5abd85 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,11 @@ jobs: # Allows you to generate reports for Actions Summary # https://github.blog/2022-05-09-supercharging-github-actions-with-job-summaries/ use-actions-summary: 'true' + + # Optionally specify a title (Heading level 1) for the report. Leading and trailing whitespace are ignored. + # This is useful for separating your test report from other sections in the build summary. + # If omitted or set to whitespace/empty, no title will be printed. + report-title: '' # Customize the title of badges shown for each Actions Summary. # Useful when distinguish summaries for tests ran in multiple Actions steps. @@ -345,7 +350,7 @@ Support for Swift test results in xUnit format is experimental - should work but Unfortunately, there are some known issues and limitations caused by GitHub API: -- Test report (i.e. Check Run summary) is markdown text. No custom styling or HTML is possible. +- Test report (i.e. build summary) is Markdown text. No custom styling or HTML is possible. - Maximum report size is 65535 bytes. Input parameters `list-suites` and `list-tests` will be automatically adjusted if max size is exceeded. - Test report can't reference any additional files (e.g. screenshots). You can use `actions/upload-artifact@v4` to upload them and inspect them manually. - Check Runs are created for specific commit SHA. It's not possible to specify under which workflow test report should belong if more diff --git a/__tests__/java-junit.test.ts b/__tests__/java-junit.test.ts index 949341f..b70fd21 100644 --- a/__tests__/java-junit.test.ts +++ b/__tests__/java-junit.test.ts @@ -13,7 +13,8 @@ describe('java-junit tests', () => { baseUrl: '', onlySummary: false, useActionsSummary: true, - badgeTitle: 'tests' + badgeTitle: 'tests', + reportTitle: '' } it('produces empty test run result when there are no test cases', async () => { diff --git a/dist/index.js b/dist/index.js index 0e63008..5a53d66 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1817,7 +1817,8 @@ const defaultOptions = { baseUrl: '', onlySummary: false, useActionsSummary: true, - badgeTitle: 'tests' + badgeTitle: 'tests', + reportTitle: '' }; function getReport(results, options = defaultOptions) { core.info('Generating check run summary'); @@ -1880,9 +1881,8 @@ function getByteLength(text) { } function renderReport(results, options) { const sections = []; - const { reportTitle } = options; - // Suppress the report title for empty string or whitespace - if (reportTitle && reportTitle.trim()) { + const reportTitle = options.reportTitle.trim(); + if (reportTitle) { sections.push(`# ${reportTitle}`); } const badge = getReportBadge(results, options); diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 01320b7..1ed6656 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -15,7 +15,7 @@ export interface ReportOptions { onlySummary: boolean useActionsSummary: boolean badgeTitle: string - reportTitle?: string + reportTitle: string } const defaultOptions: ReportOptions = { @@ -24,7 +24,8 @@ const defaultOptions: ReportOptions = { baseUrl: '', onlySummary: false, useActionsSummary: true, - badgeTitle: 'tests' + badgeTitle: 'tests', + reportTitle: '' } export function getReport(results: TestRunResult[], options: ReportOptions = defaultOptions): string { @@ -103,9 +104,8 @@ function getByteLength(text: string): number { function renderReport(results: TestRunResult[], options: ReportOptions): string[] { const sections: string[] = [] - const {reportTitle} = options - // Suppress the report title for empty string or whitespace - if (reportTitle && reportTitle.trim()) { + const reportTitle: string = options.reportTitle.trim() + if (reportTitle) { sections.push(`# ${reportTitle}`) } From f1fa47122964e177a0e0a2fdadfadd1e2c7e37f4 Mon Sep 17 00:00:00 2001 From: Michael Marcus Date: Fri, 28 Mar 2025 21:27:01 -0400 Subject: [PATCH 12/80] Update all tests --- __tests__/__outputs__/jest-test-results.md | 6823 ++++++++++++++++++-- __tests__/dart-json.test.ts | 64 +- __tests__/dotnet-nunit.test.ts | 64 +- __tests__/dotnet-trx.test.ts | 64 +- __tests__/java-junit.test.ts | 26 +- __tests__/jest-junit.test.ts | 64 +- __tests__/mocha-json.test.ts | 64 +- __tests__/rspec-json.test.ts | 64 +- __tests__/swift-xunit.test.ts | 64 +- dist/index.js | 7 +- src/report/get-report.ts | 6 +- 11 files changed, 6878 insertions(+), 432 deletions(-) diff --git a/__tests__/__outputs__/jest-test-results.md b/__tests__/__outputs__/jest-test-results.md index 5b154f8..25dd567 100644 --- a/__tests__/__outputs__/jest-test-results.md +++ b/__tests__/__outputs__/jest-test-results.md @@ -6,406 +6,884 @@ **4239** tests were completed in **166s** with **4207** passed, **2** failed and **30** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|e2e/__tests__/asyncAndCallback.test.ts|1 ✅|||746ms| -|e2e/__tests__/asyncRegenerator.test.ts|1 ✅|||4s| -|e2e/__tests__/autoClearMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/autoResetMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/autoRestoreMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/babelPluginJestHoist.test.ts|1 ✅|||6s| -|e2e/__tests__/badSourceMap.test.ts|1 ✅|||858ms| -|e2e/__tests__/beforeAllFiltered.ts|1 ✅|||958ms| -|e2e/__tests__/beforeEachQueue.ts|1 ✅||1 ⚪|55ms| -|e2e/__tests__/callDoneTwice.test.ts|1 ✅|||882ms| -|e2e/__tests__/chaiAssertionLibrary.ts|1 ✅|||2s| -|e2e/__tests__/circularInequality.test.ts|1 ✅|||1s| -|e2e/__tests__/circusConcurrentEach.test.ts|2 ✅|||2s| -|e2e/__tests__/circusDeclarationErrors.test.ts|1 ✅|||869ms| -|e2e/__tests__/clearCache.test.ts|2 ✅|||1s| -|e2e/__tests__/cliHandlesExactFilenames.test.ts|2 ✅|||1s| -|e2e/__tests__/compareDomNodes.test.ts|1 ✅|||1s| -|e2e/__tests__/config.test.ts|6 ✅|||4s| -|e2e/__tests__/console.test.ts|7 ✅|||8s| -|e2e/__tests__/consoleAfterTeardown.test.ts|1 ✅|||1s| -|e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts|1 ✅|||793ms| -|e2e/__tests__/coverageHandlebars.test.ts|1 ✅|||2s| -|e2e/__tests__/coverageRemapping.test.ts|1 ✅|||13s| -|e2e/__tests__/coverageReport.test.ts|12 ✅|||22s| -|e2e/__tests__/coverageThreshold.test.ts|5 ✅|||5s| -|e2e/__tests__/coverageTransformInstrumented.test.ts|1 ✅|||5s| -|e2e/__tests__/coverageWithoutTransform.test.ts|1 ✅|||1s| -|e2e/__tests__/createProcessObject.test.ts|1 ✅|||908ms| -|e2e/__tests__/customInlineSnapshotMatchers.test.ts|1 ✅|||2s| -|e2e/__tests__/customMatcherStackTrace.test.ts|2 ✅|||2s| -|e2e/__tests__/customReporters.test.ts|9 ✅|||7s| -|e2e/__tests__/customResolver.test.ts|1 ✅|||826ms| -|e2e/__tests__/customTestSequencers.test.ts|3 ✅|||3s| -|e2e/__tests__/debug.test.ts|1 ✅|||899ms| -|e2e/__tests__/declarationErrors.test.ts|3 ✅|||2s| -|e2e/__tests__/dependencyClash.test.ts|1 ✅|||833ms| -|e2e/__tests__/detectOpenHandles.ts|8 ✅|||8s| -|e2e/__tests__/domDiffing.test.ts|1 ✅|||1s| -|e2e/__tests__/doneInHooks.test.ts|1 ✅|||855ms| -|e2e/__tests__/dynamicRequireDependencies.ts|1 ✅|||847ms| -|e2e/__tests__/each.test.ts|7 ✅|||5s| -|e2e/__tests__/emptyDescribeWithHooks.test.ts|4 ✅|||3s| -|e2e/__tests__/emptySuiteError.test.ts|1 ✅|||885ms| -|e2e/__tests__/env.test.ts|6 ✅|||5s| -|e2e/__tests__/environmentAfterTeardown.test.ts|1 ✅|||892ms| -|e2e/__tests__/errorOnDeprecated.test.ts|1 ✅||24 ⚪|56ms| -|e2e/__tests__/esmConfigFile.test.ts|3 ✅|||526ms| -|e2e/__tests__/executeTestsOnceInMpr.ts|1 ✅|||976ms| -|e2e/__tests__/existentRoots.test.ts|4 ✅|||627ms| -|e2e/__tests__/expectAsyncMatcher.test.ts|2 ✅|||3s| -|e2e/__tests__/expectInVm.test.ts|1 ✅|||2s| -|e2e/__tests__/extraGlobals.test.ts|1 ✅|||1s| -|e2e/__tests__/failureDetailsProperty.test.ts|1 ✅|||907ms| -|e2e/__tests__/failures.test.ts|7 ✅|||10s| -|e2e/__tests__/fakePromises.test.ts|2 ✅|||2s| -|e2e/__tests__/fatalWorkerError.test.ts|1 ✅|||3s| -|e2e/__tests__/filter.test.ts|7 ✅|||5s| -|e2e/__tests__/findRelatedFiles.test.ts|5 ✅|||6s| -|e2e/__tests__/focusedTests.test.ts|1 ✅|||888ms| -|e2e/__tests__/forceExit.test.ts|1 ✅|||2s| -|e2e/__tests__/generatorMock.test.ts|1 ✅|||1s| -|e2e/__tests__/global-mutation.test.ts|1 ✅|||40ms| -|e2e/__tests__/global.test.ts|1 ✅|||31ms| -|e2e/__tests__/globals.test.ts|10 ✅|||8s| -|e2e/__tests__/globalSetup.test.ts|10 ✅|||14s| -|e2e/__tests__/globalTeardown.test.ts|7 ✅|||12s| -|e2e/__tests__/hasteMapMockChanged.test.ts|1 ✅|||379ms| -|e2e/__tests__/hasteMapSha1.test.ts|1 ✅|||298ms| -|e2e/__tests__/hasteMapSize.test.ts|2 ✅|||397ms| -|e2e/__tests__/importedGlobals.test.ts|1 ✅|||1s| -|e2e/__tests__/injectGlobals.test.ts|2 ✅|||2s| -|e2e/__tests__/jasmineAsync.test.ts|15 ✅|||28s| -|e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts|1 ✅||1 ⚪|72ms| -|e2e/__tests__/jest.config.js.test.ts|3 ✅|||2s| -|e2e/__tests__/jest.config.ts.test.ts|5 ✅|||14s| +|[e2e/__tests__/asyncAndCallback.test.ts](#user-content-r0s0)|1 ✅|||746ms| +|[e2e/__tests__/asyncRegenerator.test.ts](#user-content-r0s1)|1 ✅|||4s| +|[e2e/__tests__/autoClearMocks.test.ts](#user-content-r0s2)|2 ✅|||2s| +|[e2e/__tests__/autoResetMocks.test.ts](#user-content-r0s3)|2 ✅|||2s| +|[e2e/__tests__/autoRestoreMocks.test.ts](#user-content-r0s4)|2 ✅|||2s| +|[e2e/__tests__/babelPluginJestHoist.test.ts](#user-content-r0s5)|1 ✅|||6s| +|[e2e/__tests__/badSourceMap.test.ts](#user-content-r0s6)|1 ✅|||858ms| +|[e2e/__tests__/beforeAllFiltered.ts](#user-content-r0s7)|1 ✅|||958ms| +|[e2e/__tests__/beforeEachQueue.ts](#user-content-r0s8)|1 ✅||1 ⚪|55ms| +|[e2e/__tests__/callDoneTwice.test.ts](#user-content-r0s9)|1 ✅|||882ms| +|[e2e/__tests__/chaiAssertionLibrary.ts](#user-content-r0s10)|1 ✅|||2s| +|[e2e/__tests__/circularInequality.test.ts](#user-content-r0s11)|1 ✅|||1s| +|[e2e/__tests__/circusConcurrentEach.test.ts](#user-content-r0s12)|2 ✅|||2s| +|[e2e/__tests__/circusDeclarationErrors.test.ts](#user-content-r0s13)|1 ✅|||869ms| +|[e2e/__tests__/clearCache.test.ts](#user-content-r0s14)|2 ✅|||1s| +|[e2e/__tests__/cliHandlesExactFilenames.test.ts](#user-content-r0s15)|2 ✅|||1s| +|[e2e/__tests__/compareDomNodes.test.ts](#user-content-r0s16)|1 ✅|||1s| +|[e2e/__tests__/config.test.ts](#user-content-r0s17)|6 ✅|||4s| +|[e2e/__tests__/console.test.ts](#user-content-r0s18)|7 ✅|||8s| +|[e2e/__tests__/consoleAfterTeardown.test.ts](#user-content-r0s19)|1 ✅|||1s| +|[e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts](#user-content-r0s20)|1 ✅|||793ms| +|[e2e/__tests__/coverageHandlebars.test.ts](#user-content-r0s21)|1 ✅|||2s| +|[e2e/__tests__/coverageRemapping.test.ts](#user-content-r0s22)|1 ✅|||13s| +|[e2e/__tests__/coverageReport.test.ts](#user-content-r0s23)|12 ✅|||22s| +|[e2e/__tests__/coverageThreshold.test.ts](#user-content-r0s24)|5 ✅|||5s| +|[e2e/__tests__/coverageTransformInstrumented.test.ts](#user-content-r0s25)|1 ✅|||5s| +|[e2e/__tests__/coverageWithoutTransform.test.ts](#user-content-r0s26)|1 ✅|||1s| +|[e2e/__tests__/createProcessObject.test.ts](#user-content-r0s27)|1 ✅|||908ms| +|[e2e/__tests__/customInlineSnapshotMatchers.test.ts](#user-content-r0s28)|1 ✅|||2s| +|[e2e/__tests__/customMatcherStackTrace.test.ts](#user-content-r0s29)|2 ✅|||2s| +|[e2e/__tests__/customReporters.test.ts](#user-content-r0s30)|9 ✅|||7s| +|[e2e/__tests__/customResolver.test.ts](#user-content-r0s31)|1 ✅|||826ms| +|[e2e/__tests__/customTestSequencers.test.ts](#user-content-r0s32)|3 ✅|||3s| +|[e2e/__tests__/debug.test.ts](#user-content-r0s33)|1 ✅|||899ms| +|[e2e/__tests__/declarationErrors.test.ts](#user-content-r0s34)|3 ✅|||2s| +|[e2e/__tests__/dependencyClash.test.ts](#user-content-r0s35)|1 ✅|||833ms| +|[e2e/__tests__/detectOpenHandles.ts](#user-content-r0s36)|8 ✅|||8s| +|[e2e/__tests__/domDiffing.test.ts](#user-content-r0s37)|1 ✅|||1s| +|[e2e/__tests__/doneInHooks.test.ts](#user-content-r0s38)|1 ✅|||855ms| +|[e2e/__tests__/dynamicRequireDependencies.ts](#user-content-r0s39)|1 ✅|||847ms| +|[e2e/__tests__/each.test.ts](#user-content-r0s40)|7 ✅|||5s| +|[e2e/__tests__/emptyDescribeWithHooks.test.ts](#user-content-r0s41)|4 ✅|||3s| +|[e2e/__tests__/emptySuiteError.test.ts](#user-content-r0s42)|1 ✅|||885ms| +|[e2e/__tests__/env.test.ts](#user-content-r0s43)|6 ✅|||5s| +|[e2e/__tests__/environmentAfterTeardown.test.ts](#user-content-r0s44)|1 ✅|||892ms| +|[e2e/__tests__/errorOnDeprecated.test.ts](#user-content-r0s45)|1 ✅||24 ⚪|56ms| +|[e2e/__tests__/esmConfigFile.test.ts](#user-content-r0s46)|3 ✅|||526ms| +|[e2e/__tests__/executeTestsOnceInMpr.ts](#user-content-r0s47)|1 ✅|||976ms| +|[e2e/__tests__/existentRoots.test.ts](#user-content-r0s48)|4 ✅|||627ms| +|[e2e/__tests__/expectAsyncMatcher.test.ts](#user-content-r0s49)|2 ✅|||3s| +|[e2e/__tests__/expectInVm.test.ts](#user-content-r0s50)|1 ✅|||2s| +|[e2e/__tests__/extraGlobals.test.ts](#user-content-r0s51)|1 ✅|||1s| +|[e2e/__tests__/failureDetailsProperty.test.ts](#user-content-r0s52)|1 ✅|||907ms| +|[e2e/__tests__/failures.test.ts](#user-content-r0s53)|7 ✅|||10s| +|[e2e/__tests__/fakePromises.test.ts](#user-content-r0s54)|2 ✅|||2s| +|[e2e/__tests__/fatalWorkerError.test.ts](#user-content-r0s55)|1 ✅|||3s| +|[e2e/__tests__/filter.test.ts](#user-content-r0s56)|7 ✅|||5s| +|[e2e/__tests__/findRelatedFiles.test.ts](#user-content-r0s57)|5 ✅|||6s| +|[e2e/__tests__/focusedTests.test.ts](#user-content-r0s58)|1 ✅|||888ms| +|[e2e/__tests__/forceExit.test.ts](#user-content-r0s59)|1 ✅|||2s| +|[e2e/__tests__/generatorMock.test.ts](#user-content-r0s60)|1 ✅|||1s| +|[e2e/__tests__/global-mutation.test.ts](#user-content-r0s61)|1 ✅|||40ms| +|[e2e/__tests__/global.test.ts](#user-content-r0s62)|1 ✅|||31ms| +|[e2e/__tests__/globals.test.ts](#user-content-r0s63)|10 ✅|||8s| +|[e2e/__tests__/globalSetup.test.ts](#user-content-r0s64)|10 ✅|||14s| +|[e2e/__tests__/globalTeardown.test.ts](#user-content-r0s65)|7 ✅|||12s| +|[e2e/__tests__/hasteMapMockChanged.test.ts](#user-content-r0s66)|1 ✅|||379ms| +|[e2e/__tests__/hasteMapSha1.test.ts](#user-content-r0s67)|1 ✅|||298ms| +|[e2e/__tests__/hasteMapSize.test.ts](#user-content-r0s68)|2 ✅|||397ms| +|[e2e/__tests__/importedGlobals.test.ts](#user-content-r0s69)|1 ✅|||1s| +|[e2e/__tests__/injectGlobals.test.ts](#user-content-r0s70)|2 ✅|||2s| +|[e2e/__tests__/jasmineAsync.test.ts](#user-content-r0s71)|15 ✅|||28s| +|[e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts](#user-content-r0s72)|1 ✅||1 ⚪|72ms| +|[e2e/__tests__/jest.config.js.test.ts](#user-content-r0s73)|3 ✅|||2s| +|[e2e/__tests__/jest.config.ts.test.ts](#user-content-r0s74)|5 ✅|||14s| |[e2e/__tests__/jestChangedFiles.test.ts](#user-content-r0s75)|9 ✅|1 ❌||9s| -|e2e/__tests__/jestEnvironmentJsdom.test.ts|1 ✅|||2s| -|e2e/__tests__/jestRequireActual.test.ts|1 ✅|||2s| -|e2e/__tests__/jestRequireMock.test.ts|1 ✅|||2s| -|e2e/__tests__/json.test.ts|2 ✅|||29ms| -|e2e/__tests__/jsonReporter.test.ts|2 ✅|||2s| -|e2e/__tests__/lifecycles.ts|1 ✅|||861ms| -|e2e/__tests__/listTests.test.ts|2 ✅|||945ms| -|e2e/__tests__/locationInResults.test.ts|2 ✅|||2s| -|e2e/__tests__/logHeapUsage.test.ts|1 ✅|||884ms| -|e2e/__tests__/mockNames.test.ts|8 ✅|||7s| -|e2e/__tests__/modernFakeTimers.test.ts|2 ✅|||2s| -|e2e/__tests__/moduleNameMapper.test.ts|5 ✅|||5s| -|e2e/__tests__/moduleParentNullInTest.ts|1 ✅|||886ms| -|e2e/__tests__/multiProjectRunner.test.ts|14 ✅|||16s| -|e2e/__tests__/nativeAsyncMock.test.ts|1 ✅|||55ms| -|e2e/__tests__/nativeEsm.test.ts|2 ✅||1 ⚪|905ms| -|e2e/__tests__/nativeEsmTypescript.test.ts|1 ✅|||956ms| -|e2e/__tests__/nestedEventLoop.test.ts|1 ✅|||1s| -|e2e/__tests__/nestedTestDefinitions.test.ts|4 ✅|||5s| -|e2e/__tests__/nodePath.test.ts|1 ✅|||866ms| -|e2e/__tests__/noTestFound.test.ts|2 ✅|||1s| -|e2e/__tests__/noTestsFound.test.ts|5 ✅|||3s| +|[e2e/__tests__/jestEnvironmentJsdom.test.ts](#user-content-r0s76)|1 ✅|||2s| +|[e2e/__tests__/jestRequireActual.test.ts](#user-content-r0s77)|1 ✅|||2s| +|[e2e/__tests__/jestRequireMock.test.ts](#user-content-r0s78)|1 ✅|||2s| +|[e2e/__tests__/json.test.ts](#user-content-r0s79)|2 ✅|||29ms| +|[e2e/__tests__/jsonReporter.test.ts](#user-content-r0s80)|2 ✅|||2s| +|[e2e/__tests__/lifecycles.ts](#user-content-r0s81)|1 ✅|||861ms| +|[e2e/__tests__/listTests.test.ts](#user-content-r0s82)|2 ✅|||945ms| +|[e2e/__tests__/locationInResults.test.ts](#user-content-r0s83)|2 ✅|||2s| +|[e2e/__tests__/logHeapUsage.test.ts](#user-content-r0s84)|1 ✅|||884ms| +|[e2e/__tests__/mockNames.test.ts](#user-content-r0s85)|8 ✅|||7s| +|[e2e/__tests__/modernFakeTimers.test.ts](#user-content-r0s86)|2 ✅|||2s| +|[e2e/__tests__/moduleNameMapper.test.ts](#user-content-r0s87)|5 ✅|||5s| +|[e2e/__tests__/moduleParentNullInTest.ts](#user-content-r0s88)|1 ✅|||886ms| +|[e2e/__tests__/multiProjectRunner.test.ts](#user-content-r0s89)|14 ✅|||16s| +|[e2e/__tests__/nativeAsyncMock.test.ts](#user-content-r0s90)|1 ✅|||55ms| +|[e2e/__tests__/nativeEsm.test.ts](#user-content-r0s91)|2 ✅||1 ⚪|905ms| +|[e2e/__tests__/nativeEsmTypescript.test.ts](#user-content-r0s92)|1 ✅|||956ms| +|[e2e/__tests__/nestedEventLoop.test.ts](#user-content-r0s93)|1 ✅|||1s| +|[e2e/__tests__/nestedTestDefinitions.test.ts](#user-content-r0s94)|4 ✅|||5s| +|[e2e/__tests__/nodePath.test.ts](#user-content-r0s95)|1 ✅|||866ms| +|[e2e/__tests__/noTestFound.test.ts](#user-content-r0s96)|2 ✅|||1s| +|[e2e/__tests__/noTestsFound.test.ts](#user-content-r0s97)|5 ✅|||3s| |[e2e/__tests__/onlyChanged.test.ts](#user-content-r0s98)|8 ✅|1 ❌||22s| -|e2e/__tests__/onlyFailuresNonWatch.test.ts|1 ✅|||3s| -|e2e/__tests__/overrideGlobals.test.ts|2 ✅|||2s| -|e2e/__tests__/pnp.test.ts|1 ✅|||3s| -|e2e/__tests__/presets.test.ts|2 ✅|||2s| -|e2e/__tests__/processExit.test.ts|1 ✅|||1s| -|e2e/__tests__/promiseReject.test.ts|1 ✅|||967ms| -|e2e/__tests__/regexCharInPath.test.ts|1 ✅|||962ms| -|e2e/__tests__/requireAfterTeardown.test.ts|1 ✅|||921ms| -|e2e/__tests__/requireMain.test.ts|1 ✅|||1s| -|e2e/__tests__/requireMainAfterCreateRequire.test.ts|1 ✅|||966ms| -|e2e/__tests__/requireMainIsolateModules.test.ts|1 ✅|||976ms| -|e2e/__tests__/requireMainResetModules.test.ts|2 ✅|||2s| -|e2e/__tests__/requireV8Module.test.ts|1 ✅|||30ms| -|e2e/__tests__/resetModules.test.ts|1 ✅|||926ms| -|e2e/__tests__/resolve.test.ts|1 ✅|||2s| -|e2e/__tests__/resolveGetPaths.test.ts|1 ✅|||1s| -|e2e/__tests__/resolveNodeModule.test.ts|1 ✅|||943ms| -|e2e/__tests__/resolveNoFileExtensions.test.ts|2 ✅|||1s| -|e2e/__tests__/resolveWithPaths.test.ts|1 ✅|||1s| -|e2e/__tests__/runProgrammatically.test.ts|2 ✅|||575ms| -|e2e/__tests__/runTestsByPath.test.ts|1 ✅|||2s| -|e2e/__tests__/runtimeInternalModuleRegistry.test.ts|1 ✅|||1s| -|e2e/__tests__/selectProjects.test.ts|18 ✅|||5s| -|e2e/__tests__/setImmediate.test.ts|1 ✅|||904ms| -|e2e/__tests__/setupFilesAfterEnvConfig.test.ts|2 ✅|||2s| -|e2e/__tests__/showConfig.test.ts|1 ✅|||195ms| -|e2e/__tests__/skipBeforeAfterAll.test.ts|1 ✅|||1s| -|e2e/__tests__/snapshot-unknown.test.ts|1 ✅|||838ms| -|e2e/__tests__/snapshot.test.ts|9 ✅|||14s| -|e2e/__tests__/snapshotMockFs.test.ts|1 ✅|||883ms| -|e2e/__tests__/snapshotResolver.test.ts|1 ✅|||823ms| -|e2e/__tests__/snapshotSerializers.test.ts|2 ✅|||2s| -|e2e/__tests__/stackTrace.test.ts|7 ✅|||5s| -|e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts|1 ✅|||899ms| -|e2e/__tests__/stackTraceSourceMaps.test.ts|1 ✅|||2s| -|e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts|1 ✅|||2s| -|e2e/__tests__/supportsDashedArgs.ts|2 ✅|||968ms| -|e2e/__tests__/symbol.test.ts|1 ✅|||49ms| -|e2e/__tests__/testEnvironment.test.ts|1 ✅|||2s| -|e2e/__tests__/testEnvironmentAsync.test.ts|1 ✅|||1s| -|e2e/__tests__/testEnvironmentCircus.test.ts|1 ✅|||2s| -|e2e/__tests__/testEnvironmentCircusAsync.test.ts|1 ✅|||2s| -|e2e/__tests__/testFailureExitCode.test.ts|2 ✅|||4s| -|e2e/__tests__/testInRoot.test.ts|1 ✅|||1s| -|e2e/__tests__/testNamePattern.test.ts|1 ✅|||859ms| -|e2e/__tests__/testNamePatternSkipped.test.ts|1 ✅|||991ms| -|e2e/__tests__/testPathPatternReporterMessage.test.ts|1 ✅|||3s| -|e2e/__tests__/testResultsProcessor.test.ts|1 ✅|||910ms| -|e2e/__tests__/testRetries.test.ts|4 ✅|||3s| -|e2e/__tests__/testTodo.test.ts|5 ✅|||4s| -|e2e/__tests__/timeouts.test.ts|4 ✅|||4s| -|e2e/__tests__/timeoutsLegacy.test.ts|1 ✅||3 ⚪|71ms| -|e2e/__tests__/timerResetMocks.test.ts|2 ✅|||2s| -|e2e/__tests__/timerUseRealTimers.test.ts|1 ✅|||1s| -|e2e/__tests__/toMatchInlineSnapshot.test.ts|12 ✅|||24s| -|e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts|3 ✅|||5s| -|e2e/__tests__/toMatchSnapshot.test.ts|9 ✅|||17s| -|e2e/__tests__/toMatchSnapshotWithRetries.test.ts|2 ✅|||4s| -|e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts|3 ✅|||4s| -|e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts|4 ✅|||4s| -|e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts|5 ✅|||4s| -|e2e/__tests__/transform.test.ts|16 ✅|||27s| -|e2e/__tests__/transformLinkedModules.test.ts|1 ✅|||783ms| -|e2e/__tests__/typescriptCoverage.test.ts|1 ✅|||3s| -|e2e/__tests__/unexpectedToken.test.ts|3 ✅|||3s| -|e2e/__tests__/useStderr.test.ts|1 ✅|||1s| -|e2e/__tests__/v8Coverage.test.ts|2 ✅|||2s| -|e2e/__tests__/verbose.test.ts|1 ✅|||683ms| -|e2e/__tests__/version.test.ts|1 ✅|||138ms| -|e2e/__tests__/watchModeNoAccess.test.ts|1 ✅|||4s| -|e2e/__tests__/watchModeOnlyFailed.test.ts|1 ✅|||1s| -|e2e/__tests__/watchModePatterns.test.ts|2 ✅|||4s| -|e2e/__tests__/watchModeUpdateSnapshot.test.ts|1 ✅|||1s| -|e2e/__tests__/workerForceExit.test.ts|2 ✅|||5s| -|e2e/__tests__/wrongEnv.test.ts|5 ✅|||4s| -|e2e/custom-test-sequencer/a.test.js|1 ✅|||29ms| -|e2e/custom-test-sequencer/b.test.js|1 ✅|||21ms| -|e2e/custom-test-sequencer/c.test.js|1 ✅|||42ms| -|e2e/custom-test-sequencer/d.test.js|1 ✅|||21ms| -|e2e/custom-test-sequencer/e.test.js|1 ✅|||27ms| -|e2e/test-in-root/spec.js|1 ✅|||19ms| -|e2e/test-in-root/test.js|1 ✅|||37ms| -|e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js|2 ✅|||30ms| -|e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js|1 ✅|||34ms| -|e2e/v8-coverage/empty-sourcemap/test.ts|1 ✅|||31ms| -|examples/angular/app.component.spec.ts|3 ✅|||654ms| -|examples/angular/shared/data.service.spec.ts|2 ✅|||431ms| -|examples/angular/shared/sub.service.spec.ts|1 ✅|||109ms| -|examples/async/__tests__/user.test.js|8 ✅|||96ms| -|examples/automatic-mocks/__tests__/automock.test.js|2 ✅|||74ms| -|examples/automatic-mocks/__tests__/createMockFromModule.test.js|2 ✅|||115ms| -|examples/automatic-mocks/__tests__/disableAutomocking.test.js|1 ✅|||24ms| -|examples/enzyme/__tests__/CheckboxWithLabel-test.js|1 ✅|||434ms| -|examples/getting-started/sum.test.js|1 ✅|||78ms| -|examples/jquery/__tests__/display_user.test.js|1 ✅|||196ms| -|examples/jquery/__tests__/fetch_current_user.test.js|2 ✅|||196ms| -|examples/manual-mocks/__tests__/file_summarizer.test.js|1 ✅|||87ms| -|examples/manual-mocks/__tests__/lodashMocking.test.js|1 ✅|||109ms| -|examples/manual-mocks/__tests__/user.test.js|1 ✅|||41ms| -|examples/manual-mocks/__tests__/userMocked.test.js|1 ✅|||105ms| -|examples/module-mock/__tests__/full_mock.js|1 ✅|||60ms| -|examples/module-mock/__tests__/mock_per_test.js|2 ✅|||116ms| -|examples/module-mock/__tests__/partial_mock.js|1 ✅|||215ms| -|examples/mongodb/__test__/db.test.js|1 ✅|||236ms| -|examples/react-native/__tests__/intro.test.js|4 ✅|||9s| -|examples/react-testing-library/__tests__/CheckboxWithLabel-test.js|1 ✅|||469ms| -|examples/react/__tests__/CheckboxWithLabel-test.js|1 ✅|||256ms| -|examples/snapshot/__tests__/clock.react.test.js|1 ✅|||62ms| -|examples/snapshot/__tests__/link.react.test.js|4 ✅|||181ms| -|examples/timer/__tests__/infinite_timer_game.test.js|1 ✅|||94ms| -|examples/timer/__tests__/timer_game.test.js|3 ✅|||74ms| -|examples/typescript/__tests__/calc.test.ts|6 ✅|||276ms| -|examples/typescript/__tests__/CheckboxWithLabel-test.tsx|1 ✅|||227ms| -|examples/typescript/__tests__/sub-test.ts|1 ✅|||43ms| -|examples/typescript/__tests__/sum-test.ts|2 ✅|||69ms| -|examples/typescript/__tests__/sum.test.js|2 ✅|||100ms| -|packages/babel-jest/src/__tests__/index.ts|6 ✅|||371ms| -|packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts|4 ✅|||347ms| -|packages/diff-sequences/src/__tests__/index.property.test.ts|7 ✅|||357ms| -|packages/diff-sequences/src/__tests__/index.test.ts|48 ✅|||195ms| -|packages/expect/src/__tests__/assertionCounts.test.ts|6 ✅|||60ms| -|packages/expect/src/__tests__/asymmetricMatchers.test.ts|38 ✅|||207ms| -|packages/expect/src/__tests__/extend.test.ts|10 ✅|||99ms| -|packages/expect/src/__tests__/isError.test.ts|4 ✅|||43ms| -|packages/expect/src/__tests__/matchers-toContain.property.test.ts|2 ✅|||236ms| -|packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts|2 ✅|||287ms| -|packages/expect/src/__tests__/matchers-toEqual.property.test.ts|2 ✅|||1s| -|packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts|3 ✅|||394ms| -|packages/expect/src/__tests__/matchers.test.js|592 ✅|||862ms| -|packages/expect/src/__tests__/spyMatchers.test.ts|248 ✅|||395ms| -|packages/expect/src/__tests__/stacktrace.test.ts|3 ✅|||69ms| -|packages/expect/src/__tests__/symbolInObjects.test.ts|3 ✅|||33ms| -|packages/expect/src/__tests__/toEqual-dom.test.ts|12 ✅|||99ms| -|packages/expect/src/__tests__/toThrowMatchers.test.ts|98 ✅|||257ms| -|packages/expect/src/__tests__/utils.test.ts|41 ✅|||147ms| -|packages/jest-circus/src/__tests__/afterAll.test.ts|6 ✅|||6s| -|packages/jest-circus/src/__tests__/baseTest.test.ts|2 ✅|||3s| -|packages/jest-circus/src/__tests__/circusItTestError.test.ts|8 ✅|||300ms| -|packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts|3 ✅|||81ms| -|packages/jest-circus/src/__tests__/hooks.test.ts|3 ✅|||4s| -|packages/jest-circus/src/__tests__/hooksError.test.ts|32 ✅|||127ms| -|packages/jest-cli/src/__tests__/cli/args.test.ts|17 ✅|||345ms| -|packages/jest-cli/src/init/__tests__/init.test.js|24 ✅|||119ms| -|packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts|4 ✅|||30ms| -|packages/jest-config/src/__tests__/Defaults.test.ts|1 ✅|||672ms| -|packages/jest-config/src/__tests__/getMaxWorkers.test.ts|7 ✅|||67ms| -|packages/jest-config/src/__tests__/normalize.test.js|118 ✅|||798ms| -|packages/jest-config/src/__tests__/readConfig.test.ts|1 ✅|||76ms| -|packages/jest-config/src/__tests__/readConfigs.test.ts|3 ✅|||135ms| -|packages/jest-config/src/__tests__/resolveConfigPath.test.ts|10 ✅|||183ms| -|packages/jest-config/src/__tests__/setFromArgv.test.ts|4 ✅|||53ms| -|packages/jest-config/src/__tests__/validatePattern.test.ts|4 ✅|||52ms| -|packages/jest-console/src/__tests__/bufferedConsole.test.ts|20 ✅|||171ms| -|packages/jest-console/src/__tests__/CustomConsole.test.ts|23 ✅|||115ms| -|packages/jest-console/src/__tests__/getConsoleOutput.test.ts|12 ✅|||56ms| -|packages/jest-core/src/__tests__/FailedTestsCache.test.js|1 ✅|||25ms| -|packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js|5 ✅|||61ms| -|packages/jest-core/src/__tests__/globals.test.ts|1 ✅|||22ms| -|packages/jest-core/src/__tests__/runJest.test.js|2 ✅|||261ms| -|packages/jest-core/src/__tests__/SearchSource.test.ts|27 ✅|||3s| -|packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js|13 ✅|||89ms| -|packages/jest-core/src/__tests__/TestScheduler.test.js|8 ✅|||520ms| -|packages/jest-core/src/__tests__/testSchedulerHelper.test.js|12 ✅|||48ms| -|packages/jest-core/src/__tests__/watch.test.js|80 ✅|||7s| -|packages/jest-core/src/__tests__/watchFileChanges.test.ts|1 ✅|||2s| -|packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js|2 ✅|||165ms| -|packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js|1 ✅|||246ms| -|packages/jest-core/src/lib/__tests__/isValidPath.test.ts|3 ✅|||166ms| -|packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts|3 ✅|||48ms| -|packages/jest-create-cache-key-function/src/__tests__/index.test.ts|1 ✅|||75ms| -|packages/jest-diff/src/__tests__/diff.test.ts|107 ✅|||625ms| -|packages/jest-diff/src/__tests__/diffStringsRaw.test.ts|2 ✅|||55ms| -|packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts|24 ✅|||72ms| -|packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts|6 ✅|||44ms| -|packages/jest-docblock/src/__tests__/index.test.ts|36 ✅|||177ms| -|packages/jest-each/src/__tests__/array.test.ts|159 ✅|||192ms| -|packages/jest-each/src/__tests__/index.test.ts|10 ✅|||44ms| -|packages/jest-each/src/__tests__/template.test.ts|242 ✅|||483ms| -|packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts|2 ✅|||783ms| -|packages/jest-environment-node/src/__tests__/node_environment.test.ts|6 ✅|||184ms| -|packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts|50 ✅|||302ms| -|packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts|40 ✅|||317ms| -|packages/jest-get-type/src/__tests__/getType.test.ts|14 ✅|||45ms| -|packages/jest-get-type/src/__tests__/isPrimitive.test.ts|18 ✅|||36ms| -|packages/jest-globals/src/__tests__/index.ts|1 ✅|||533ms| -|packages/jest-haste-map/src/__tests__/get_mock_name.test.js|1 ✅|||22ms| -|packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts|1 ✅|||337ms| -|packages/jest-haste-map/src/__tests__/index.test.js|44 ✅|||1s| -|packages/jest-haste-map/src/__tests__/worker.test.js|7 ✅|||100ms| -|packages/jest-haste-map/src/crawlers/__tests__/node.test.js|10 ✅|||170ms| -|packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js|8 ✅|||153ms| -|packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js|15 ✅|||56ms| -|packages/jest-haste-map/src/lib/__tests__/fast_path.test.js|5 ✅|||29ms| -|packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js|1 ✅|||35ms| -|packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js|2 ✅|||31ms| -|packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js|2 ✅|||35ms| -|packages/jest-jasmine2/src/__tests__/concurrent.test.ts|3 ✅|||24ms| -|packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts|7 ✅|||70ms| -|packages/jest-jasmine2/src/__tests__/hooksError.test.ts|32 ✅|||51ms| -|packages/jest-jasmine2/src/__tests__/iterators.test.ts|4 ✅|||43ms| -|packages/jest-jasmine2/src/__tests__/itTestError.test.ts|6 ✅|||32ms| -|packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts|1 ✅|||23ms| -|packages/jest-jasmine2/src/__tests__/pTimeout.test.ts|3 ✅|||44ms| -|packages/jest-jasmine2/src/__tests__/queueRunner.test.ts|6 ✅|||93ms| -|packages/jest-jasmine2/src/__tests__/reporter.test.ts|1 ✅|||107ms| -|packages/jest-jasmine2/src/__tests__/Suite.test.ts|1 ✅|||84ms| -|packages/jest-jasmine2/src/__tests__/todoError.test.ts|3 ✅|||27ms| -|packages/jest-leak-detector/src/__tests__/index.test.ts|6 ✅|||986ms| -|packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts|11 ✅|||49ms| -|packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts|2 ✅|||48ms| -|packages/jest-matcher-utils/src/__tests__/index.test.ts|48 ✅|||391ms| -|packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts|21 ✅|||114ms| -|packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts|17 ✅|||111ms| -|packages/jest-message-util/src/__tests__/messages.test.ts|11 ✅|||205ms| -|packages/jest-mock/src/__tests__/index.test.ts|84 ✅|||509ms| -|packages/jest-regex-util/src/__tests__/index.test.ts|8 ✅|||56ms| -|packages/jest-repl/src/__tests__/jest_repl.test.js|1 ✅|||1s| -|packages/jest-repl/src/__tests__/runtime_cli.test.js|4 ✅|||4s| -|packages/jest-reporters/src/__tests__/CoverageReporter.test.js|12 ✅|||397ms| -|packages/jest-reporters/src/__tests__/CoverageWorker.test.js|2 ✅|||199ms| -|packages/jest-reporters/src/__tests__/DefaultReporter.test.js|2 ✅|||148ms| -|packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js|3 ✅|||1s| -|packages/jest-reporters/src/__tests__/getResultHeader.test.js|4 ✅|||30ms| -|packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js|3 ✅|||28ms| -|packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js|4 ✅|||49ms| -|packages/jest-reporters/src/__tests__/getWatermarks.test.ts|2 ✅|||37ms| -|packages/jest-reporters/src/__tests__/NotifyReporter.test.ts|18 ✅|||166ms| -|packages/jest-reporters/src/__tests__/SummaryReporter.test.js|4 ✅|||366ms| -|packages/jest-reporters/src/__tests__/utils.test.ts|10 ✅|||85ms| -|packages/jest-reporters/src/__tests__/VerboseReporter.test.js|11 ✅|||425ms| -|packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts|11 ✅|||666ms| -|packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts|4 ✅|||36ms| -|packages/jest-resolve/src/__tests__/resolve.test.ts|16 ✅|||1s| -|packages/jest-runner/src/__tests__/testRunner.test.ts|2 ✅|||905ms| -|packages/jest-runtime/src/__tests__/instrumentation.test.ts|1 ✅|||275ms| -|packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js|3 ✅|||606ms| -|packages/jest-runtime/src/__tests__/runtime_environment.test.js|2 ✅|||497ms| -|packages/jest-runtime/src/__tests__/runtime_internal_module.test.js|4 ✅|||727ms| -|packages/jest-runtime/src/__tests__/runtime_jest_fn.js|4 ✅|||479ms| -|packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js|2 ✅|||521ms| -|packages/jest-runtime/src/__tests__/runtime_mock.test.js|4 ✅|||743ms| -|packages/jest-runtime/src/__tests__/runtime_module_directories.test.js|4 ✅|||525ms| -|packages/jest-runtime/src/__tests__/runtime_node_path.test.js|4 ✅|||1s| -|packages/jest-runtime/src/__tests__/runtime_require_actual.test.js|2 ✅|||478ms| -|packages/jest-runtime/src/__tests__/runtime_require_cache.test.js|2 ✅|||454ms| -|packages/jest-runtime/src/__tests__/runtime_require_mock.test.js|13 ✅|||962ms| -|packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js|1 ✅|||261ms| -|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js|6 ✅|||2s| -|packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js|17 ✅|||1s| -|packages/jest-runtime/src/__tests__/runtime_require_module.test.js|27 ✅|||2s| -|packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts|5 ✅|||707ms| -|packages/jest-runtime/src/__tests__/runtime_wrap.js|2 ✅|||263ms| -|packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js|1 ✅|||584ms| -|packages/jest-runtime/src/__tests__/Runtime-statics.test.js|2 ✅|||162ms| -|packages/jest-serializer/src/__tests__/index.test.ts|17 ✅|||158ms| -|packages/jest-snapshot/src/__tests__/dedentLines.test.ts|17 ✅|||94ms| -|packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts|22 ✅|||1s| -|packages/jest-snapshot/src/__tests__/matcher.test.ts|1 ✅|||131ms| -|packages/jest-snapshot/src/__tests__/mockSerializer.test.ts|10 ✅|||45ms| -|packages/jest-snapshot/src/__tests__/printSnapshot.test.ts|71 ✅|||1s| -|packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts|10 ✅|||98ms| -|packages/jest-snapshot/src/__tests__/throwMatcher.test.ts|3 ✅|||481ms| -|packages/jest-snapshot/src/__tests__/utils.test.ts|26 ✅|||214ms| -|packages/jest-source-map/src/__tests__/getCallsite.test.ts|3 ✅|||86ms| -|packages/jest-test-result/src/__tests__/formatTestResults.test.ts|1 ✅|||53ms| -|packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js|8 ✅|||251ms| -|packages/jest-transform/src/__tests__/ScriptTransformer.test.ts|22 ✅|||2s| -|packages/jest-transform/src/__tests__/shouldInstrument.test.ts|25 ✅|||155ms| -|packages/jest-util/src/__tests__/createProcessObject.test.ts|4 ✅|||81ms| -|packages/jest-util/src/__tests__/deepCyclicCopy.test.ts|12 ✅|||86ms| -|packages/jest-util/src/__tests__/errorWithStack.test.ts|1 ✅|||41ms| -|packages/jest-util/src/__tests__/formatTime.test.ts|11 ✅|||82ms| -|packages/jest-util/src/__tests__/globsToMatcher.test.ts|4 ✅|||56ms| -|packages/jest-util/src/__tests__/installCommonGlobals.test.ts|2 ✅|||68ms| -|packages/jest-util/src/__tests__/isInteractive.test.ts|2 ✅|||35ms| -|packages/jest-util/src/__tests__/isPromise.test.ts|10 ✅|||30ms| -|packages/jest-validate/src/__tests__/validate.test.ts|23 ✅|||283ms| -|packages/jest-validate/src/__tests__/validateCLIOptions.test.js|6 ✅|||83ms| -|packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts|11 ✅|||129ms| -|packages/jest-watcher/src/lib/__tests__/prompt.test.ts|3 ✅|||91ms| -|packages/jest-watcher/src/lib/__tests__/scroll.test.ts|5 ✅|||57ms| -|packages/jest-worker/src/__tests__/Farm.test.js|10 ✅|||158ms| -|packages/jest-worker/src/__tests__/FifoQueue.test.js|3 ✅|||48ms| -|packages/jest-worker/src/__tests__/index.test.js|8 ✅|||230ms| -|packages/jest-worker/src/__tests__/PriorityQueue.test.js|5 ✅|||63ms| -|packages/jest-worker/src/__tests__/process-integration.test.js|5 ✅|||62ms| -|packages/jest-worker/src/__tests__/thread-integration.test.js|6 ✅|||114ms| -|packages/jest-worker/src/__tests__/WorkerPool.test.js|3 ✅|||51ms| -|packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js|11 ✅|||653ms| -|packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js|17 ✅|||184ms| -|packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js|15 ✅|||258ms| -|packages/jest-worker/src/workers/__tests__/processChild.test.js|10 ✅|||135ms| -|packages/jest-worker/src/workers/__tests__/threadChild.test.js|10 ✅|||120ms| -|packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts|38 ✅|||137ms| -|packages/pretty-format/src/__tests__/ConvertAnsi.test.ts|6 ✅|||43ms| -|packages/pretty-format/src/__tests__/DOMCollection.test.ts|10 ✅|||64ms| -|packages/pretty-format/src/__tests__/DOMElement.test.ts|28 ✅|||148ms| -|packages/pretty-format/src/__tests__/Immutable.test.ts|111 ✅|||443ms| -|packages/pretty-format/src/__tests__/prettyFormat.test.ts|86 ✅|||219ms| -|packages/pretty-format/src/__tests__/react.test.tsx|55 ✅|||325ms| -|packages/pretty-format/src/__tests__/ReactElement.test.ts|3 ✅|||64ms| +|[e2e/__tests__/onlyFailuresNonWatch.test.ts](#user-content-r0s99)|1 ✅|||3s| +|[e2e/__tests__/overrideGlobals.test.ts](#user-content-r0s100)|2 ✅|||2s| +|[e2e/__tests__/pnp.test.ts](#user-content-r0s101)|1 ✅|||3s| +|[e2e/__tests__/presets.test.ts](#user-content-r0s102)|2 ✅|||2s| +|[e2e/__tests__/processExit.test.ts](#user-content-r0s103)|1 ✅|||1s| +|[e2e/__tests__/promiseReject.test.ts](#user-content-r0s104)|1 ✅|||967ms| +|[e2e/__tests__/regexCharInPath.test.ts](#user-content-r0s105)|1 ✅|||962ms| +|[e2e/__tests__/requireAfterTeardown.test.ts](#user-content-r0s106)|1 ✅|||921ms| +|[e2e/__tests__/requireMain.test.ts](#user-content-r0s107)|1 ✅|||1s| +|[e2e/__tests__/requireMainAfterCreateRequire.test.ts](#user-content-r0s108)|1 ✅|||966ms| +|[e2e/__tests__/requireMainIsolateModules.test.ts](#user-content-r0s109)|1 ✅|||976ms| +|[e2e/__tests__/requireMainResetModules.test.ts](#user-content-r0s110)|2 ✅|||2s| +|[e2e/__tests__/requireV8Module.test.ts](#user-content-r0s111)|1 ✅|||30ms| +|[e2e/__tests__/resetModules.test.ts](#user-content-r0s112)|1 ✅|||926ms| +|[e2e/__tests__/resolve.test.ts](#user-content-r0s113)|1 ✅|||2s| +|[e2e/__tests__/resolveGetPaths.test.ts](#user-content-r0s114)|1 ✅|||1s| +|[e2e/__tests__/resolveNodeModule.test.ts](#user-content-r0s115)|1 ✅|||943ms| +|[e2e/__tests__/resolveNoFileExtensions.test.ts](#user-content-r0s116)|2 ✅|||1s| +|[e2e/__tests__/resolveWithPaths.test.ts](#user-content-r0s117)|1 ✅|||1s| +|[e2e/__tests__/runProgrammatically.test.ts](#user-content-r0s118)|2 ✅|||575ms| +|[e2e/__tests__/runTestsByPath.test.ts](#user-content-r0s119)|1 ✅|||2s| +|[e2e/__tests__/runtimeInternalModuleRegistry.test.ts](#user-content-r0s120)|1 ✅|||1s| +|[e2e/__tests__/selectProjects.test.ts](#user-content-r0s121)|18 ✅|||5s| +|[e2e/__tests__/setImmediate.test.ts](#user-content-r0s122)|1 ✅|||904ms| +|[e2e/__tests__/setupFilesAfterEnvConfig.test.ts](#user-content-r0s123)|2 ✅|||2s| +|[e2e/__tests__/showConfig.test.ts](#user-content-r0s124)|1 ✅|||195ms| +|[e2e/__tests__/skipBeforeAfterAll.test.ts](#user-content-r0s125)|1 ✅|||1s| +|[e2e/__tests__/snapshot-unknown.test.ts](#user-content-r0s126)|1 ✅|||838ms| +|[e2e/__tests__/snapshot.test.ts](#user-content-r0s127)|9 ✅|||14s| +|[e2e/__tests__/snapshotMockFs.test.ts](#user-content-r0s128)|1 ✅|||883ms| +|[e2e/__tests__/snapshotResolver.test.ts](#user-content-r0s129)|1 ✅|||823ms| +|[e2e/__tests__/snapshotSerializers.test.ts](#user-content-r0s130)|2 ✅|||2s| +|[e2e/__tests__/stackTrace.test.ts](#user-content-r0s131)|7 ✅|||5s| +|[e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts](#user-content-r0s132)|1 ✅|||899ms| +|[e2e/__tests__/stackTraceSourceMaps.test.ts](#user-content-r0s133)|1 ✅|||2s| +|[e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts](#user-content-r0s134)|1 ✅|||2s| +|[e2e/__tests__/supportsDashedArgs.ts](#user-content-r0s135)|2 ✅|||968ms| +|[e2e/__tests__/symbol.test.ts](#user-content-r0s136)|1 ✅|||49ms| +|[e2e/__tests__/testEnvironment.test.ts](#user-content-r0s137)|1 ✅|||2s| +|[e2e/__tests__/testEnvironmentAsync.test.ts](#user-content-r0s138)|1 ✅|||1s| +|[e2e/__tests__/testEnvironmentCircus.test.ts](#user-content-r0s139)|1 ✅|||2s| +|[e2e/__tests__/testEnvironmentCircusAsync.test.ts](#user-content-r0s140)|1 ✅|||2s| +|[e2e/__tests__/testFailureExitCode.test.ts](#user-content-r0s141)|2 ✅|||4s| +|[e2e/__tests__/testInRoot.test.ts](#user-content-r0s142)|1 ✅|||1s| +|[e2e/__tests__/testNamePattern.test.ts](#user-content-r0s143)|1 ✅|||859ms| +|[e2e/__tests__/testNamePatternSkipped.test.ts](#user-content-r0s144)|1 ✅|||991ms| +|[e2e/__tests__/testPathPatternReporterMessage.test.ts](#user-content-r0s145)|1 ✅|||3s| +|[e2e/__tests__/testResultsProcessor.test.ts](#user-content-r0s146)|1 ✅|||910ms| +|[e2e/__tests__/testRetries.test.ts](#user-content-r0s147)|4 ✅|||3s| +|[e2e/__tests__/testTodo.test.ts](#user-content-r0s148)|5 ✅|||4s| +|[e2e/__tests__/timeouts.test.ts](#user-content-r0s149)|4 ✅|||4s| +|[e2e/__tests__/timeoutsLegacy.test.ts](#user-content-r0s150)|1 ✅||3 ⚪|71ms| +|[e2e/__tests__/timerResetMocks.test.ts](#user-content-r0s151)|2 ✅|||2s| +|[e2e/__tests__/timerUseRealTimers.test.ts](#user-content-r0s152)|1 ✅|||1s| +|[e2e/__tests__/toMatchInlineSnapshot.test.ts](#user-content-r0s153)|12 ✅|||24s| +|[e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts](#user-content-r0s154)|3 ✅|||5s| +|[e2e/__tests__/toMatchSnapshot.test.ts](#user-content-r0s155)|9 ✅|||17s| +|[e2e/__tests__/toMatchSnapshotWithRetries.test.ts](#user-content-r0s156)|2 ✅|||4s| +|[e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts](#user-content-r0s157)|3 ✅|||4s| +|[e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts](#user-content-r0s158)|4 ✅|||4s| +|[e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts](#user-content-r0s159)|5 ✅|||4s| +|[e2e/__tests__/transform.test.ts](#user-content-r0s160)|16 ✅|||27s| +|[e2e/__tests__/transformLinkedModules.test.ts](#user-content-r0s161)|1 ✅|||783ms| +|[e2e/__tests__/typescriptCoverage.test.ts](#user-content-r0s162)|1 ✅|||3s| +|[e2e/__tests__/unexpectedToken.test.ts](#user-content-r0s163)|3 ✅|||3s| +|[e2e/__tests__/useStderr.test.ts](#user-content-r0s164)|1 ✅|||1s| +|[e2e/__tests__/v8Coverage.test.ts](#user-content-r0s165)|2 ✅|||2s| +|[e2e/__tests__/verbose.test.ts](#user-content-r0s166)|1 ✅|||683ms| +|[e2e/__tests__/version.test.ts](#user-content-r0s167)|1 ✅|||138ms| +|[e2e/__tests__/watchModeNoAccess.test.ts](#user-content-r0s168)|1 ✅|||4s| +|[e2e/__tests__/watchModeOnlyFailed.test.ts](#user-content-r0s169)|1 ✅|||1s| +|[e2e/__tests__/watchModePatterns.test.ts](#user-content-r0s170)|2 ✅|||4s| +|[e2e/__tests__/watchModeUpdateSnapshot.test.ts](#user-content-r0s171)|1 ✅|||1s| +|[e2e/__tests__/workerForceExit.test.ts](#user-content-r0s172)|2 ✅|||5s| +|[e2e/__tests__/wrongEnv.test.ts](#user-content-r0s173)|5 ✅|||4s| +|[e2e/custom-test-sequencer/a.test.js](#user-content-r0s174)|1 ✅|||29ms| +|[e2e/custom-test-sequencer/b.test.js](#user-content-r0s175)|1 ✅|||21ms| +|[e2e/custom-test-sequencer/c.test.js](#user-content-r0s176)|1 ✅|||42ms| +|[e2e/custom-test-sequencer/d.test.js](#user-content-r0s177)|1 ✅|||21ms| +|[e2e/custom-test-sequencer/e.test.js](#user-content-r0s178)|1 ✅|||27ms| +|[e2e/test-in-root/spec.js](#user-content-r0s179)|1 ✅|||19ms| +|[e2e/test-in-root/test.js](#user-content-r0s180)|1 ✅|||37ms| +|[e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js](#user-content-r0s181)|2 ✅|||30ms| +|[e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js](#user-content-r0s182)|1 ✅|||34ms| +|[e2e/v8-coverage/empty-sourcemap/test.ts](#user-content-r0s183)|1 ✅|||31ms| +|[examples/angular/app.component.spec.ts](#user-content-r0s184)|3 ✅|||654ms| +|[examples/angular/shared/data.service.spec.ts](#user-content-r0s185)|2 ✅|||431ms| +|[examples/angular/shared/sub.service.spec.ts](#user-content-r0s186)|1 ✅|||109ms| +|[examples/async/__tests__/user.test.js](#user-content-r0s187)|8 ✅|||96ms| +|[examples/automatic-mocks/__tests__/automock.test.js](#user-content-r0s188)|2 ✅|||74ms| +|[examples/automatic-mocks/__tests__/createMockFromModule.test.js](#user-content-r0s189)|2 ✅|||115ms| +|[examples/automatic-mocks/__tests__/disableAutomocking.test.js](#user-content-r0s190)|1 ✅|||24ms| +|[examples/enzyme/__tests__/CheckboxWithLabel-test.js](#user-content-r0s191)|1 ✅|||434ms| +|[examples/getting-started/sum.test.js](#user-content-r0s192)|1 ✅|||78ms| +|[examples/jquery/__tests__/display_user.test.js](#user-content-r0s193)|1 ✅|||196ms| +|[examples/jquery/__tests__/fetch_current_user.test.js](#user-content-r0s194)|2 ✅|||196ms| +|[examples/manual-mocks/__tests__/file_summarizer.test.js](#user-content-r0s195)|1 ✅|||87ms| +|[examples/manual-mocks/__tests__/lodashMocking.test.js](#user-content-r0s196)|1 ✅|||109ms| +|[examples/manual-mocks/__tests__/user.test.js](#user-content-r0s197)|1 ✅|||41ms| +|[examples/manual-mocks/__tests__/userMocked.test.js](#user-content-r0s198)|1 ✅|||105ms| +|[examples/module-mock/__tests__/full_mock.js](#user-content-r0s199)|1 ✅|||60ms| +|[examples/module-mock/__tests__/mock_per_test.js](#user-content-r0s200)|2 ✅|||116ms| +|[examples/module-mock/__tests__/partial_mock.js](#user-content-r0s201)|1 ✅|||215ms| +|[examples/mongodb/__test__/db.test.js](#user-content-r0s202)|1 ✅|||236ms| +|[examples/react-native/__tests__/intro.test.js](#user-content-r0s203)|4 ✅|||9s| +|[examples/react-testing-library/__tests__/CheckboxWithLabel-test.js](#user-content-r0s204)|1 ✅|||469ms| +|[examples/react/__tests__/CheckboxWithLabel-test.js](#user-content-r0s205)|1 ✅|||256ms| +|[examples/snapshot/__tests__/clock.react.test.js](#user-content-r0s206)|1 ✅|||62ms| +|[examples/snapshot/__tests__/link.react.test.js](#user-content-r0s207)|4 ✅|||181ms| +|[examples/timer/__tests__/infinite_timer_game.test.js](#user-content-r0s208)|1 ✅|||94ms| +|[examples/timer/__tests__/timer_game.test.js](#user-content-r0s209)|3 ✅|||74ms| +|[examples/typescript/__tests__/calc.test.ts](#user-content-r0s210)|6 ✅|||276ms| +|[examples/typescript/__tests__/CheckboxWithLabel-test.tsx](#user-content-r0s211)|1 ✅|||227ms| +|[examples/typescript/__tests__/sub-test.ts](#user-content-r0s212)|1 ✅|||43ms| +|[examples/typescript/__tests__/sum-test.ts](#user-content-r0s213)|2 ✅|||69ms| +|[examples/typescript/__tests__/sum.test.js](#user-content-r0s214)|2 ✅|||100ms| +|[packages/babel-jest/src/__tests__/index.ts](#user-content-r0s215)|6 ✅|||371ms| +|[packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts](#user-content-r0s216)|4 ✅|||347ms| +|[packages/diff-sequences/src/__tests__/index.property.test.ts](#user-content-r0s217)|7 ✅|||357ms| +|[packages/diff-sequences/src/__tests__/index.test.ts](#user-content-r0s218)|48 ✅|||195ms| +|[packages/expect/src/__tests__/assertionCounts.test.ts](#user-content-r0s219)|6 ✅|||60ms| +|[packages/expect/src/__tests__/asymmetricMatchers.test.ts](#user-content-r0s220)|38 ✅|||207ms| +|[packages/expect/src/__tests__/extend.test.ts](#user-content-r0s221)|10 ✅|||99ms| +|[packages/expect/src/__tests__/isError.test.ts](#user-content-r0s222)|4 ✅|||43ms| +|[packages/expect/src/__tests__/matchers-toContain.property.test.ts](#user-content-r0s223)|2 ✅|||236ms| +|[packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts](#user-content-r0s224)|2 ✅|||287ms| +|[packages/expect/src/__tests__/matchers-toEqual.property.test.ts](#user-content-r0s225)|2 ✅|||1s| +|[packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts](#user-content-r0s226)|3 ✅|||394ms| +|[packages/expect/src/__tests__/matchers.test.js](#user-content-r0s227)|592 ✅|||862ms| +|[packages/expect/src/__tests__/spyMatchers.test.ts](#user-content-r0s228)|248 ✅|||395ms| +|[packages/expect/src/__tests__/stacktrace.test.ts](#user-content-r0s229)|3 ✅|||69ms| +|[packages/expect/src/__tests__/symbolInObjects.test.ts](#user-content-r0s230)|3 ✅|||33ms| +|[packages/expect/src/__tests__/toEqual-dom.test.ts](#user-content-r0s231)|12 ✅|||99ms| +|[packages/expect/src/__tests__/toThrowMatchers.test.ts](#user-content-r0s232)|98 ✅|||257ms| +|[packages/expect/src/__tests__/utils.test.ts](#user-content-r0s233)|41 ✅|||147ms| +|[packages/jest-circus/src/__tests__/afterAll.test.ts](#user-content-r0s234)|6 ✅|||6s| +|[packages/jest-circus/src/__tests__/baseTest.test.ts](#user-content-r0s235)|2 ✅|||3s| +|[packages/jest-circus/src/__tests__/circusItTestError.test.ts](#user-content-r0s236)|8 ✅|||300ms| +|[packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts](#user-content-r0s237)|3 ✅|||81ms| +|[packages/jest-circus/src/__tests__/hooks.test.ts](#user-content-r0s238)|3 ✅|||4s| +|[packages/jest-circus/src/__tests__/hooksError.test.ts](#user-content-r0s239)|32 ✅|||127ms| +|[packages/jest-cli/src/__tests__/cli/args.test.ts](#user-content-r0s240)|17 ✅|||345ms| +|[packages/jest-cli/src/init/__tests__/init.test.js](#user-content-r0s241)|24 ✅|||119ms| +|[packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts](#user-content-r0s242)|4 ✅|||30ms| +|[packages/jest-config/src/__tests__/Defaults.test.ts](#user-content-r0s243)|1 ✅|||672ms| +|[packages/jest-config/src/__tests__/getMaxWorkers.test.ts](#user-content-r0s244)|7 ✅|||67ms| +|[packages/jest-config/src/__tests__/normalize.test.js](#user-content-r0s245)|118 ✅|||798ms| +|[packages/jest-config/src/__tests__/readConfig.test.ts](#user-content-r0s246)|1 ✅|||76ms| +|[packages/jest-config/src/__tests__/readConfigs.test.ts](#user-content-r0s247)|3 ✅|||135ms| +|[packages/jest-config/src/__tests__/resolveConfigPath.test.ts](#user-content-r0s248)|10 ✅|||183ms| +|[packages/jest-config/src/__tests__/setFromArgv.test.ts](#user-content-r0s249)|4 ✅|||53ms| +|[packages/jest-config/src/__tests__/validatePattern.test.ts](#user-content-r0s250)|4 ✅|||52ms| +|[packages/jest-console/src/__tests__/bufferedConsole.test.ts](#user-content-r0s251)|20 ✅|||171ms| +|[packages/jest-console/src/__tests__/CustomConsole.test.ts](#user-content-r0s252)|23 ✅|||115ms| +|[packages/jest-console/src/__tests__/getConsoleOutput.test.ts](#user-content-r0s253)|12 ✅|||56ms| +|[packages/jest-core/src/__tests__/FailedTestsCache.test.js](#user-content-r0s254)|1 ✅|||25ms| +|[packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js](#user-content-r0s255)|5 ✅|||61ms| +|[packages/jest-core/src/__tests__/globals.test.ts](#user-content-r0s256)|1 ✅|||22ms| +|[packages/jest-core/src/__tests__/runJest.test.js](#user-content-r0s257)|2 ✅|||261ms| +|[packages/jest-core/src/__tests__/SearchSource.test.ts](#user-content-r0s258)|27 ✅|||3s| +|[packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js](#user-content-r0s259)|13 ✅|||89ms| +|[packages/jest-core/src/__tests__/TestScheduler.test.js](#user-content-r0s260)|8 ✅|||520ms| +|[packages/jest-core/src/__tests__/testSchedulerHelper.test.js](#user-content-r0s261)|12 ✅|||48ms| +|[packages/jest-core/src/__tests__/watch.test.js](#user-content-r0s262)|80 ✅|||7s| +|[packages/jest-core/src/__tests__/watchFileChanges.test.ts](#user-content-r0s263)|1 ✅|||2s| +|[packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js](#user-content-r0s264)|2 ✅|||165ms| +|[packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js](#user-content-r0s265)|1 ✅|||246ms| +|[packages/jest-core/src/lib/__tests__/isValidPath.test.ts](#user-content-r0s266)|3 ✅|||166ms| +|[packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts](#user-content-r0s267)|3 ✅|||48ms| +|[packages/jest-create-cache-key-function/src/__tests__/index.test.ts](#user-content-r0s268)|1 ✅|||75ms| +|[packages/jest-diff/src/__tests__/diff.test.ts](#user-content-r0s269)|107 ✅|||625ms| +|[packages/jest-diff/src/__tests__/diffStringsRaw.test.ts](#user-content-r0s270)|2 ✅|||55ms| +|[packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts](#user-content-r0s271)|24 ✅|||72ms| +|[packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts](#user-content-r0s272)|6 ✅|||44ms| +|[packages/jest-docblock/src/__tests__/index.test.ts](#user-content-r0s273)|36 ✅|||177ms| +|[packages/jest-each/src/__tests__/array.test.ts](#user-content-r0s274)|159 ✅|||192ms| +|[packages/jest-each/src/__tests__/index.test.ts](#user-content-r0s275)|10 ✅|||44ms| +|[packages/jest-each/src/__tests__/template.test.ts](#user-content-r0s276)|242 ✅|||483ms| +|[packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts](#user-content-r0s277)|2 ✅|||783ms| +|[packages/jest-environment-node/src/__tests__/node_environment.test.ts](#user-content-r0s278)|6 ✅|||184ms| +|[packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts](#user-content-r0s279)|50 ✅|||302ms| +|[packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts](#user-content-r0s280)|40 ✅|||317ms| +|[packages/jest-get-type/src/__tests__/getType.test.ts](#user-content-r0s281)|14 ✅|||45ms| +|[packages/jest-get-type/src/__tests__/isPrimitive.test.ts](#user-content-r0s282)|18 ✅|||36ms| +|[packages/jest-globals/src/__tests__/index.ts](#user-content-r0s283)|1 ✅|||533ms| +|[packages/jest-haste-map/src/__tests__/get_mock_name.test.js](#user-content-r0s284)|1 ✅|||22ms| +|[packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts](#user-content-r0s285)|1 ✅|||337ms| +|[packages/jest-haste-map/src/__tests__/index.test.js](#user-content-r0s286)|44 ✅|||1s| +|[packages/jest-haste-map/src/__tests__/worker.test.js](#user-content-r0s287)|7 ✅|||100ms| +|[packages/jest-haste-map/src/crawlers/__tests__/node.test.js](#user-content-r0s288)|10 ✅|||170ms| +|[packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js](#user-content-r0s289)|8 ✅|||153ms| +|[packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js](#user-content-r0s290)|15 ✅|||56ms| +|[packages/jest-haste-map/src/lib/__tests__/fast_path.test.js](#user-content-r0s291)|5 ✅|||29ms| +|[packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js](#user-content-r0s292)|1 ✅|||35ms| +|[packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js](#user-content-r0s293)|2 ✅|||31ms| +|[packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js](#user-content-r0s294)|2 ✅|||35ms| +|[packages/jest-jasmine2/src/__tests__/concurrent.test.ts](#user-content-r0s295)|3 ✅|||24ms| +|[packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts](#user-content-r0s296)|7 ✅|||70ms| +|[packages/jest-jasmine2/src/__tests__/hooksError.test.ts](#user-content-r0s297)|32 ✅|||51ms| +|[packages/jest-jasmine2/src/__tests__/iterators.test.ts](#user-content-r0s298)|4 ✅|||43ms| +|[packages/jest-jasmine2/src/__tests__/itTestError.test.ts](#user-content-r0s299)|6 ✅|||32ms| +|[packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts](#user-content-r0s300)|1 ✅|||23ms| +|[packages/jest-jasmine2/src/__tests__/pTimeout.test.ts](#user-content-r0s301)|3 ✅|||44ms| +|[packages/jest-jasmine2/src/__tests__/queueRunner.test.ts](#user-content-r0s302)|6 ✅|||93ms| +|[packages/jest-jasmine2/src/__tests__/reporter.test.ts](#user-content-r0s303)|1 ✅|||107ms| +|[packages/jest-jasmine2/src/__tests__/Suite.test.ts](#user-content-r0s304)|1 ✅|||84ms| +|[packages/jest-jasmine2/src/__tests__/todoError.test.ts](#user-content-r0s305)|3 ✅|||27ms| +|[packages/jest-leak-detector/src/__tests__/index.test.ts](#user-content-r0s306)|6 ✅|||986ms| +|[packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts](#user-content-r0s307)|11 ✅|||49ms| +|[packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts](#user-content-r0s308)|2 ✅|||48ms| +|[packages/jest-matcher-utils/src/__tests__/index.test.ts](#user-content-r0s309)|48 ✅|||391ms| +|[packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts](#user-content-r0s310)|21 ✅|||114ms| +|[packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts](#user-content-r0s311)|17 ✅|||111ms| +|[packages/jest-message-util/src/__tests__/messages.test.ts](#user-content-r0s312)|11 ✅|||205ms| +|[packages/jest-mock/src/__tests__/index.test.ts](#user-content-r0s313)|84 ✅|||509ms| +|[packages/jest-regex-util/src/__tests__/index.test.ts](#user-content-r0s314)|8 ✅|||56ms| +|[packages/jest-repl/src/__tests__/jest_repl.test.js](#user-content-r0s315)|1 ✅|||1s| +|[packages/jest-repl/src/__tests__/runtime_cli.test.js](#user-content-r0s316)|4 ✅|||4s| +|[packages/jest-reporters/src/__tests__/CoverageReporter.test.js](#user-content-r0s317)|12 ✅|||397ms| +|[packages/jest-reporters/src/__tests__/CoverageWorker.test.js](#user-content-r0s318)|2 ✅|||199ms| +|[packages/jest-reporters/src/__tests__/DefaultReporter.test.js](#user-content-r0s319)|2 ✅|||148ms| +|[packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js](#user-content-r0s320)|3 ✅|||1s| +|[packages/jest-reporters/src/__tests__/getResultHeader.test.js](#user-content-r0s321)|4 ✅|||30ms| +|[packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js](#user-content-r0s322)|3 ✅|||28ms| +|[packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js](#user-content-r0s323)|4 ✅|||49ms| +|[packages/jest-reporters/src/__tests__/getWatermarks.test.ts](#user-content-r0s324)|2 ✅|||37ms| +|[packages/jest-reporters/src/__tests__/NotifyReporter.test.ts](#user-content-r0s325)|18 ✅|||166ms| +|[packages/jest-reporters/src/__tests__/SummaryReporter.test.js](#user-content-r0s326)|4 ✅|||366ms| +|[packages/jest-reporters/src/__tests__/utils.test.ts](#user-content-r0s327)|10 ✅|||85ms| +|[packages/jest-reporters/src/__tests__/VerboseReporter.test.js](#user-content-r0s328)|11 ✅|||425ms| +|[packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts](#user-content-r0s329)|11 ✅|||666ms| +|[packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts](#user-content-r0s330)|4 ✅|||36ms| +|[packages/jest-resolve/src/__tests__/resolve.test.ts](#user-content-r0s331)|16 ✅|||1s| +|[packages/jest-runner/src/__tests__/testRunner.test.ts](#user-content-r0s332)|2 ✅|||905ms| +|[packages/jest-runtime/src/__tests__/instrumentation.test.ts](#user-content-r0s333)|1 ✅|||275ms| +|[packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js](#user-content-r0s334)|3 ✅|||606ms| +|[packages/jest-runtime/src/__tests__/runtime_environment.test.js](#user-content-r0s335)|2 ✅|||497ms| +|[packages/jest-runtime/src/__tests__/runtime_internal_module.test.js](#user-content-r0s336)|4 ✅|||727ms| +|[packages/jest-runtime/src/__tests__/runtime_jest_fn.js](#user-content-r0s337)|4 ✅|||479ms| +|[packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js](#user-content-r0s338)|2 ✅|||521ms| +|[packages/jest-runtime/src/__tests__/runtime_mock.test.js](#user-content-r0s339)|4 ✅|||743ms| +|[packages/jest-runtime/src/__tests__/runtime_module_directories.test.js](#user-content-r0s340)|4 ✅|||525ms| +|[packages/jest-runtime/src/__tests__/runtime_node_path.test.js](#user-content-r0s341)|4 ✅|||1s| +|[packages/jest-runtime/src/__tests__/runtime_require_actual.test.js](#user-content-r0s342)|2 ✅|||478ms| +|[packages/jest-runtime/src/__tests__/runtime_require_cache.test.js](#user-content-r0s343)|2 ✅|||454ms| +|[packages/jest-runtime/src/__tests__/runtime_require_mock.test.js](#user-content-r0s344)|13 ✅|||962ms| +|[packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js](#user-content-r0s345)|1 ✅|||261ms| +|[packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js](#user-content-r0s346)|6 ✅|||2s| +|[packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js](#user-content-r0s347)|17 ✅|||1s| +|[packages/jest-runtime/src/__tests__/runtime_require_module.test.js](#user-content-r0s348)|27 ✅|||2s| +|[packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts](#user-content-r0s349)|5 ✅|||707ms| +|[packages/jest-runtime/src/__tests__/runtime_wrap.js](#user-content-r0s350)|2 ✅|||263ms| +|[packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js](#user-content-r0s351)|1 ✅|||584ms| +|[packages/jest-runtime/src/__tests__/Runtime-statics.test.js](#user-content-r0s352)|2 ✅|||162ms| +|[packages/jest-serializer/src/__tests__/index.test.ts](#user-content-r0s353)|17 ✅|||158ms| +|[packages/jest-snapshot/src/__tests__/dedentLines.test.ts](#user-content-r0s354)|17 ✅|||94ms| +|[packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts](#user-content-r0s355)|22 ✅|||1s| +|[packages/jest-snapshot/src/__tests__/matcher.test.ts](#user-content-r0s356)|1 ✅|||131ms| +|[packages/jest-snapshot/src/__tests__/mockSerializer.test.ts](#user-content-r0s357)|10 ✅|||45ms| +|[packages/jest-snapshot/src/__tests__/printSnapshot.test.ts](#user-content-r0s358)|71 ✅|||1s| +|[packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts](#user-content-r0s359)|10 ✅|||98ms| +|[packages/jest-snapshot/src/__tests__/throwMatcher.test.ts](#user-content-r0s360)|3 ✅|||481ms| +|[packages/jest-snapshot/src/__tests__/utils.test.ts](#user-content-r0s361)|26 ✅|||214ms| +|[packages/jest-source-map/src/__tests__/getCallsite.test.ts](#user-content-r0s362)|3 ✅|||86ms| +|[packages/jest-test-result/src/__tests__/formatTestResults.test.ts](#user-content-r0s363)|1 ✅|||53ms| +|[packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js](#user-content-r0s364)|8 ✅|||251ms| +|[packages/jest-transform/src/__tests__/ScriptTransformer.test.ts](#user-content-r0s365)|22 ✅|||2s| +|[packages/jest-transform/src/__tests__/shouldInstrument.test.ts](#user-content-r0s366)|25 ✅|||155ms| +|[packages/jest-util/src/__tests__/createProcessObject.test.ts](#user-content-r0s367)|4 ✅|||81ms| +|[packages/jest-util/src/__tests__/deepCyclicCopy.test.ts](#user-content-r0s368)|12 ✅|||86ms| +|[packages/jest-util/src/__tests__/errorWithStack.test.ts](#user-content-r0s369)|1 ✅|||41ms| +|[packages/jest-util/src/__tests__/formatTime.test.ts](#user-content-r0s370)|11 ✅|||82ms| +|[packages/jest-util/src/__tests__/globsToMatcher.test.ts](#user-content-r0s371)|4 ✅|||56ms| +|[packages/jest-util/src/__tests__/installCommonGlobals.test.ts](#user-content-r0s372)|2 ✅|||68ms| +|[packages/jest-util/src/__tests__/isInteractive.test.ts](#user-content-r0s373)|2 ✅|||35ms| +|[packages/jest-util/src/__tests__/isPromise.test.ts](#user-content-r0s374)|10 ✅|||30ms| +|[packages/jest-validate/src/__tests__/validate.test.ts](#user-content-r0s375)|23 ✅|||283ms| +|[packages/jest-validate/src/__tests__/validateCLIOptions.test.js](#user-content-r0s376)|6 ✅|||83ms| +|[packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts](#user-content-r0s377)|11 ✅|||129ms| +|[packages/jest-watcher/src/lib/__tests__/prompt.test.ts](#user-content-r0s378)|3 ✅|||91ms| +|[packages/jest-watcher/src/lib/__tests__/scroll.test.ts](#user-content-r0s379)|5 ✅|||57ms| +|[packages/jest-worker/src/__tests__/Farm.test.js](#user-content-r0s380)|10 ✅|||158ms| +|[packages/jest-worker/src/__tests__/FifoQueue.test.js](#user-content-r0s381)|3 ✅|||48ms| +|[packages/jest-worker/src/__tests__/index.test.js](#user-content-r0s382)|8 ✅|||230ms| +|[packages/jest-worker/src/__tests__/PriorityQueue.test.js](#user-content-r0s383)|5 ✅|||63ms| +|[packages/jest-worker/src/__tests__/process-integration.test.js](#user-content-r0s384)|5 ✅|||62ms| +|[packages/jest-worker/src/__tests__/thread-integration.test.js](#user-content-r0s385)|6 ✅|||114ms| +|[packages/jest-worker/src/__tests__/WorkerPool.test.js](#user-content-r0s386)|3 ✅|||51ms| +|[packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js](#user-content-r0s387)|11 ✅|||653ms| +|[packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js](#user-content-r0s388)|17 ✅|||184ms| +|[packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js](#user-content-r0s389)|15 ✅|||258ms| +|[packages/jest-worker/src/workers/__tests__/processChild.test.js](#user-content-r0s390)|10 ✅|||135ms| +|[packages/jest-worker/src/workers/__tests__/threadChild.test.js](#user-content-r0s391)|10 ✅|||120ms| +|[packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts](#user-content-r0s392)|38 ✅|||137ms| +|[packages/pretty-format/src/__tests__/ConvertAnsi.test.ts](#user-content-r0s393)|6 ✅|||43ms| +|[packages/pretty-format/src/__tests__/DOMCollection.test.ts](#user-content-r0s394)|10 ✅|||64ms| +|[packages/pretty-format/src/__tests__/DOMElement.test.ts](#user-content-r0s395)|28 ✅|||148ms| +|[packages/pretty-format/src/__tests__/Immutable.test.ts](#user-content-r0s396)|111 ✅|||443ms| +|[packages/pretty-format/src/__tests__/prettyFormat.test.ts](#user-content-r0s397)|86 ✅|||219ms| +|[packages/pretty-format/src/__tests__/react.test.tsx](#user-content-r0s398)|55 ✅|||325ms| +|[packages/pretty-format/src/__tests__/ReactElement.test.ts](#user-content-r0s399)|3 ✅|||64ms| +### ✅ e2e/__tests__/asyncAndCallback.test.ts +``` +✅ errors when a test both returns a promise and takes a callback +``` +### ✅ e2e/__tests__/asyncRegenerator.test.ts +``` +✅ successfully transpiles async +``` +### ✅ e2e/__tests__/autoClearMocks.test.ts +``` +✅ suite with auto-clear +✅ suite without auto-clear +``` +### ✅ e2e/__tests__/autoResetMocks.test.ts +``` +✅ suite with auto-reset +✅ suite without auto-reset +``` +### ✅ e2e/__tests__/autoRestoreMocks.test.ts +``` +✅ suite with auto-restore +✅ suite without auto-restore +``` +### ✅ e2e/__tests__/babelPluginJestHoist.test.ts +``` +✅ successfully runs the tests inside `babel-plugin-jest-hoist/` +``` +### ✅ e2e/__tests__/badSourceMap.test.ts +``` +✅ suite with test cases that contain malformed sourcemaps +``` +### ✅ e2e/__tests__/beforeAllFiltered.ts +``` +Correct BeforeAll run + ✅ ensures the BeforeAll of ignored suite is not run +``` +### ✅ e2e/__tests__/beforeEachQueue.ts +``` +✅ does not work on jest-circus +Correct beforeEach order + ⚪ ensures the correct order for beforeEach +``` +### ✅ e2e/__tests__/callDoneTwice.test.ts +``` +✅ `done()` should not be called more than once +``` +### ✅ e2e/__tests__/chaiAssertionLibrary.ts +``` +✅ chai assertion errors should display properly +``` +### ✅ e2e/__tests__/circularInequality.test.ts +``` +✅ handles circular inequality properly +``` +### ✅ e2e/__tests__/circusConcurrentEach.test.ts +``` +✅ works with concurrent.each +✅ works with concurrent.only.each +``` +### ✅ e2e/__tests__/circusDeclarationErrors.test.ts +``` +✅ defining tests and hooks asynchronously throws +``` +### ✅ e2e/__tests__/clearCache.test.ts +``` +jest --clearCache + ✅ normal run results in cache directory being written + ✅ clearCache results in deleted directory and exitCode 0 +``` +### ✅ e2e/__tests__/cliHandlesExactFilenames.test.ts +``` +✅ CLI accepts exact file names if matchers matched +✅ CLI skips exact file names if no matchers matched +``` +### ✅ e2e/__tests__/compareDomNodes.test.ts +``` +✅ does not crash when expect involving a DOM node fails +``` +### ✅ e2e/__tests__/config.test.ts +``` +✅ config as JSON +✅ works with sane config JSON +✅ watchman config option is respected over default argv +✅ config from argv is respected with sane config JSON +✅ works with jsdom testEnvironmentOptions config JSON +✅ negated flags override previous flags +``` +### ✅ e2e/__tests__/console.test.ts +``` +✅ console printing +✅ console printing with --verbose +✅ does not print to console with --silent +✅ respects --noStackTrace +✅ respects noStackTrace in config +✅ the jsdom console is the same as the test console +✅ does not error out when using winston +``` +### ✅ e2e/__tests__/consoleAfterTeardown.test.ts +``` +✅ console printing +``` +### ✅ e2e/__tests__/consoleLogOutputWhenRunInBand.test.ts +``` +✅ prints console.logs when run with forceExit +``` +### ✅ e2e/__tests__/coverageHandlebars.test.ts +``` +✅ code coverage for Handlebars +``` +### ✅ e2e/__tests__/coverageRemapping.test.ts +``` +✅ maps code coverage against original source +``` +### ✅ e2e/__tests__/coverageReport.test.ts +``` +✅ outputs coverage report +✅ collects coverage only from specified file +✅ collects coverage only from multiple specified files +✅ collects coverage only from specified files avoiding dependencies +✅ json reporter printing with --coverage +✅ outputs coverage report as json +✅ outputs coverage report when text is requested +✅ outputs coverage report when text-summary is requested +✅ outputs coverage report when text and text-summary is requested +✅ does not output coverage report when html is requested +✅ collects coverage from duplicate files avoiding shared cache +✅ generates coverage when using the testRegex config param +``` +### ✅ e2e/__tests__/coverageThreshold.test.ts +``` +✅ exits with 1 if coverage threshold is not met +✅ exits with 1 if path threshold group is not found in coverage data +✅ exits with 0 if global threshold group is not found in coverage data +✅ excludes tests matched by path threshold groups from global group +✅ file is matched by all path and glob threshold groups +``` +### ✅ e2e/__tests__/coverageTransformInstrumented.test.ts +``` +✅ code coverage for transform instrumented code +``` +### ✅ e2e/__tests__/coverageWithoutTransform.test.ts +``` +✅ produces code coverage for uncovered files without transformer +``` +### ✅ e2e/__tests__/createProcessObject.test.ts +``` +✅ allows retrieving the current domain +``` +### ✅ e2e/__tests__/customInlineSnapshotMatchers.test.ts +``` +✅ works with custom inline snapshot matchers +``` +### ✅ e2e/__tests__/customMatcherStackTrace.test.ts +``` +✅ works with custom matchers +✅ custom async matchers +``` +### ✅ e2e/__tests__/customReporters.test.ts +``` +Custom Reporters Integration + ✅ valid string format for adding reporters + ✅ valid array format for adding reporters + ✅ invalid format for adding reporters + ✅ default reporters enabled + ✅ TestReporter with all tests passing + ✅ TestReporter with all tests failing + ✅ IncompleteReporter for flexibility + ✅ reporters can be default exports + ✅ prints reporter errors +``` +### ✅ e2e/__tests__/customResolver.test.ts +``` +✅ use the custom resolver +``` +### ✅ e2e/__tests__/customTestSequencers.test.ts +``` +✅ run prioritySequence first sync +✅ run prioritySequence first async +✅ run failed tests async +``` +### ✅ e2e/__tests__/debug.test.ts +``` +jest --debug + ✅ outputs debugging info before running the test +``` +### ✅ e2e/__tests__/declarationErrors.test.ts +``` +✅ errors if describe returns a Promise +✅ errors if describe returns something +✅ errors if describe throws +``` +### ✅ e2e/__tests__/dependencyClash.test.ts +``` +✅ does not require project modules from inside node_modules +``` +### ✅ e2e/__tests__/detectOpenHandles.ts +``` +✅ prints message about flag on slow tests +✅ prints message about flag on forceExit +✅ prints out info about open handlers +✅ does not report promises +✅ prints out info about open handlers from inside tests +on node >=11.10.0 + ✅ does not report ELD histograms +notify + ✅ does not report --notify flag +on node >=11 + ✅ does not report timeouts using unref +``` +### ✅ e2e/__tests__/domDiffing.test.ts +``` +✅ should work without error +``` +### ✅ e2e/__tests__/doneInHooks.test.ts +``` +✅ `done()` works properly in hooks +``` +### ✅ e2e/__tests__/dynamicRequireDependencies.ts +``` +✅ successfully runs tests with dynamic dependencies +``` +### ✅ e2e/__tests__/each.test.ts +``` +✅ works with passing tests +✅ shows error message when not enough arguments are supplied to tests +✅ shows the correct errors in stderr when failing tests +✅ shows only the tests with .only as being ran +✅ shows only the tests without .skip as being ran +✅ runs only the describe.only.each tests +✅ formats args with pretty format when given %p +``` +### ✅ e2e/__tests__/emptyDescribeWithHooks.test.ts +``` +✅ hook in empty describe +✅ hook in describe with skipped test +✅ hook in empty nested describe +✅ multiple hooks in empty describe +``` +### ✅ e2e/__tests__/emptySuiteError.test.ts +``` +JSON Reporter + ✅ fails the test suite if it contains no tests +``` +### ✅ e2e/__tests__/env.test.ts +``` +Environment override + ✅ uses jsdom when specified + ✅ uses node as default from package.json + ✅ uses node when specified + ✅ fails when the env is not available +Environment equivalent + ✅ uses jsdom + ✅ uses node +``` +### ✅ e2e/__tests__/environmentAfterTeardown.test.ts +``` +✅ prints useful error for environment methods after test is done +``` +### ✅ e2e/__tests__/errorOnDeprecated.test.ts +``` +✅ does not work on jest-circus +⚪ fail.test.js errors in errorOnDeprecated mode +⚪ jasmine.addMatchers.test.js errors in errorOnDeprecated mode +⚪ jasmine.any.test.js errors in errorOnDeprecated mode +⚪ jasmine.anything.test.js errors in errorOnDeprecated mode +⚪ jasmine.arrayContaining.test.js errors in errorOnDeprecated mode +⚪ jasmine.createSpy.test.js errors in errorOnDeprecated mode +⚪ jasmine.objectContaining.test.js errors in errorOnDeprecated mode +⚪ jasmine.stringMatching.test.js errors in errorOnDeprecated mode +⚪ pending.test.js errors in errorOnDeprecated mode +⚪ spyOn.test.js errors in errorOnDeprecated mode +⚪ spyOnProperty.test.js errors in errorOnDeprecated mode +⚪ defaultTimeoutInterval.test.js errors in errorOnDeprecated mode +⚪ fail.test.js errors when not in errorOnDeprecated mode +⚪ jasmine.addMatchers.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.any.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.anything.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.arrayContaining.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.createSpy.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.objectContaining.test.js passes when not in errorOnDeprecated mode +⚪ jasmine.stringMatching.test.js passes when not in errorOnDeprecated mode +⚪ pending.test.js passes when not in errorOnDeprecated mode +⚪ spyOn.test.js passes when not in errorOnDeprecated mode +⚪ spyOnProperty.test.js errors when not in errorOnDeprecated mode +⚪ defaultTimeoutInterval.test.js passes when not in errorOnDeprecated mode +``` +### ✅ e2e/__tests__/esmConfigFile.test.ts +``` +✅ reads config from cjs file +on node ^12.17.0 || >=13.2.0 + ✅ reads config from mjs file + ✅ reads config from js file when package.json#type=module +``` +### ✅ e2e/__tests__/executeTestsOnceInMpr.ts +``` +✅ Tests are executed only once even in an MPR +``` +### ✅ e2e/__tests__/existentRoots.test.ts +``` +✅ error when rootDir does not exist +✅ error when rootDir is a file +✅ error when roots directory does not exist +✅ error when roots is a file +``` +### ✅ e2e/__tests__/expectAsyncMatcher.test.ts +``` +✅ works with passing tests +✅ shows the correct errors in stderr when failing tests +``` +### ✅ e2e/__tests__/expectInVm.test.ts +``` +✅ expect works correctly with RegExps created inside a VM +``` +### ✅ e2e/__tests__/extraGlobals.test.ts +``` +✅ works with injected globals +``` +### ✅ e2e/__tests__/failureDetailsProperty.test.ts +``` +✅ that the failureDetails property is set +``` +### ✅ e2e/__tests__/failures.test.ts +``` +✅ not throwing Error objects +✅ works with node assert +✅ works with assertions in separate files +✅ works with async failures +✅ works with snapshot failures +✅ works with snapshot failures with hint +✅ errors after test has completed +``` +### ✅ e2e/__tests__/fakePromises.test.ts +``` +Fake promises + ✅ should be possible to resolve with fake timers using immediates + ✅ should be possible to resolve with fake timers using asap +``` +### ✅ e2e/__tests__/fatalWorkerError.test.ts +``` +✅ fails a test that terminates the worker with a fatal error +``` +### ✅ e2e/__tests__/filter.test.ts +``` +Dynamic test filtering + ✅ uses the default JSON option + ✅ uses the CLI option + ✅ ignores the filter if requested to do so + ✅ throws when you return clowny stuff + ✅ will call setup on filter before filtering + ✅ will print error when filter throws + ✅ will return no results when setup hook throws +``` +### ✅ e2e/__tests__/findRelatedFiles.test.ts +``` +--findRelatedTests flag + ✅ runs tests related to filename + ✅ runs tests related to uppercased filename on case-insensitive os + ✅ runs tests related to filename with a custom dependency extractor + ✅ generates coverage report for filename + ✅ coverage configuration is applied correctly +``` +### ✅ e2e/__tests__/focusedTests.test.ts +``` +✅ runs only "it.only" tests +``` +### ✅ e2e/__tests__/forceExit.test.ts +``` +✅ exits the process after test are done but before timers complete +``` +### ✅ e2e/__tests__/generatorMock.test.ts +``` +✅ mock works with generator +``` +### ✅ e2e/__tests__/global-mutation.test.ts +``` +✅ can redefine global +``` +### ✅ e2e/__tests__/global.test.ts +``` +✅ globals are properly defined +``` +### ✅ e2e/__tests__/globals.test.ts +``` +✅ basic test constructs +✅ interleaved describe and test children order +✅ skips +✅ only +✅ cannot have describe with no implementation +✅ cannot test with no implementation +✅ skips with expand arg +✅ only with expand arg +✅ cannot test with no implementation with expand arg +✅ function as descriptor +``` +### ✅ e2e/__tests__/globalSetup.test.ts +``` +✅ globalSetup is triggered once before all test suites +✅ jest throws an error when globalSetup does not export a function +✅ globalSetup function gets jest config object as a parameter +✅ should call globalSetup function of multiple projects +✅ should not call a globalSetup of a project if there are no tests to run from this project +✅ should not call any globalSetup if there are no tests to run +✅ globalSetup works with default export +✅ globalSetup throws with named export +✅ should not transpile the transformer +✅ should transform node_modules if configured by transformIgnorePatterns +``` +### ✅ e2e/__tests__/globalTeardown.test.ts +``` +✅ globalTeardown is triggered once after all test suites +✅ jest throws an error when globalTeardown does not export a function +✅ globalTeardown function gets jest config object as a parameter +✅ should call globalTeardown function of multiple projects +✅ should not call a globalTeardown of a project if there are no tests to run from this project +✅ globalTeardown works with default export +✅ globalTeardown throws with named export +``` +### ✅ e2e/__tests__/hasteMapMockChanged.test.ts +``` +✅ should not warn when a mock file changes +``` +### ✅ e2e/__tests__/hasteMapSha1.test.ts +``` +✅ exits the process after test are done but before timers complete +``` +### ✅ e2e/__tests__/hasteMapSize.test.ts +``` +✅ reports the correct file size +✅ updates the file size when a file changes +``` +### ✅ e2e/__tests__/importedGlobals.test.ts +``` +✅ imported globals +``` +### ✅ e2e/__tests__/injectGlobals.test.ts +``` +✅ globals are undefined if passed `false` from CLI +✅ globals are undefined if passed `false` from config +``` +### ✅ e2e/__tests__/jasmineAsync.test.ts +``` +async jasmine + ✅ works with beforeAll + ✅ works with beforeEach + ✅ works with afterAll + ✅ works with afterEach + ✅ works with fit + ✅ works with xit + ✅ throws when not a promise is returned + ✅ tests async promise code + ✅ works with concurrent + ✅ works with concurrent within a describe block when invoked with testNamePattern + ✅ works with concurrent.each + ✅ works with concurrent.only.each + ✅ doesn't execute more than 5 tests simultaneously + ✅ async test fails + ✅ generator test +``` +### ✅ e2e/__tests__/jasmineAsyncWithPendingDuringTest.ts +``` +async jasmine with pending during test + ✅ does not work on jest-circus + ⚪ should be reported as a pending test +``` +### ✅ e2e/__tests__/jest.config.js.test.ts +``` +✅ works with jest.config.js +✅ traverses directory tree up until it finds jest.config +✅ invalid JS in jest.config.js +``` +### ✅ e2e/__tests__/jest.config.ts.test.ts +``` +✅ works with jest.config.ts +✅ works with tsconfig.json +✅ traverses directory tree up until it finds jest.config +✅ it does type check the config +✅ invalid JS in jest.config.ts +``` ### ❌ e2e/__tests__/jestChangedFiles.test.ts ``` ✅ gets hg SCM roots and dedupes them @@ -420,6 +898,143 @@ ✅ monitors only root paths for hg ✅ handles a bad revision for "changedSince", for hg ``` +### ✅ e2e/__tests__/jestEnvironmentJsdom.test.ts +``` +✅ check is not leaking memory +``` +### ✅ e2e/__tests__/jestRequireActual.test.ts +``` +✅ understands dependencies using jest.requireActual +``` +### ✅ e2e/__tests__/jestRequireMock.test.ts +``` +✅ understands dependencies using jest.requireMock +``` +### ✅ e2e/__tests__/json.test.ts +``` +✅ JSON is available in the global scope +✅ JSON.parse creates objects from within this context +``` +### ✅ e2e/__tests__/jsonReporter.test.ts +``` +JSON Reporter + ✅ writes test result to sum.result.json + ✅ outputs coverage report +``` +### ✅ e2e/__tests__/lifecycles.ts +``` +✅ suite with invalid assertions in afterAll +``` +### ✅ e2e/__tests__/listTests.test.ts +``` +--listTests flag + ✅ causes tests to be printed in different lines + ✅ causes tests to be printed out as JSON when using the --json flag +``` +### ✅ e2e/__tests__/locationInResults.test.ts +``` +✅ defaults to null for location +✅ adds correct location info when provided with flag +``` +### ✅ e2e/__tests__/logHeapUsage.test.ts +``` +✅ logs memory usage +``` +### ✅ e2e/__tests__/mockNames.test.ts +``` +✅ suite without mock name, mock called +✅ suite without mock name, mock not called +✅ suite with mock name, expect mock not called +✅ suite with mock name, mock called, expect fail +✅ suite with mock name, mock called 5 times +✅ suite with mock name, mock not called 5 times, expect fail +✅ suite with mock name, mock called +✅ suite with mock name, mock not called +``` +### ✅ e2e/__tests__/modernFakeTimers.test.ts +``` +modern implementation of fake timers + ✅ should be possible to use modern implementation from config + ✅ should be possible to use modern implementation from jest-object +``` +### ✅ e2e/__tests__/moduleNameMapper.test.ts +``` +✅ moduleNameMapper wrong configuration +✅ moduleNameMapper wrong array configuration +✅ moduleNameMapper correct configuration +✅ moduleNameMapper correct configuration mocking module of absolute path +✅ moduleNameMapper with mocking +``` +### ✅ e2e/__tests__/moduleParentNullInTest.ts +``` +✅ module.parent should be null in test files +``` +### ✅ e2e/__tests__/multiProjectRunner.test.ts +``` +✅ --listTests doesn't duplicate the test files +✅ can pass projects or global config +✅ "No tests found" message for projects +✅ allows a single non-root project +✅ allows a single non-root project +✅ correctly runs a single non-root project +✅ correctly runs a single non-root project +✅ projects can be workspaces with non-JS/JSON files +✅ objects in project configuration +✅ allows a single project +✅ resolves projects and their properly +✅ Does transform files with the corresponding project transformer +doesn't bleed module file extensions resolution with multiple workers + ✅ external config files + ✅ inline config files +``` +### ✅ e2e/__tests__/nativeAsyncMock.test.ts +``` +✅ mocks async functions +``` +### ✅ e2e/__tests__/nativeEsm.test.ts +``` +✅ test config is without transform +on node ^12.16.0 || >=13.7.0 + ✅ runs test with native ESM +on node >=14.3.0 + ⚪ supports top-level await +``` +### ✅ e2e/__tests__/nativeEsmTypescript.test.ts +``` +on node ^12.16.0 || >=13.7.0 + ✅ runs TS test with native ESM +``` +### ✅ e2e/__tests__/nestedEventLoop.test.ts +``` +✅ works with nested event loops +``` +### ✅ e2e/__tests__/nestedTestDefinitions.test.ts +``` +✅ print correct error message with nested test definitions outside describe +✅ print correct error message with nested test definitions inside describe +✅ print correct message when nesting describe inside it +✅ print correct message when nesting a hook inside it +``` +### ✅ e2e/__tests__/nodePath.test.ts +``` +✅ supports NODE_PATH +``` +### ✅ e2e/__tests__/noTestFound.test.ts +``` +Coverage Report + ✅ outputs coverage report +File path not found in mulit-project scenario + ✅ outputs coverage report +``` +### ✅ e2e/__tests__/noTestsFound.test.ts +``` +No tests are found + ✅ fails the test suite in standard situation + ✅ doesn't fail the test suite if --passWithNoTests passed + ✅ doesn't fail the test suite if using --lastCommit + ✅ doesn't fail the test suite if using --onlyChanged + ✅ doesn't fail the test suite if using --findRelatedTests +``` ### ❌ e2e/__tests__/onlyChanged.test.ts ``` ✅ run for "onlyChanged" and "changedSince" @@ -432,4 +1047,5416 @@ ❌ gets changed files for hg Error: expect(received).toMatch(expected) ✅ path on Windows is case-insensitive +``` +### ✅ e2e/__tests__/onlyFailuresNonWatch.test.ts +``` +✅ onlyFailures flag works in non-watch mode +``` +### ✅ e2e/__tests__/overrideGlobals.test.ts +``` +✅ overriding native promise does not freeze Jest +✅ has a duration even if time is faked +``` +### ✅ e2e/__tests__/pnp.test.ts +``` +✅ successfully runs the tests inside `pnp/` +``` +### ✅ e2e/__tests__/presets.test.ts +``` +✅ supports json preset +✅ supports js preset +``` +### ✅ e2e/__tests__/processExit.test.ts +``` +✅ prints stack trace pointing to process.exit call +``` +### ✅ e2e/__tests__/promiseReject.test.ts +``` +✅ +``` +### ✅ e2e/__tests__/regexCharInPath.test.ts +``` +Regex Char In Path + ✅ parses paths containing regex chars correctly +``` +### ✅ e2e/__tests__/requireAfterTeardown.test.ts +``` +✅ prints useful error for requires after test is done +``` +### ✅ e2e/__tests__/requireMain.test.ts +``` +✅ provides `require.main` set to test suite module +``` +### ✅ e2e/__tests__/requireMainAfterCreateRequire.test.ts +``` +on node >=12.2.0 + ✅ `require.main` not undefined after createRequire +``` +### ✅ e2e/__tests__/requireMainIsolateModules.test.ts +``` +✅ `require.main` on using `jest.isolateModules` should not be undefined +``` +### ✅ e2e/__tests__/requireMainResetModules.test.ts +``` +✅ `require.main` on using `--resetModules='true'` should not be undefined +✅ `require.main` on using `jest.resetModules()` should not be undefined +``` +### ✅ e2e/__tests__/requireV8Module.test.ts +``` +✅ v8 module +``` +### ✅ e2e/__tests__/resetModules.test.ts +``` +✅ jest.resetModules should not error when _isMockFunction is defined but not boolean +``` +### ✅ e2e/__tests__/resolve.test.ts +``` +✅ resolve platform modules +``` +### ✅ e2e/__tests__/resolveGetPaths.test.ts +``` +✅ require.resolve.paths +``` +### ✅ e2e/__tests__/resolveNodeModule.test.ts +``` +✅ resolve node module +``` +### ✅ e2e/__tests__/resolveNoFileExtensions.test.ts +``` +✅ show error message with matching files +✅ show error message when no js moduleFileExtensions +``` +### ✅ e2e/__tests__/resolveWithPaths.test.ts +``` +✅ require.resolve with paths +``` +### ✅ e2e/__tests__/runProgrammatically.test.ts +``` +✅ run Jest programmatically cjs +✅ run Jest programmatically esm +``` +### ✅ e2e/__tests__/runTestsByPath.test.ts +``` +✅ runs tests by exact path +``` +### ✅ e2e/__tests__/runtimeInternalModuleRegistry.test.ts +``` +Runtime Internal Module Registry + ✅ correctly makes use of internal module registry when requiring modules +``` +### ✅ e2e/__tests__/selectProjects.test.ts +``` +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects first-project` + ✅ runs the tests in the first project only + ✅ prints that only first-project will run +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects second-project` + ✅ runs the tests in the second project only + ✅ prints that only second-project will run +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects first-project second-project` + ✅ runs the tests in the first and second projects + ✅ prints that both first-project and second-project will run +Given a config with two named projects, first-project and second-project when Jest is started without providing `--selectProjects` + ✅ runs the tests in the first and second projects + ✅ does not print which projects are run +Given a config with two named projects, first-project and second-project when Jest is started with `--selectProjects third-project` + ✅ fails + ✅ prints that no project was found +Given a config with two projects, first-project and an unnamed project when Jest is started with `--selectProjects first-project` + ✅ runs the tests in the first project only + ✅ prints that a project does not have a name + ✅ prints that only first-project will run +Given a config with two projects, first-project and an unnamed project when Jest is started without providing `--selectProjects` + ✅ runs the tests in the first and second projects + ✅ does not print that a project has no name +Given a config with two projects, first-project and an unnamed project when Jest is started with `--selectProjects third-project` + ✅ fails + ✅ prints that a project does not have a name + ✅ prints that no project was found +``` +### ✅ e2e/__tests__/setImmediate.test.ts +``` +✅ setImmediate +``` +### ✅ e2e/__tests__/setupFilesAfterEnvConfig.test.ts +``` +setupFilesAfterEnv + ✅ requires multiple setup files before each file in the suite + ✅ requires setup files *after* the test runners are required +``` +### ✅ e2e/__tests__/showConfig.test.ts +``` +✅ --showConfig outputs config info and exits +``` +### ✅ e2e/__tests__/skipBeforeAfterAll.test.ts +``` +✅ correctly skip `beforeAll`s in skipped tests +``` +### ✅ e2e/__tests__/snapshot-unknown.test.ts +``` +Snapshot serializers + ✅ renders snapshot +``` +### ✅ e2e/__tests__/snapshot.test.ts +``` +Snapshot + ✅ stores new snapshots on the first run + ✅ works with escaped characters + ✅ works with escaped regex + ✅ works with template literal substitutions +Snapshot Validation + ✅ does not save snapshots in CI mode by default + ✅ works on subsequent runs without `-u` + ✅ deletes the snapshot if the test suite has been removed + ✅ deletes a snapshot when a test does removes all the snapshots + ✅ updates the snapshot when a test removes some snapshots +``` +### ✅ e2e/__tests__/snapshotMockFs.test.ts +``` +✅ store snapshot even if fs is mocked +``` +### ✅ e2e/__tests__/snapshotResolver.test.ts +``` +Custom snapshot resolver + ✅ Resolves snapshot files using custom resolver +``` +### ✅ e2e/__tests__/snapshotSerializers.test.ts +``` +Snapshot serializers + ✅ renders snapshot + ✅ compares snapshots correctly +``` +### ✅ e2e/__tests__/stackTrace.test.ts +``` +Stack Trace + ✅ prints a stack trace for runtime errors + ✅ does not print a stack trace for runtime errors when --noStackTrace is given + ✅ prints a stack trace for matching errors + ✅ does not print a stack trace for matching errors when --noStackTrace is given + ✅ prints a stack trace for errors + ✅ prints a stack trace for errors without message in stack trace + ✅ does not print a stack trace for errors when --noStackTrace is given +``` +### ✅ e2e/__tests__/stackTraceNoCaptureStackTrace.test.ts +``` +✅ prints a usable stack trace even if no Error.captureStackTrace +``` +### ✅ e2e/__tests__/stackTraceSourceMaps.test.ts +``` +✅ processes stack traces and code frames with source maps +``` +### ✅ e2e/__tests__/stackTraceSourceMapsWithCoverage.test.ts +``` +✅ processes stack traces and code frames with source maps with coverage +``` +### ✅ e2e/__tests__/supportsDashedArgs.ts +``` +✅ works with passing tests +✅ throws error for unknown dashed & camelcase args +``` +### ✅ e2e/__tests__/symbol.test.ts +``` +✅ Symbol deletion +``` +### ✅ e2e/__tests__/testEnvironment.test.ts +``` +✅ respects testEnvironment docblock +``` +### ✅ e2e/__tests__/testEnvironmentAsync.test.ts +``` +✅ triggers setup/teardown hooks +``` +### ✅ e2e/__tests__/testEnvironmentCircus.test.ts +``` +✅ calls testEnvironment handleTestEvent +``` +### ✅ e2e/__tests__/testEnvironmentCircusAsync.test.ts +``` +✅ calls asynchronous handleTestEvent in testEnvironment +``` +### ✅ e2e/__tests__/testFailureExitCode.test.ts +``` +✅ exits with a specified code when test fail +✅ exits with a specified code when bailing from a failed test +``` +### ✅ e2e/__tests__/testInRoot.test.ts +``` +✅ runs tests in only test.js and spec.js +``` +### ✅ e2e/__tests__/testNamePattern.test.ts +``` +✅ testNamePattern +``` +### ✅ e2e/__tests__/testNamePatternSkipped.test.ts +``` +✅ testNamePattern skipped +``` +### ✅ e2e/__tests__/testPathPatternReporterMessage.test.ts +``` +✅ prints a message with path pattern at the end +``` +### ✅ e2e/__tests__/testResultsProcessor.test.ts +``` +✅ testNamePattern +``` +### ✅ e2e/__tests__/testRetries.test.ts +``` +Test Retries + ✅ retries failed tests + ✅ reporter shows more than 1 invocation if test is retried + ✅ reporter shows 1 invocation if tests are not retried + ✅ tests are not retried if beforeAll hook failure occurs +``` +### ✅ e2e/__tests__/testTodo.test.ts +``` +✅ works with all statuses +✅ shows error messages when called with no arguments +✅ shows error messages when called with multiple arguments +✅ shows error messages when called with invalid argument +✅ shows todo messages when in verbose mode +``` +### ✅ e2e/__tests__/timeouts.test.ts +``` +✅ exceeds the timeout +✅ does not exceed the timeout +✅ exceeds the command line testTimeout +✅ does not exceed the command line testTimeout +``` +### ✅ e2e/__tests__/timeoutsLegacy.test.ts +``` +✅ does not work on jest-circus +⚪ exceeds the timeout set using jasmine.DEFAULT_TIMEOUT_INTERVAL +⚪ does not exceed the timeout using jasmine.DEFAULT_TIMEOUT_INTERVAL +⚪ can read and write jasmine.DEFAULT_TIMEOUT_INTERVAL +``` +### ✅ e2e/__tests__/timerResetMocks.test.ts +``` +✅ run timers after resetAllMocks test +✅ run timers with resetMocks in config test +``` +### ✅ e2e/__tests__/timerUseRealTimers.test.ts +``` +✅ useRealTimers cancels "timers": "fake" for whole test file +``` +### ✅ e2e/__tests__/toMatchInlineSnapshot.test.ts +``` +✅ basic support +✅ do not indent empty lines +✅ handles property matchers +✅ removes obsolete external snapshots +✅ supports async matchers +✅ supports async tests +✅ writes snapshots with non-literals in expect(...) +✅ handles mocking native modules prettier relies on +✅ supports custom matchers +✅ supports custom matchers with property matcher +✅ multiple custom matchers and native matchers +✅ indentation is correct in the presences of existing snapshots +``` +### ✅ e2e/__tests__/toMatchInlineSnapshotWithRetries.test.ts +``` +✅ works with a single snapshot +✅ works when a different assertion is failing +✅ works when multiple tests have snapshots but only one of them failed multiple times +``` +### ✅ e2e/__tests__/toMatchSnapshot.test.ts +``` +✅ basic support +✅ error thrown before snapshot +✅ first snapshot fails, second passes +✅ does not mark snapshots as obsolete in skipped tests +✅ accepts custom snapshot name +✅ handles property matchers +✅ handles invalid property matchers +✅ handles property matchers with hint +✅ handles property matchers with deep properties +``` +### ✅ e2e/__tests__/toMatchSnapshotWithRetries.test.ts +``` +✅ works with a single snapshot +✅ works when multiple tests have snapshots but only one of them failed multiple times +``` +### ✅ e2e/__tests__/toMatchSnapshotWithStringSerializer.test.ts +``` +✅ empty external +✅ empty internal ci false +✅ undefined internal ci true +``` +### ✅ e2e/__tests__/toThrowErrorMatchingInlineSnapshot.test.ts +``` +✅ works fine when function throws error +✅ updates existing snapshot +✅ cannot be used with .not +✅ should support rejecting promises +``` +### ✅ e2e/__tests__/toThrowErrorMatchingSnapshot.test.ts +``` +✅ works fine when function throws error +✅ throws the error if tested function didn't throw error +✅ accepts custom snapshot name +✅ cannot be used with .not +✅ should support rejecting promises +``` +### ✅ e2e/__tests__/transform.test.ts +``` +babel-jest + ✅ runs transpiled code + ✅ instruments only specific files and collects coverage +babel-jest ignored + ✅ tells user to match ignored files +babel-jest with manual transformer + ✅ runs transpiled code +no babel-jest + ✅ fails with syntax error on flow types + ✅ instrumentation with no babel-jest +custom transformer + ✅ proprocesses files + ✅ instruments files +multiple-transformers + ✅ transforms dependencies using specific transformers +ecmascript-modules-support + ✅ runs transpiled code +transformer-config + ✅ runs transpiled code + ✅ instruments only specific files and collects coverage +transformer caching + ✅ does not rerun transform within worker +transform-environment + ✅ should transform the environment +transform-runner + ✅ should transform runner +transform-testrunner + ✅ should transform testRunner +``` +### ✅ e2e/__tests__/transformLinkedModules.test.ts +``` +✅ should transform linked modules +``` +### ✅ e2e/__tests__/typescriptCoverage.test.ts +``` +✅ instruments and collects coverage for typescript files +``` +### ✅ e2e/__tests__/unexpectedToken.test.ts +``` +✅ triggers unexpected token error message for non-JS assets +✅ triggers unexpected token error message for untranspiled node_modules +✅ does not trigger unexpected token error message for regular syntax errors +``` +### ✅ e2e/__tests__/useStderr.test.ts +``` +✅ no tests found message is redirected to stderr +``` +### ✅ e2e/__tests__/v8Coverage.test.ts +``` +✅ prints coverage with missing sourcemaps +✅ prints coverage with empty sourcemaps +``` +### ✅ e2e/__tests__/verbose.test.ts +``` +✅ Verbose Reporter +``` +### ✅ e2e/__tests__/version.test.ts +``` +✅ works with jest.config.js +``` +### ✅ e2e/__tests__/watchModeNoAccess.test.ts +``` +✅ does not re-run tests when only access time is modified +``` +### ✅ e2e/__tests__/watchModeOnlyFailed.test.ts +``` +✅ can press "f" to run only failed tests +``` +### ✅ e2e/__tests__/watchModePatterns.test.ts +``` +✅ can press "p" to filter by file name +✅ can press "t" to filter by test name +``` +### ✅ e2e/__tests__/watchModeUpdateSnapshot.test.ts +``` +✅ can press "u" to update snapshots +``` +### ✅ e2e/__tests__/workerForceExit.test.ts +``` +✅ prints a warning if a worker is force exited +✅ force exits a worker that fails to exit gracefully +``` +### ✅ e2e/__tests__/wrongEnv.test.ts +``` +Wrong globals for environment + ✅ print useful error for window + ✅ print useful error for document + ✅ print useful error for navigator + ✅ print useful error for unref + ✅ print useful error when it explodes during evaluation +``` +### ✅ e2e/custom-test-sequencer/a.test.js +``` +✅ a +``` +### ✅ e2e/custom-test-sequencer/b.test.js +``` +✅ b +``` +### ✅ e2e/custom-test-sequencer/c.test.js +``` +✅ c +``` +### ✅ e2e/custom-test-sequencer/d.test.js +``` +✅ d +``` +### ✅ e2e/custom-test-sequencer/e.test.js +``` +✅ e +``` +### ✅ e2e/test-in-root/spec.js +``` +✅ stub +``` +### ✅ e2e/test-in-root/test.js +``` +✅ stub +``` +### ✅ e2e/timer-reset-mocks/after-reset-all-mocks/timerAndMock.test.js +``` +timers + ✅ should work before calling resetAllMocks + ✅ should not break after calling resetAllMocks +``` +### ✅ e2e/timer-reset-mocks/with-reset-mocks/timerWithMock.test.js +``` +timers + ✅ should work before calling resetAllMocks +``` +### ✅ e2e/v8-coverage/empty-sourcemap/test.ts +``` +✅ dummy-test +``` +### ✅ examples/angular/app.component.spec.ts +``` +AppComponent + ✅ should create the app + ✅ should have as title 'angular' + ✅ should render title in a h1 tag +``` +### ✅ examples/angular/shared/data.service.spec.ts +``` +Service: DataService + ✅ should create service + ✅ should return the right title +``` +### ✅ examples/angular/shared/sub.service.spec.ts +``` +Service: SubService + ✅ should create service +``` +### ✅ examples/async/__tests__/user.test.js +``` +✅ works with resolves +✅ works with promises +✅ works with async/await +✅ works with async/await and resolves +✅ tests error with rejects +✅ tests error with promises +✅ tests error with async/await +✅ tests error with async/await and rejects +``` +### ✅ examples/automatic-mocks/__tests__/automock.test.js +``` +✅ if utils are mocked +✅ mocked implementation +``` +### ✅ examples/automatic-mocks/__tests__/createMockFromModule.test.js +``` +✅ implementation created by automock +✅ implementation created by jest.createMockFromModule +``` +### ✅ examples/automatic-mocks/__tests__/disableAutomocking.test.js +``` +✅ original implementation +``` +### ✅ examples/enzyme/__tests__/CheckboxWithLabel-test.js +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/getting-started/sum.test.js +``` +✅ adds 1 + 2 to equal 3 +``` +### ✅ examples/jquery/__tests__/display_user.test.js +``` +✅ displays a user after a click +``` +### ✅ examples/jquery/__tests__/fetch_current_user.test.js +``` +✅ calls into $.ajax with the correct params +✅ calls the callback when $.ajax requests are finished +``` +### ✅ examples/manual-mocks/__tests__/file_summarizer.test.js +``` +listFilesInDirectorySync + ✅ includes all files in the directory in the summary +``` +### ✅ examples/manual-mocks/__tests__/lodashMocking.test.js +``` +✅ if lodash head is mocked +``` +### ✅ examples/manual-mocks/__tests__/user.test.js +``` +✅ if orginal user model +``` +### ✅ examples/manual-mocks/__tests__/userMocked.test.js +``` +✅ if user model is mocked +``` +### ✅ examples/module-mock/__tests__/full_mock.js +``` +✅ does a full mock +``` +### ✅ examples/module-mock/__tests__/mock_per_test.js +``` +define mock per test + ✅ uses mocked module + ✅ uses actual module +``` +### ✅ examples/module-mock/__tests__/partial_mock.js +``` +✅ does a partial mock +``` +### ✅ examples/mongodb/__test__/db.test.js +``` +✅ should aggregate docs from collection +``` +### ✅ examples/react-native/__tests__/intro.test.js +``` +✅ renders correctly +✅ renders the ActivityIndicator component +✅ renders the TextInput component +✅ renders the FlatList component +``` +### ✅ examples/react-testing-library/__tests__/CheckboxWithLabel-test.js +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/react/__tests__/CheckboxWithLabel-test.js +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/snapshot/__tests__/clock.react.test.js +``` +✅ renders correctly +``` +### ✅ examples/snapshot/__tests__/link.react.test.js +``` +✅ renders correctly +✅ renders as an anchor when no page is set +✅ properly escapes quotes +✅ changes the class when hovered +``` +### ✅ examples/timer/__tests__/infinite_timer_game.test.js +``` +✅ schedules a 10-second timer after 1 second +``` +### ✅ examples/timer/__tests__/timer_game.test.js +``` +timerGame + ✅ waits 1 second before ending the game + ✅ calls the callback after 1 second via runAllTimers + ✅ calls the callback after 1 second via advanceTimersByTime +``` +### ✅ examples/typescript/__tests__/calc.test.ts +``` +calc - mocks + ✅ returns result from subtract + ✅ returns result from sum + ✅ adds last result to memory + ✅ subtracts last result to memory + ✅ clears the memory + ✅ throws an error when invalid Op is passed +``` +### ✅ examples/typescript/__tests__/CheckboxWithLabel-test.tsx +``` +✅ CheckboxWithLabel changes the text after click +``` +### ✅ examples/typescript/__tests__/sub-test.ts +``` +✅ subtracts 5 - 1 to equal 4 in TypeScript +``` +### ✅ examples/typescript/__tests__/sum-test.ts +``` +✅ adds 1 + 2 to equal 3 in TScript +✅ adds 1 + 2 to equal 3 in JavaScript +``` +### ✅ examples/typescript/__tests__/sum.test.js +``` +✅ adds 1 + 2 to equal 3 in Typescript +✅ adds 1 + 2 to equal 3 in JavaScript +``` +### ✅ packages/babel-jest/src/__tests__/index.ts +``` +✅ Returns source string with inline maps when no transformOptions is passed +✅ can pass null to createTransformer +caller option correctly merges from defaults and options + ✅ {"supportsDynamicImport":true,"supportsStaticESM":true} -> {"supportsDynamicImport":true,"supportsStaticESM":true} + ✅ {"supportsDynamicImport":false,"supportsStaticESM":false} -> {"supportsDynamicImport":false,"supportsStaticESM":false} + ✅ {"supportsStaticESM":false} -> {"supportsDynamicImport":false,"supportsStaticESM":false} + ✅ {"supportsDynamicImport":true} -> {"supportsDynamicImport":true,"supportsStaticESM":false} +``` +### ✅ packages/babel-plugin-jest-hoist/src/__tests__/hoistPlugin.test.ts +``` +babel-plugin-jest-hoist + ✅ automatic react runtime + ✅ top level mocking + ✅ within a block + ✅ within a block with no siblings +``` +### ✅ packages/diff-sequences/src/__tests__/index.property.test.ts +``` +✅ should be reflexive +✅ should find the same number of common items when switching the inputs +✅ should have at most the length of its inputs +✅ should have at most the same number of each character as its inputs +✅ should be a subsequence of its inputs +✅ should be no-op when passing common items +✅ should find the exact common items when one array is subarray of the other +``` +### ✅ packages/diff-sequences/src/__tests__/index.test.ts +``` +invalid arg length + ✅ is not a number + ✅ Infinity is not a safe integer + ✅ Not a Number is not a safe integer + ✅ MAX_SAFE_INTEGER + 1 is not a safe integer + ✅ MIN_SAFE_INTEGER - 1 is not a safe integer + ✅ is a negative integer +invalid arg callback + ✅ null is not a function + ✅ undefined is not a function +input callback encapsulates comparison zero and negative zero + ✅ are not common according to Object.is method + ✅ are common according to === operator +input callback encapsulates comparison Not a Number + ✅ is common according to Object.is method + ✅ is not common according to === operator +input callback encapsulates sequences + ✅ arrays of strings + ✅ string and array of strings + ✅ strings +no common items negative zero is equivalent to zero for length + ✅ of a + ✅ of b + ✅ of a and b +no common items + ✅ a empty and b empty + ✅ a empty and b non-empty + ✅ a non-empty and b empty +no common items a non-empty and b non-empty + ✅ baDeltaLength 0 even + ✅ baDeltaLength 1 odd + ✅ baDeltaLength 2 even + ✅ baDeltaLength 7 odd +only common items + ✅ length 1 + ✅ length 2 +all common items outside + ✅ preceding changes + ✅ following change + ✅ preceding and following changes in one sequence +some common items inside and outside + ✅ preceding changes adjacent to common in both sequences + ✅ following changes adjacent to common in both sequences +all common items inside non-recursive + ✅ move from start to end relative to change + ✅ move from start to end relative to common + ✅ move from start to end relative to change and common + ✅ reverse relative to change + ✅ preceding middle + ✅ following middle +all common items inside recursive + ✅ prev reverse at depth 1 and preceding at depth 2 + ✅ last forward at depth 1 and following at depth 2 + ✅ preceding at depth 2 and both at depth 3 of following + ✅ interleaved single change + ✅ interleaved double changes + ✅ optimization decreases iMaxF + ✅ optimization decreases iMaxR +common substrings + ✅ progress + ✅ regression + ✅ wrapping +``` +### ✅ packages/expect/src/__tests__/assertionCounts.test.ts +``` +.assertions() + ✅ does not throw + ✅ redeclares different assertion count + ✅ expects no assertions +.hasAssertions() + ✅ does not throw if there is an assertion + ✅ throws if expected is not undefined + ✅ hasAssertions not leaking to global state +``` +### ✅ packages/expect/src/__tests__/asymmetricMatchers.test.ts +``` +✅ Any.asymmetricMatch() +✅ Any.toAsymmetricMatcher() +✅ Any.toAsymmetricMatcher() with function name +✅ Any throws when called with empty constructor +✅ Anything matches any type +✅ Anything does not match null and undefined +✅ Anything.toAsymmetricMatcher() +✅ ArrayContaining matches +✅ ArrayContaining does not match +✅ ArrayContaining throws for non-arrays +✅ ArrayNotContaining matches +✅ ArrayNotContaining does not match +✅ ArrayNotContaining throws for non-arrays +✅ ObjectContaining matches +✅ ObjectContaining does not match +✅ ObjectContaining matches defined properties +✅ ObjectContaining matches prototype properties +✅ ObjectContaining throws for non-objects +✅ ObjectContaining does not mutate the sample +✅ ObjectNotContaining matches +✅ ObjectNotContaining does not match +✅ ObjectNotContaining inverts ObjectContaining +✅ ObjectNotContaining throws for non-objects +✅ StringContaining matches string against string +✅ StringContaining throws if expected value is not string +✅ StringContaining returns false if received value is not string +✅ StringNotContaining matches string against string +✅ StringNotContaining throws if expected value is not string +✅ StringNotContaining returns true if received value is not string +✅ StringMatching matches string against regexp +✅ StringMatching matches string against string +✅ StringMatching throws if expected value is neither string nor regexp +✅ StringMatching returns false if received value is not string +✅ StringMatching returns false even if coerced non-string received value matches pattern +✅ StringNotMatching matches string against regexp +✅ StringNotMatching matches string against string +✅ StringNotMatching throws if expected value is neither string nor regexp +✅ StringNotMatching returns true if received value is not string +``` +### ✅ packages/expect/src/__tests__/extend.test.ts +``` +✅ is available globally when matcher is unary +✅ is available globally when matcher is variadic +✅ exposes matcherUtils in context +✅ is ok if there is no message specified +✅ exposes an equality function to custom matchers +✅ defines asymmetric unary matchers +✅ defines asymmetric unary matchers that can be prefixed by not +✅ defines asymmetric variadic matchers +✅ defines asymmetric variadic matchers that can be prefixed by not +✅ prints the Symbol into the error message +``` +### ✅ packages/expect/src/__tests__/isError.test.ts +``` +isError + ✅ should not assume objects are errors + ✅ should detect simple error instances + ✅ should detect errors from another context + ✅ should detect DOMException errors from another context +``` +### ✅ packages/expect/src/__tests__/matchers-toContain.property.test.ts +``` +toContain + ✅ should always find the value when inside the array + ✅ should not find the value if it has been cloned into the array +``` +### ✅ packages/expect/src/__tests__/matchers-toContainEqual.property.test.ts +``` +toContainEqual + ✅ should always find the value when inside the array + ✅ should always find the value when cloned inside the array +``` +### ✅ packages/expect/src/__tests__/matchers-toEqual.property.test.ts +``` +toEqual + ✅ should be reflexive + ✅ should be symmetric +``` +### ✅ packages/expect/src/__tests__/matchers-toStrictEqual.property.test.ts +``` +toStrictEqual + ✅ should be reflexive + ✅ should be symmetric +toStrictEqual on node >=9 + ✅ should be equivalent to Node deepStrictEqual +``` +### ✅ packages/expect/src/__tests__/matchers.test.js +``` +✅ should throw if passed two arguments +.rejects + ✅ should reject + ✅ should reject with toThrow + ✅ should reject async function to toThrow + ✅ fails non-promise value "a" synchronously + ✅ fails non-promise value "a" + ✅ fails non-promise value [1] synchronously + ✅ fails non-promise value [1] + ✅ fails non-promise value [Function anonymous] synchronously + ✅ fails non-promise value [Function anonymous] + ✅ fails non-promise value {"a": 1} synchronously + ✅ fails non-promise value {"a": 1} + ✅ fails non-promise value 4 synchronously + ✅ fails non-promise value 4 + ✅ fails non-promise value null synchronously + ✅ fails non-promise value null + ✅ fails non-promise value true synchronously + ✅ fails non-promise value true + ✅ fails non-promise value undefined synchronously + ✅ fails non-promise value undefined + ✅ fails for promise that resolves +.resolves + ✅ should resolve + ✅ fails non-promise value "a" synchronously + ✅ fails non-promise value "a" + ✅ fails non-promise value [1] synchronously + ✅ fails non-promise value [1] + ✅ fails non-promise value [Function anonymous] synchronously + ✅ fails non-promise value [Function anonymous] + ✅ fails non-promise value {"a": 1} synchronously + ✅ fails non-promise value {"a": 1} + ✅ fails non-promise value 4 synchronously + ✅ fails non-promise value 4 + ✅ fails non-promise value null synchronously + ✅ fails non-promise value null + ✅ fails non-promise value true synchronously + ✅ fails non-promise value true + ✅ fails non-promise value undefined synchronously + ✅ fails non-promise value undefined + ✅ fails for promise that rejects +.toBe() + ✅ does not throw + ✅ fails for: 1 and 2 + ✅ fails for: true and false + ✅ fails for: [Function anonymous] and [Function anonymous] + ✅ fails for: {} and {} + ✅ fails for: {"a": 1} and {"a": 1} + ✅ fails for: {"a": 1} and {"a": 5} + ✅ fails for: {"a": [Function a], "b": 2} and {"a": Any, "b": 2} + ✅ fails for: {"a": undefined, "b": 2} and {"b": 2} + ✅ fails for: 2020-02-20T00:00:00.000Z and 2020-02-20T00:00:00.000Z + ✅ fails for: 2020-02-21T00:00:00.000Z and 2020-02-20T00:00:00.000Z + ✅ fails for: /received/ and /expected/ + ✅ fails for: Symbol(received) and Symbol(expected) + ✅ fails for: [Error: received] and [Error: expected] + ✅ fails for: "abc" and "cde" + ✅ fails for: "painless JavaScript testing" and "delightful JavaScript testing" + ✅ fails for: "" and "compare one-line string to empty string" + ✅ fails for: "with +trailing space" and "without trailing space" + ✅ fails for: "four +4 +line +string" and "3 +line +string" + ✅ fails for: [] and [] + ✅ fails for: null and undefined + ✅ fails for: -0 and 0 + ✅ fails for: 1n and 2n + ✅ fails for: {"a": 1n} and {"a": 1n} + ✅ fails for 'false' with '.not' + ✅ fails for '1' with '.not' + ✅ fails for '"a"' with '.not' + ✅ fails for 'undefined' with '.not' + ✅ fails for 'null' with '.not' + ✅ fails for '{}' with '.not' + ✅ fails for '[]' with '.not' + ✅ fails for '1n' with '.not' + ✅ fails for '1n' with '.not' + ✅ does not crash on circular references + ✅ assertion error matcherResult property contains matcher name, expected and actual values +.toStrictEqual() + ✅ does not ignore keys with undefined values + ✅ does not ignore keys with undefined values inside an array + ✅ does not ignore keys with undefined values deep inside an object + ✅ passes when comparing same type + ✅ matches the expected snapshot when it fails + ✅ displays substring diff + ✅ displays substring diff for multiple lines + ✅ does not pass for different types + ✅ does not simply compare constructor names + ✅ passes for matching sparse arrays + ✅ does not pass when sparseness of arrays do not match + ✅ does not pass when equally sparse arrays have different values +.toEqual() + ✅ {pass: false} expect(true).toEqual(false) + ✅ {pass: false} expect(1).toEqual(2) + ✅ {pass: false} expect(0).toEqual(-0) + ✅ {pass: false} expect(0).toEqual(5e-324) + ✅ {pass: false} expect(5e-324).toEqual(0) + ✅ {pass: false} expect(0).toEqual({}) + ✅ {pass: false} expect({}).toEqual(0) + ✅ {pass: false} expect({}).toEqual({}) + ✅ {pass: false} expect("abc").toEqual({"0": "a", "1": "b", "2": "c"}) + ✅ {pass: false} expect({"0": "a", "1": "b", "2": "c"}).toEqual("abc") + ✅ {pass: false} expect(/abc/gsy).toEqual(/abc/g) + ✅ {pass: false} expect({"a": 1}).toEqual({"a": 2}) + ✅ {pass: false} expect({"a": 5}).toEqual({"b": 6}) + ✅ {pass: false} expect({"foo": {"bar": 1}}).toEqual({"foo": {}}) + ✅ {pass: false} expect({"getterAndSetter": {}}).toEqual({"getterAndSetter": {"foo": "bar"}}) + ✅ {pass: false} expect({"frozenGetterAndSetter": {}}).toEqual({"frozenGetterAndSetter": {"foo": "bar"}}) + ✅ {pass: false} expect({"getter": {}}).toEqual({"getter": {"foo": "bar"}}) + ✅ {pass: false} expect({"frozenGetter": {}}).toEqual({"frozenGetter": {"foo": "bar"}}) + ✅ {pass: false} expect({"setter": undefined}).toEqual({"setter": {"foo": "bar"}}) + ✅ {pass: false} expect({"frozenSetter": undefined}).toEqual({"frozenSetter": {"foo": "bar"}}) + ✅ {pass: false} expect("banana").toEqual("apple") + ✅ {pass: false} expect("1 234,57 $").toEqual("1 234,57 $") + ✅ {pass: false} expect("type TypeName = T extends Function ? \"function\" : \"object\";").toEqual("type TypeName = T extends Function +? \"function\" +: \"object\";") + ✅ {pass: false} expect(null).toEqual(undefined) + ✅ {pass: false} expect([1]).toEqual([2]) + ✅ {pass: false} expect([1, 2]).toEqual([2, 1]) + ✅ {pass: false} expect(Immutable.List [1]).toEqual(Immutable.List [2]) + ✅ {pass: false} expect(Immutable.List [1, 2]).toEqual(Immutable.List [2, 1]) + ✅ {pass: false} expect(Map {}).toEqual(Set {}) + ✅ {pass: false} expect(Set {1, 2}).toEqual(Set {}) + ✅ {pass: false} expect(Set {1, 2}).toEqual(Set {1, 2, 3}) + ✅ {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [3]}) + ✅ {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [2]}) + ✅ {pass: false} expect(Set {Set {1}, Set {2}}).toEqual(Set {Set {1}, Set {3}}) + ✅ {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set []) + ✅ {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [1, 2, 3]) + ✅ {pass: false} expect(Immutable.OrderedSet [1, 2]).toEqual(Immutable.OrderedSet [2, 1]) + ✅ {pass: false} expect(Map {1 => "one", 2 => "two"}).toEqual(Map {1 => "one"}) + ✅ {pass: false} expect(Map {"a" => 0}).toEqual(Map {"b" => 0}) + ✅ {pass: false} expect(Map {"v" => 1}).toEqual(Map {"v" => 2}) + ✅ {pass: false} expect(Map {["v"] => 1}).toEqual(Map {["v"] => 2}) + ✅ {pass: false} expect(Map {[1] => Map {[1] => "one"}}).toEqual(Map {[1] => Map {[1] => "two"}}) + ✅ {pass: false} expect(Immutable.Map {"a": 0}).toEqual(Immutable.Map {"b": 0}) + ✅ {pass: false} expect(Immutable.Map {"v": 1}).toEqual(Immutable.Map {"v": 2}) + ✅ {pass: false} expect(Immutable.OrderedMap {1: "one", 2: "two"}).toEqual(Immutable.OrderedMap {2: "two", 1: "one"}) + ✅ {pass: false} expect(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}).toEqual(Immutable.Map {"1": Immutable.Map {"2": {"a": 11}}}) + ✅ {pass: false} expect([97, 98, 99]).toEqual([97, 98, 100]) + ✅ {pass: false} expect({"a": 1, "b": 2}).toEqual(ObjectContaining {"a": 2}) + ✅ {pass: false} expect(false).toEqual(ObjectContaining {"a": 2}) + ✅ {pass: false} expect([1, 3]).toEqual(ArrayContaining [1, 2]) + ✅ {pass: false} expect(1).toEqual(ArrayContaining [1, 2]) + ✅ {pass: false} expect("abd").toEqual(StringContaining "bc") + ✅ {pass: false} expect("abd").toEqual(StringMatching /bc/i) + ✅ {pass: false} expect(undefined).toEqual(Anything) + ✅ {pass: false} expect(undefined).toEqual(Any) + ✅ {pass: false} expect("Eve").toEqual({"asymmetricMatch": [Function asymmetricMatch]}) + ✅ {pass: false} expect({"target": {"nodeType": 1, "value": "a"}}).toEqual({"target": {"nodeType": 1, "value": "b"}}) + ✅ {pass: false} expect({"nodeName": "div", "nodeType": 1}).toEqual({"nodeName": "p", "nodeType": 1}) + ✅ {pass: false} expect({Symbol(foo): 1, Symbol(bar): 2}).toEqual({Symbol(foo): Any, Symbol(bar): 1}) + ✅ {pass: false} expect(1n).toEqual(2n) + ✅ {pass: false} expect(1n).toEqual(1) + ✅ {pass: true} expect(true).not.toEqual(true) + ✅ {pass: true} expect(1).not.toEqual(1) + ✅ {pass: true} expect(NaN).not.toEqual(NaN) + ✅ {pass: true} expect(0).not.toEqual(0) + ✅ {pass: true} expect(0).not.toEqual(0) + ✅ {pass: true} expect({}).not.toEqual({}) + ✅ {pass: true} expect("abc").not.toEqual("abc") + ✅ {pass: true} expect("abc").not.toEqual("abc") + ✅ {pass: true} expect("abc").not.toEqual("abc") + ✅ {pass: true} expect([1]).not.toEqual([1]) + ✅ {pass: true} expect([1, 2]).not.toEqual([1, 2]) + ✅ {pass: true} expect(Immutable.List [1]).not.toEqual(Immutable.List [1]) + ✅ {pass: true} expect(Immutable.List [1, 2]).not.toEqual(Immutable.List [1, 2]) + ✅ {pass: true} expect({}).not.toEqual({}) + ✅ {pass: true} expect({"a": 99}).not.toEqual({"a": 99}) + ✅ {pass: true} expect(Set {}).not.toEqual(Set {}) + ✅ {pass: true} expect(Set {1, 2}).not.toEqual(Set {1, 2}) + ✅ {pass: true} expect(Set {1, 2}).not.toEqual(Set {2, 1}) + ✅ {pass: true} expect(Set {[1], [2]}).not.toEqual(Set {[2], [1]}) + ✅ {pass: true} expect(Set {Set {[1]}, Set {[2]}}).not.toEqual(Set {Set {[2]}, Set {[1]}}) + ✅ {pass: true} expect(Set {[1], [2], [3], [3]}).not.toEqual(Set {[3], [3], [2], [1]}) + ✅ {pass: true} expect(Set {{"a": 1}, {"b": 2}}).not.toEqual(Set {{"b": 2}, {"a": 1}}) + ✅ {pass: true} expect(Immutable.Set []).not.toEqual(Immutable.Set []) + ✅ {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [1, 2]) + ✅ {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [2, 1]) + ✅ {pass: true} expect(Immutable.OrderedSet []).not.toEqual(Immutable.OrderedSet []) + ✅ {pass: true} expect(Immutable.OrderedSet [1, 2]).not.toEqual(Immutable.OrderedSet [1, 2]) + ✅ {pass: true} expect(Map {}).not.toEqual(Map {}) + ✅ {pass: true} expect(Map {1 => "one", 2 => "two"}).not.toEqual(Map {1 => "one", 2 => "two"}) + ✅ {pass: true} expect(Map {1 => "one", 2 => "two"}).not.toEqual(Map {2 => "two", 1 => "one"}) + ✅ {pass: true} expect(Map {[1] => "one", [2] => "two", [3] => "three", [3] => "four"}).not.toEqual(Map {[3] => "three", [3] => "four", [2] => "two", [1] => "one"}) + ✅ {pass: true} expect(Map {[1] => Map {[1] => "one"}, [2] => Map {[2] => "two"}}).not.toEqual(Map {[2] => Map {[2] => "two"}, [1] => Map {[1] => "one"}}) + ✅ {pass: true} expect(Map {[1] => "one", [2] => "two"}).not.toEqual(Map {[2] => "two", [1] => "one"}) + ✅ {pass: true} expect(Map {{"a": 1} => "one", {"b": 2} => "two"}).not.toEqual(Map {{"b": 2} => "two", {"a": 1} => "one"}) + ✅ {pass: true} expect(Map {1 => ["one"], 2 => ["two"]}).not.toEqual(Map {2 => ["two"], 1 => ["one"]}) + ✅ {pass: true} expect(Immutable.Map {}).not.toEqual(Immutable.Map {}) + ✅ {pass: true} expect(Immutable.Map {1: "one", 2: "two"}).not.toEqual(Immutable.Map {1: "one", 2: "two"}) + ✅ {pass: true} expect(Immutable.Map {1: "one", 2: "two"}).not.toEqual(Immutable.Map {2: "two", 1: "one"}) + ✅ {pass: true} expect(Immutable.OrderedMap {1: "one", 2: "two"}).not.toEqual(Immutable.OrderedMap {1: "one", 2: "two"}) + ✅ {pass: true} expect(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}).not.toEqual(Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}}) + ✅ {pass: true} expect([97, 98, 99]).not.toEqual([97, 98, 99]) + ✅ {pass: true} expect({"a": 1, "b": 2}).not.toEqual(ObjectContaining {"a": 1}) + ✅ {pass: true} expect([1, 2, 3]).not.toEqual(ArrayContaining [2, 3]) + ✅ {pass: true} expect("abcd").not.toEqual(StringContaining "bc") + ✅ {pass: true} expect("abcd").not.toEqual(StringMatching /bc/) + ✅ {pass: true} expect(true).not.toEqual(Anything) + ✅ {pass: true} expect([Function anonymous]).not.toEqual(Any) + ✅ {pass: true} expect({"a": 1, "b": [Function b], "c": true}).not.toEqual({"a": 1, "b": Any, "c": Anything}) + ✅ {pass: true} expect("Alice").not.toEqual({"asymmetricMatch": [Function asymmetricMatch]}) + ✅ {pass: true} expect({"nodeName": "div", "nodeType": 1}).not.toEqual({"nodeName": "div", "nodeType": 1}) + ✅ {pass: true} expect({Symbol(foo): 1, Symbol(bar): 2}).not.toEqual({Symbol(foo): Any, Symbol(bar): 2}) + ✅ {pass: true} expect(1n).not.toEqual(1n) + ✅ {pass: true} expect(0n).not.toEqual(0n) + ✅ {pass: true} expect([1n]).not.toEqual([1n]) + ✅ {pass: true} expect([1n, 2]).not.toEqual([1n, 2]) + ✅ {pass: true} expect(Immutable.List [1n]).not.toEqual(Immutable.List [1n]) + ✅ {pass: true} expect({"a": 99n}).not.toEqual({"a": 99n}) + ✅ {pass: true} expect(Set {1n, 2n}).not.toEqual(Set {1n, 2n}) + ✅ assertion error matcherResult property contains matcher name, expected and actual values + ✅ symbol based keys in arrays are processed correctly + ✅ non-enumerable members should be skipped during equal + ✅ non-enumerable symbolic members should be skipped during equal +.toEqual() cyclic object equality + ✅ properties with the same circularity are equal + ✅ properties with different circularity are not equal + ✅ are not equal if circularity is not on the same property +.toBeInstanceOf() + ✅ passing Map {} and [Function Map] + ✅ passing [] and [Function Array] + ✅ passing {} and [Function A] + ✅ passing {} and [Function B] + ✅ passing {} and [Function B] + ✅ passing {} and [Function anonymous] + ✅ passing {} and [Function B] + ✅ passing {} and [Function name() {}] + ✅ failing "a" and [Function String] + ✅ failing 1 and [Function Number] + ✅ failing true and [Function Boolean] + ✅ failing {} and [Function B] + ✅ failing {} and [Function A] + ✅ failing undefined and [Function String] + ✅ failing null and [Function String] + ✅ failing /\w+/ and [Function anonymous] + ✅ failing {} and [Function RegExp] + ✅ throws if constructor is not a function +.toBeTruthy(), .toBeFalsy() + ✅ does not accept arguments + ✅ '{}' is truthy + ✅ '[]' is truthy + ✅ 'true' is truthy + ✅ '1' is truthy + ✅ '"a"' is truthy + ✅ '0.5' is truthy + ✅ 'Map {}' is truthy + ✅ '[Function anonymous]' is truthy + ✅ 'Infinity' is truthy + ✅ '1n' is truthy + ✅ 'false' is falsy + ✅ 'null' is falsy + ✅ 'NaN' is falsy + ✅ '0' is falsy + ✅ '""' is falsy + ✅ 'undefined' is falsy + ✅ '0n' is falsy +.toBeNaN() + ✅ {pass: true} expect(NaN).toBeNaN() + ✅ throws +.toBeNull() + ✅ fails for '{}' + ✅ fails for '[]' + ✅ fails for 'true' + ✅ fails for '1' + ✅ fails for '"a"' + ✅ fails for '0.5' + ✅ fails for 'Map {}' + ✅ fails for '[Function anonymous]' + ✅ fails for 'Infinity' + ✅ fails for null with .not + ✅ pass for null +.toBeDefined(), .toBeUndefined() + ✅ '{}' is defined + ✅ '[]' is defined + ✅ 'true' is defined + ✅ '1' is defined + ✅ '"a"' is defined + ✅ '0.5' is defined + ✅ 'Map {}' is defined + ✅ '[Function anonymous]' is defined + ✅ 'Infinity' is defined + ✅ '1n' is defined + ✅ undefined is undefined +.toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() + ✅ {pass: true} expect(1).toBeLessThan(2) + ✅ {pass: false} expect(2).toBeLessThan(1) + ✅ {pass: true} expect(2).toBeGreaterThan(1) + ✅ {pass: false} expect(1).toBeGreaterThan(2) + ✅ {pass: true} expect(1).toBeLessThanOrEqual(2) + ✅ {pass: false} expect(2).toBeLessThanOrEqual(1) + ✅ {pass: true} expect(2).toBeGreaterThanOrEqual(1) + ✅ {pass: false} expect(1).toBeGreaterThanOrEqual(2) + ✅ throws: [1, 2] + ✅ {pass: true} expect(-Infinity).toBeLessThan(Infinity) + ✅ {pass: false} expect(Infinity).toBeLessThan(-Infinity) + ✅ {pass: true} expect(Infinity).toBeGreaterThan(-Infinity) + ✅ {pass: false} expect(-Infinity).toBeGreaterThan(Infinity) + ✅ {pass: true} expect(-Infinity).toBeLessThanOrEqual(Infinity) + ✅ {pass: false} expect(Infinity).toBeLessThanOrEqual(-Infinity) + ✅ {pass: true} expect(Infinity).toBeGreaterThanOrEqual(-Infinity) + ✅ {pass: false} expect(-Infinity).toBeGreaterThanOrEqual(Infinity) + ✅ throws: [-Infinity, Infinity] + ✅ {pass: true} expect(5e-324).toBeLessThan(1.7976931348623157e+308) + ✅ {pass: false} expect(1.7976931348623157e+308).toBeLessThan(5e-324) + ✅ {pass: true} expect(1.7976931348623157e+308).toBeGreaterThan(5e-324) + ✅ {pass: false} expect(5e-324).toBeGreaterThan(1.7976931348623157e+308) + ✅ {pass: true} expect(5e-324).toBeLessThanOrEqual(1.7976931348623157e+308) + ✅ {pass: false} expect(1.7976931348623157e+308).toBeLessThanOrEqual(5e-324) + ✅ {pass: true} expect(1.7976931348623157e+308).toBeGreaterThanOrEqual(5e-324) + ✅ {pass: false} expect(5e-324).toBeGreaterThanOrEqual(1.7976931348623157e+308) + ✅ throws: [5e-324, 1.7976931348623157e+308] + ✅ {pass: true} expect(17).toBeLessThan(34) + ✅ {pass: false} expect(34).toBeLessThan(17) + ✅ {pass: true} expect(34).toBeGreaterThan(17) + ✅ {pass: false} expect(17).toBeGreaterThan(34) + ✅ {pass: true} expect(17).toBeLessThanOrEqual(34) + ✅ {pass: false} expect(34).toBeLessThanOrEqual(17) + ✅ {pass: true} expect(34).toBeGreaterThanOrEqual(17) + ✅ {pass: false} expect(17).toBeGreaterThanOrEqual(34) + ✅ throws: [17, 34] + ✅ {pass: true} expect(3).toBeLessThan(7) + ✅ {pass: false} expect(7).toBeLessThan(3) + ✅ {pass: true} expect(7).toBeGreaterThan(3) + ✅ {pass: false} expect(3).toBeGreaterThan(7) + ✅ {pass: true} expect(3).toBeLessThanOrEqual(7) + ✅ {pass: false} expect(7).toBeLessThanOrEqual(3) + ✅ {pass: true} expect(7).toBeGreaterThanOrEqual(3) + ✅ {pass: false} expect(3).toBeGreaterThanOrEqual(7) + ✅ throws: [3, 7] + ✅ {pass: true} expect(9).toBeLessThan(18) + ✅ {pass: false} expect(18).toBeLessThan(9) + ✅ {pass: true} expect(18).toBeGreaterThan(9) + ✅ {pass: false} expect(9).toBeGreaterThan(18) + ✅ {pass: true} expect(9).toBeLessThanOrEqual(18) + ✅ {pass: false} expect(18).toBeLessThanOrEqual(9) + ✅ {pass: true} expect(18).toBeGreaterThanOrEqual(9) + ✅ {pass: false} expect(9).toBeGreaterThanOrEqual(18) + ✅ throws: [9, 18] + ✅ {pass: true} expect(0.1).toBeLessThan(0.2) + ✅ {pass: false} expect(0.2).toBeLessThan(0.1) + ✅ {pass: true} expect(0.2).toBeGreaterThan(0.1) + ✅ {pass: false} expect(0.1).toBeGreaterThan(0.2) + ✅ {pass: true} expect(0.1).toBeLessThanOrEqual(0.2) + ✅ {pass: false} expect(0.2).toBeLessThanOrEqual(0.1) + ✅ {pass: true} expect(0.2).toBeGreaterThanOrEqual(0.1) + ✅ {pass: false} expect(0.1).toBeGreaterThanOrEqual(0.2) + ✅ throws: [0.1, 0.2] + ✅ can compare BigInt to Numbers + ✅ {pass: true} expect(1n).toBeLessThan(2n) + ✅ {pass: false} expect(2n).toBeLessThan(1n) + ✅ {pass: true} expect(2n).toBeGreaterThan(1n) + ✅ {pass: false} expect(1n).toBeGreaterThan(2n) + ✅ {pass: true} expect(1n).toBeLessThanOrEqual(2n) + ✅ {pass: false} expect(2n).toBeLessThanOrEqual(1n) + ✅ {pass: true} expect(2n).toBeGreaterThanOrEqual(1n) + ✅ {pass: false} expect(1n).toBeGreaterThanOrEqual(2n) + ✅ throws: [1n, 2n] + ✅ {pass: true} expect(17n).toBeLessThan(34n) + ✅ {pass: false} expect(34n).toBeLessThan(17n) + ✅ {pass: true} expect(34n).toBeGreaterThan(17n) + ✅ {pass: false} expect(17n).toBeGreaterThan(34n) + ✅ {pass: true} expect(17n).toBeLessThanOrEqual(34n) + ✅ {pass: false} expect(34n).toBeLessThanOrEqual(17n) + ✅ {pass: true} expect(34n).toBeGreaterThanOrEqual(17n) + ✅ {pass: false} expect(17n).toBeGreaterThanOrEqual(34n) + ✅ throws: [17n, 34n] + ✅ {pass: true} expect(-1).toBeLessThan(2n) + ✅ {pass: false} expect(2n).toBeLessThan(-1) + ✅ {pass: true} expect(2n).toBeGreaterThan(-1) + ✅ {pass: false} expect(-1).toBeGreaterThan(2n) + ✅ {pass: true} expect(-1).toBeLessThanOrEqual(2n) + ✅ {pass: false} expect(2n).toBeLessThanOrEqual(-1) + ✅ {pass: true} expect(2n).toBeGreaterThanOrEqual(-1) + ✅ {pass: false} expect(-1).toBeGreaterThanOrEqual(2n) + ✅ throws: [-1, 2n] + ✅ equal numbers: [1, 1] + ✅ equal numbers: [5e-324, 5e-324] + ✅ equal numbers: [1.7976931348623157e+308, 1.7976931348623157e+308] + ✅ equal numbers: [Infinity, Infinity] + ✅ equal numbers: [-Infinity, -Infinity] + ✅ equal numbers: [1, 1] + ✅ equal numbers: [9007199254740991, 9007199254740991] +.toContain(), .toContainEqual() + ✅ iterable + ✅ '[1, 2, 3, 4]' contains '1' + ✅ '["a", "b", "c", "d"]' contains '"a"' + ✅ '[undefined, null]' contains 'null' + ✅ '[undefined, null]' contains 'undefined' + ✅ '[Symbol(a)]' contains 'Symbol(a)' + ✅ '"abcdef"' contains '"abc"' + ✅ '"11112111"' contains '"2"' + ✅ 'Set {"abc", "def"}' contains '"abc"' + ✅ '[0, 1]' contains '1' + ✅ '[1n, 2n, 3n, 4n]' contains '1n' + ✅ '[1, 2, 3, 3n, 4]' contains '3n' + ✅ '[1, 2, 3]' does not contain '4' + ✅ '[null, undefined]' does not contain '1' + ✅ '[{}, []]' does not contain '[]' + ✅ '[{}, []]' does not contain '{}' + ✅ '[1n, 2n, 3n]' does not contain '3' + ✅ error cases + ✅ '[1, 2, 3, 4]' contains a value equal to '1' + ✅ '["a", "b", "c", "d"]' contains a value equal to '"a"' + ✅ '[undefined, null]' contains a value equal to 'null' + ✅ '[undefined, null]' contains a value equal to 'undefined' + ✅ '[Symbol(a)]' contains a value equal to 'Symbol(a)' + ✅ '[{"a": "b"}, {"a": "c"}]' contains a value equal to '{"a": "b"}' + ✅ 'Set {1, 2, 3, 4}' contains a value equal to '1' + ✅ '[0, 1]' contains a value equal to '1' + ✅ '[{"a": "b"}, {"a": "c"}]' does not contain a value equal to'{"a": "d"}' + ✅ error cases for toContainEqual +.toBeCloseTo + ✅ {pass: true} expect(0).toBeCloseTo(0) + ✅ {pass: true} expect(0).toBeCloseTo(0.001) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.229) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.226) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.225) + ✅ {pass: true} expect(1.23).toBeCloseTo(1.234) + ✅ {pass: true} expect(Infinity).toBeCloseTo(Infinity) + ✅ {pass: true} expect(-Infinity).toBeCloseTo(-Infinity) + ✅ {pass: false} expect(0).toBeCloseTo(0.01) + ✅ {pass: false} expect(1).toBeCloseTo(1.23) + ✅ {pass: false} expect(1.23).toBeCloseTo(1.2249999) + ✅ {pass: false} expect(Infinity).toBeCloseTo(-Infinity) + ✅ {pass: false} expect(Infinity).toBeCloseTo(1.23) + ✅ {pass: false} expect(-Infinity).toBeCloseTo(-1.23) + ✅ {pass: false} expect(3.141592e-7).toBeCloseTo(3e-7, 8) + ✅ {pass: false} expect(56789).toBeCloseTo(51234, -4) + ✅ {pass: true} expect(0).toBeCloseTo(0.1, 0) + ✅ {pass: true} expect(0).toBeCloseTo(0.0001, 3) + ✅ {pass: true} expect(0).toBeCloseTo(0.000004, 5) + ✅ {pass: true} expect(2.0000002).toBeCloseTo(2, 5) +.toBeCloseTo throws: Matcher error + ✅ promise empty isNot false received + ✅ promise empty isNot true expected + ✅ promise rejects isNot false expected + ✅ promise rejects isNot true received + ✅ promise resolves isNot false received + ✅ promise resolves isNot true expected +.toMatch() + ✅ {pass: true} expect(foo).toMatch(foo) + ✅ {pass: true} expect(Foo bar).toMatch(/^foo/i) + ✅ throws: [bar, foo] + ✅ throws: [bar, /foo/] + ✅ throws if non String actual value passed: [1, "foo"] + ✅ throws if non String actual value passed: [{}, "foo"] + ✅ throws if non String actual value passed: [[], "foo"] + ✅ throws if non String actual value passed: [true, "foo"] + ✅ throws if non String actual value passed: [/foo/i, "foo"] + ✅ throws if non String actual value passed: [[Function anonymous], "foo"] + ✅ throws if non String actual value passed: [undefined, "foo"] + ✅ throws if non String/RegExp expected value passed: ["foo", 1] + ✅ throws if non String/RegExp expected value passed: ["foo", {}] + ✅ throws if non String/RegExp expected value passed: ["foo", []] + ✅ throws if non String/RegExp expected value passed: ["foo", true] + ✅ throws if non String/RegExp expected value passed: ["foo", [Function anonymous]] + ✅ throws if non String/RegExp expected value passed: ["foo", undefined] + ✅ escapes strings properly + ✅ does not maintain RegExp state between calls +.toHaveLength + ✅ {pass: true} expect([1, 2]).toHaveLength(2) + ✅ {pass: true} expect([]).toHaveLength(0) + ✅ {pass: true} expect(["a", "b"]).toHaveLength(2) + ✅ {pass: true} expect("abc").toHaveLength(3) + ✅ {pass: true} expect("").toHaveLength(0) + ✅ {pass: true} expect([Function anonymous]).toHaveLength(0) + ✅ {pass: false} expect([1, 2]).toHaveLength(3) + ✅ {pass: false} expect([]).toHaveLength(1) + ✅ {pass: false} expect(["a", "b"]).toHaveLength(99) + ✅ {pass: false} expect("abc").toHaveLength(66) + ✅ {pass: false} expect("").toHaveLength(1) + ✅ error cases +.toHaveLength matcher error expected length + ✅ not number + ✅ number Infinity + ✅ number NaN + ✅ number float + ✅ number negative integer +.toHaveProperty() + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d', 1) + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d', 1) + ✅ {pass: true} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 1) + ✅ {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1', 2) + ✅ {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1', Any) + ✅ {pass: true} expect({"a": 0}).toHaveProperty('a', 0) + ✅ {pass: true} expect({"a": {"b": undefined}}).toHaveProperty('a.b', undefined) + ✅ {pass: true} expect({"a": {}}).toHaveProperty('a.b', undefined) + ✅ {pass: true} expect({"a": {"b": {"c": 5}}}).toHaveProperty('a.b', {"c": 5}) + ✅ {pass: true} expect({"property": 1}).toHaveProperty('property', 1) + ✅ {pass: true} expect({}).toHaveProperty('a', undefined) + ✅ {pass: true} expect({}).toHaveProperty('b', "b") + ✅ {pass: true} expect({}).toHaveProperty('setter', undefined) + ✅ {pass: true} expect({"val": true}).toHaveProperty('a', undefined) + ✅ {pass: true} expect({"val": true}).toHaveProperty('c', "c") + ✅ {pass: true} expect({"val": true}).toHaveProperty('val', true) + ✅ {pass: true} expect({"nodeName": "DIV"}).toHaveProperty('nodeType', 1) + ✅ {pass: true} expect("").toHaveProperty('length', 0) + ✅ {pass: true} expect([Function memoized]).toHaveProperty('memo', []) + ✅ {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.ttt.d', 1) + ✅ {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d', 2) + ✅ {pass: false} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 2) + ✅ {pass: false} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d', 2) + ✅ {pass: false} expect({"children": ["\"That cartoon\""], "props": null, "type": "p"}).toHaveProperty('children,0', "\"That cat cartoon\"") + ✅ {pass: false} expect({"children": ["Roses are red. +Violets are blue. +Testing with Jest is good for you."], "props": null, "type": "pre"}).toHaveProperty('children,0', "Roses are red, violets are blue. +Testing with Jest +Is good for you.") + ✅ {pass: false} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d', 2) + ✅ {pass: false} expect({"a": {"b": {"c": {}}}}).toHaveProperty('a.b.c.d', 1) + ✅ {pass: false} expect({"a": 1}).toHaveProperty('a.b.c.d', 5) + ✅ {pass: false} expect({}).toHaveProperty('a', "test") + ✅ {pass: false} expect({"a": {"b": 3}}).toHaveProperty('a.b', undefined) + ✅ {pass: false} expect(1).toHaveProperty('a.b.c', "test") + ✅ {pass: false} expect("abc").toHaveProperty('a.b.c', {"a": 5}) + ✅ {pass: false} expect({"a": {"b": {"c": 5}}}).toHaveProperty('a.b', {"c": 4}) + ✅ {pass: false} expect({}).toHaveProperty('a', "a") + ✅ {pass: false} expect({}).toHaveProperty('b', undefined) + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a.b.c.d') + ✅ {pass: true} expect({"a": {"b": {"c": {"d": 1}}}}).toHaveProperty('a,b,c,d') + ✅ {pass: true} expect({"a.b.c.d": 1}).toHaveProperty('a.b.c.d') + ✅ {pass: true} expect({"a": {"b": [1, 2, 3]}}).toHaveProperty('a,b,1') + ✅ {pass: true} expect({"a": 0}).toHaveProperty('a') + ✅ {pass: true} expect({"a": {"b": undefined}}).toHaveProperty('a.b') + ✅ {pass: false} expect({"a": {"b": {"c": {}}}}).toHaveProperty('a.b.c.d') + ✅ {pass: false} expect({"a": 1}).toHaveProperty('a.b.c.d') + ✅ {pass: false} expect({}).toHaveProperty('a') + ✅ {pass: false} expect(1).toHaveProperty('a.b.c') + ✅ {pass: false} expect("abc").toHaveProperty('a.b.c') + ✅ {pass: false} expect(false).toHaveProperty('key') + ✅ {pass: false} expect(0).toHaveProperty('key') + ✅ {pass: false} expect("").toHaveProperty('key') + ✅ {pass: false} expect(Symbol()).toHaveProperty('key') + ✅ {pass: false} expect({"key": 1}).toHaveProperty('not') + ✅ {error} expect(null).toHaveProperty('a.b') + ✅ {error} expect(undefined).toHaveProperty('a') + ✅ {error} expect({"a": {"b": {}}}).toHaveProperty('undefined') + ✅ {error} expect({"a": {"b": {}}}).toHaveProperty('null') + ✅ {error} expect({"a": {"b": {}}}).toHaveProperty('1') + ✅ {error} expect({}).toHaveProperty('') +toMatchObject() circular references simple circular references + ✅ {pass: true} expect({"a": "hello", "ref": [Circular]}).toMatchObject({}) + ✅ {pass: true} expect({"a": "hello", "ref": [Circular]}).toMatchObject({"a": "hello", "ref": [Circular]}) + ✅ {pass: false} expect({}).toMatchObject({"a": "hello", "ref": [Circular]}) + ✅ {pass: false} expect({"a": "hello", "ref": [Circular]}).toMatchObject({"a": "world", "ref": [Circular]}) + ✅ {pass: false} expect({"ref": "not a ref"}).toMatchObject({"a": "hello", "ref": [Circular]}) +toMatchObject() circular references transitive circular references + ✅ {pass: true} expect({"a": "hello", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({}) + ✅ {pass: true} expect({"a": "hello", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) + ✅ {pass: false} expect({}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) + ✅ {pass: false} expect({"a": "world", "nestedObj": {"parentObj": [Circular]}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) + ✅ {pass: false} expect({"nestedObj": {"parentObj": "not the parent ref"}}).toMatchObject({"a": "hello", "nestedObj": {"parentObj": [Circular]}}) +toMatchObject() + ✅ {pass: true} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b"}) + ✅ {pass: true} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b", "c": "d"}) + ✅ {pass: true} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"a": "b", "t": {"z": "z"}}) + ✅ {pass: true} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"t": {"x": {"r": "r"}}}) + ✅ {pass: true} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4, 5]}) + ✅ {pass: true} expect({"a": [3, 4, 5, "v"], "b": "b"}).toMatchObject({"a": [3, 4, 5, "v"]}) + ✅ {pass: true} expect({"a": 1, "c": 2}).toMatchObject({"a": Any}) + ✅ {pass: true} expect({"a": {"x": "x", "y": "y"}}).toMatchObject({"a": {"x": Any}}) + ✅ {pass: true} expect(Set {1, 2}).toMatchObject(Set {1, 2}) + ✅ {pass: true} expect(Set {1, 2}).toMatchObject(Set {2, 1}) + ✅ {pass: true} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-11-30T00:00:00.000Z) + ✅ {pass: true} expect({"a": 2015-11-30T00:00:00.000Z, "b": "b"}).toMatchObject({"a": 2015-11-30T00:00:00.000Z}) + ✅ {pass: true} expect({"a": null, "b": "b"}).toMatchObject({"a": null}) + ✅ {pass: true} expect({"a": undefined, "b": "b"}).toMatchObject({"a": undefined}) + ✅ {pass: true} expect({"a": [{"a": "a", "b": "b"}]}).toMatchObject({"a": [{"a": "a"}]}) + ✅ {pass: true} expect([1, 2]).toMatchObject([1, 2]) + ✅ {pass: true} expect({"a": undefined}).toMatchObject({"a": undefined}) + ✅ {pass: true} expect([]).toMatchObject([]) + ✅ {pass: true} expect([Error: foo]).toMatchObject([Error: foo]) + ✅ {pass: true} expect([Error: bar]).toMatchObject({"message": "bar"}) + ✅ {pass: true} expect({}).toMatchObject({"a": undefined, "b": "b"}) + ✅ {pass: true} expect({"a": "b"}).toMatchObject({"a": "b"}) + ✅ {pass: true} expect({"a": "b", "c": "d", Symbol(jest): "jest"}).toMatchObject({"a": "b", Symbol(jest): "jest"}) + ✅ {pass: true} expect({"a": "b", "c": "d", Symbol(jest): "jest"}).toMatchObject({"a": "b", "c": "d", Symbol(jest): "jest"}) + ✅ {pass: true} expect({}).toMatchObject({"a": undefined, "b": "b", "c": "c"}) + ✅ {pass: true} expect({}).toMatchObject({"d": 4}) + ✅ {pass: true} expect({"a": "b", "toString": [Function toString]}).toMatchObject({"toString": Any}) + ✅ {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"e": "b"}) + ✅ {pass: false} expect({"a": "b", "c": "d"}).toMatchObject({"a": "b!", "c": "d"}) + ✅ {pass: false} expect({"a": "a", "c": "d"}).toMatchObject({"a": Any}) + ✅ {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"a": "b", "t": {"z": [3]}}) + ✅ {pass: false} expect({"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}).toMatchObject({"t": {"l": {"r": "r"}}}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4, 5, 6]}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": [3, 4]}) + ✅ {pass: false} expect({"a": [3, 4, "v"], "b": "b"}).toMatchObject({"a": ["v"]}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": 4}}) + ✅ {pass: false} expect({"a": [3, 4, 5], "b": "b"}).toMatchObject({"a": {"b": Any}}) + ✅ {pass: false} expect([1, 2]).toMatchObject([1, 3]) + ✅ {pass: false} expect([0]).toMatchObject([-0]) + ✅ {pass: false} expect(Set {1, 2}).toMatchObject(Set {2}) + ✅ {pass: false} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-10-10T00:00:00.000Z) + ✅ {pass: false} expect({"a": 2015-11-30T00:00:00.000Z, "b": "b"}).toMatchObject({"a": 2015-10-10T00:00:00.000Z}) + ✅ {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": "4"}) + ✅ {pass: false} expect({"a": null, "b": "b"}).toMatchObject({"a": undefined}) + ✅ {pass: false} expect({"a": undefined}).toMatchObject({"a": null}) + ✅ {pass: false} expect({"a": [{"a": "a", "b": "b"}]}).toMatchObject({"a": [{"a": "c"}]}) + ✅ {pass: false} expect({"a": 1, "b": 1, "c": 1, "d": {"e": {"f": 555}}}).toMatchObject({"d": {"e": {"f": 222}}}) + ✅ {pass: false} expect({}).toMatchObject({"a": undefined}) + ✅ {pass: false} expect([1, 2, 3]).toMatchObject([2, 3, 1]) + ✅ {pass: false} expect([1, 2, 3]).toMatchObject([1, 2, 2]) + ✅ {pass: false} expect([Error: foo]).toMatchObject([Error: bar]) + ✅ {pass: false} expect({"a": "b"}).toMatchObject({"c": "d"}) + ✅ {pass: false} expect({"a": "b", "c": "d", Symbol(jest): "jest"}).toMatchObject({"a": "c", Symbol(jest): Any}) + ✅ {pass: false} expect({"a": "b"}).toMatchObject({"toString": Any}) + ✅ throws expect(null).toMatchObject({}) + ✅ throws expect(4).toMatchObject({}) + ✅ throws expect("44").toMatchObject({}) + ✅ throws expect(true).toMatchObject({}) + ✅ throws expect(undefined).toMatchObject({}) + ✅ throws expect({}).toMatchObject(null) + ✅ throws expect({}).toMatchObject(4) + ✅ throws expect({}).toMatchObject("some string") + ✅ throws expect({}).toMatchObject(true) + ✅ throws expect({}).toMatchObject(undefined) + ✅ does not match properties up in the prototype chain +``` +### ✅ packages/expect/src/__tests__/spyMatchers.test.ts +``` +toBeCalled + ✅ works only on spies or jest.fn + ✅ passes when called + ✅ .not passes when called + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message +toHaveBeenCalled + ✅ works only on spies or jest.fn + ✅ passes when called + ✅ .not passes when called + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message +toBeCalledTimes + ✅ .not works only on spies or jest.fn + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function called equal to expected times + ✅ .not passes if function called more than expected times + ✅ .not passes if function called less than expected times + ✅ includes the custom mock name in the error message +toHaveBeenCalledTimes + ✅ .not works only on spies or jest.fn + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function called equal to expected times + ✅ .not passes if function called more than expected times + ✅ .not passes if function called less than expected times + ✅ includes the custom mock name in the error message +lastCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +toHaveBeenLastCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +nthCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with three calls + ✅ positive throw matcher error for n that is not positive integer + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not integer + ✅ includes the custom mock name in the error message +toHaveBeenNthCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with three calls + ✅ positive throw matcher error for n that is not positive integer + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not integer + ✅ includes the custom mock name in the error message +toBeCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +toHaveBeenCalledWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with arguments that don't match + ✅ works with arguments that match + ✅ works with trailing undefined arguments + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects + ✅ works with many arguments + ✅ works with many arguments that don't match + ✅ includes the custom mock name in the error message +toReturn + ✅ .not works only on jest.fn + ✅ throw matcher error if received is spy + ✅ passes when returned + ✅ passes when undefined is returned + ✅ passes when at least one call does not throw + ✅ .not passes when not returned + ✅ .not passes when all calls throw + ✅ .not passes when a call throws undefined + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +toHaveReturned + ✅ .not works only on jest.fn + ✅ throw matcher error if received is spy + ✅ passes when returned + ✅ passes when undefined is returned + ✅ passes when at least one call does not throw + ✅ .not passes when not returned + ✅ .not passes when all calls throw + ✅ .not passes when a call throws undefined + ✅ fails with any argument passed + ✅ .not fails with any argument passed + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +toReturnTimes + ✅ throw matcher error if received is spy + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function returned equal to expected times + ✅ calls that return undefined are counted as returns + ✅ .not passes if function returned more than expected times + ✅ .not passes if function called less than expected times + ✅ calls that throw are not counted + ✅ calls that throw undefined are not counted + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +toHaveReturnedTimes + ✅ throw matcher error if received is spy + ✅ only accepts a number argument + ✅ .not only accepts a number argument + ✅ passes if function returned equal to expected times + ✅ calls that return undefined are counted as returns + ✅ .not passes if function returned more than expected times + ✅ .not passes if function called less than expected times + ✅ calls that throw are not counted + ✅ calls that throw undefined are not counted + ✅ includes the custom mock name in the error message + ✅ incomplete recursive calls are handled properly +lastReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +lastReturnedWith lastReturnedWith + ✅ works with three calls + ✅ incomplete recursive calls are handled properly +toHaveLastReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toHaveLastReturnedWith lastReturnedWith + ✅ works with three calls + ✅ incomplete recursive calls are handled properly +nthReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +nthReturnedWith nthReturnedWith + ✅ works with three calls + ✅ should replace 1st, 2nd, 3rd with first, second, third + ✅ positive throw matcher error for n that is not positive integer + ✅ should reject nth value greater than number of calls + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not number + ✅ incomplete recursive calls are handled properly +toHaveNthReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toHaveNthReturnedWith nthReturnedWith + ✅ works with three calls + ✅ should replace 1st, 2nd, 3rd with first, second, third + ✅ positive throw matcher error for n that is not positive integer + ✅ should reject nth value greater than number of calls + ✅ positive throw matcher error for n that is not integer + ✅ negative throw matcher error for n that is not number + ✅ incomplete recursive calls are handled properly +toReturnWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toReturnWith returnedWith + ✅ works with more calls than the limit + ✅ incomplete recursive calls are handled properly +toHaveReturnedWith + ✅ works only on spies or jest.fn + ✅ works when not called + ✅ works with no arguments + ✅ works with argument that does not match + ✅ works with argument that does match + ✅ works with undefined + ✅ works with Map + ✅ works with Set + ✅ works with Immutable.js objects directly created + ✅ works with Immutable.js objects indirectly created + ✅ a call that throws is not considered to have returned + ✅ a call that throws undefined is not considered to have returned + ✅ includes the custom mock name in the error message +toHaveReturnedWith returnedWith + ✅ works with more calls than the limit + ✅ incomplete recursive calls are handled properly +``` +### ✅ packages/expect/src/__tests__/stacktrace.test.ts +``` +✅ stack trace points to correct location when using matchers +✅ stack trace points to correct location when using nested matchers +✅ stack trace points to correct location when throwing from a custom matcher +``` +### ✅ packages/expect/src/__tests__/symbolInObjects.test.ts +``` +Symbol in objects + ✅ should compare objects with Symbol keys + ✅ should compare objects with mixed keys and Symbol + ✅ should compare objects with different Symbol keys +``` +### ✅ packages/expect/src/__tests__/toEqual-dom.test.ts +``` +toEqual duck type Text + ✅ isNot false + ✅ isNot true +toEqual duck type Element + ✅ isNot false + ✅ isNot true +toEqual duck type Fragment + ✅ isNot false + ✅ isNot true +toEqual document createTextNode + ✅ isNot false + ✅ isNot true +toEqual document createElement + ✅ isNot false + ✅ isNot true +toEqual document createDocumentFragment + ✅ isNot false + ✅ isNot true +``` +### ✅ packages/expect/src/__tests__/toThrowMatchers.test.ts +``` +toThrowError + ✅ to throw or not to throw + ✅ invalid arguments + ✅ invalid actual +toThrowError substring + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ properly escapes strings when matching against errors + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrowError regexp + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrowError error class + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match (error) + ✅ threw, but class did not match (non-error falsey) + ✅ threw, but class should not match (error) + ✅ threw, but class should not match (error subclass) + ✅ threw, but class should not match (error subsubclass) +toThrowError error-message pass + ✅ isNot false + ✅ isNot true +toThrowError error-message fail + ✅ isNot false + ✅ isNot true + ✅ multiline diff highlight incorrect expected space +toThrowError asymmetric any-Class pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric any-Class fail + ✅ isNot false + ✅ isNot true +toThrowError asymmetric anything pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric anything fail + ✅ isNot false + ✅ isNot true +toThrowError asymmetric no-symbol pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric no-symbol fail + ✅ isNot false + ✅ isNot true +toThrowError asymmetric objectContaining pass + ✅ isNot false + ✅ isNot true +toThrowError asymmetric objectContaining fail + ✅ isNot false + ✅ isNot true +toThrowError promise/async throws if Error-like object is returned + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match + ✅ threw, but should not have +toThrowError expected is undefined + ✅ threw, but should not have (non-error falsey) +toThrow + ✅ to throw or not to throw + ✅ invalid arguments + ✅ invalid actual +toThrow substring + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ properly escapes strings when matching against errors + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrow regexp + ✅ passes + ✅ did not throw at all + ✅ threw, but message did not match (error) + ✅ threw, but message did not match (non-error falsey) + ✅ threw, but message should not match (error) + ✅ threw, but message should not match (non-error truthy) +toThrow error class + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match (error) + ✅ threw, but class did not match (non-error falsey) + ✅ threw, but class should not match (error) + ✅ threw, but class should not match (error subclass) + ✅ threw, but class should not match (error subsubclass) +toThrow error-message pass + ✅ isNot false + ✅ isNot true +toThrow error-message fail + ✅ isNot false + ✅ isNot true + ✅ multiline diff highlight incorrect expected space +toThrow asymmetric any-Class pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric any-Class fail + ✅ isNot false + ✅ isNot true +toThrow asymmetric anything pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric anything fail + ✅ isNot false + ✅ isNot true +toThrow asymmetric no-symbol pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric no-symbol fail + ✅ isNot false + ✅ isNot true +toThrow asymmetric objectContaining pass + ✅ isNot false + ✅ isNot true +toThrow asymmetric objectContaining fail + ✅ isNot false + ✅ isNot true +toThrow promise/async throws if Error-like object is returned + ✅ passes + ✅ did not throw at all + ✅ threw, but class did not match + ✅ threw, but should not have +toThrow expected is undefined + ✅ threw, but should not have (non-error falsey) +``` +### ✅ packages/expect/src/__tests__/utils.test.ts +``` +getPath() + ✅ property exists + ✅ property doesnt exist + ✅ property exist but undefined + ✅ property is a getter on class instance + ✅ property is inherited + ✅ path breaks + ✅ empty object at the end +getObjectSubset + ✅ expect(getObjectSubset({"a": "b", "c": "d"}, {"a": "d"})).toEqual({"a": "b"}) + ✅ expect(getObjectSubset({"a": [1, 2], "b": "b"}, {"a": [3, 4]})).toEqual({"a": [1, 2]}) + ✅ expect(getObjectSubset([{"a": "b", "c": "d"}], [{"a": "z"}])).toEqual([{"a": "b"}]) + ✅ expect(getObjectSubset([1, 2], [1, 2, 3])).toEqual([1, 2]) + ✅ expect(getObjectSubset({"a": [1]}, {"a": [1, 2]})).toEqual({"a": [1]}) + ✅ expect(getObjectSubset(2015-11-30T00:00:00.000Z, 2016-12-30T00:00:00.000Z)).toEqual(2015-11-30T00:00:00.000Z) +getObjectSubset returns the object instance if the subset has no extra properties + ✅ Date +getObjectSubset returns the subset instance if its property values are equal + ✅ Object +getObjectSubset returns the subset instance if its property values are equal Uint8Array + ✅ expected + ✅ received +getObjectSubset calculating subsets of objects with circular references + ✅ simple circular references + ✅ transitive circular references +emptyObject() + ✅ matches an empty object + ✅ does not match an object with keys + ✅ does not match a non-object +subsetEquality() + ✅ matching object returns true + ✅ object without keys is undefined + ✅ objects to not match + ✅ null does not return errors + ✅ undefined does not return errors +subsetEquality() matching subsets with circular references + ✅ simple circular references + ✅ referenced object on same level should not regarded as circular reference + ✅ transitive circular references +iterableEquality + ✅ returns true when given circular iterators + ✅ returns true when given circular Set + ✅ returns true when given nested Sets + ✅ returns false when given inequal set within a set + ✅ returns false when given inequal map within a set + ✅ returns false when given inequal set within a map + ✅ returns true when given circular Set shape + ✅ returns true when given circular key in Map + ✅ returns true when given nested Maps + ✅ returns true when given circular key and value in Map + ✅ returns true when given circular value in Map +``` +### ✅ packages/jest-circus/src/__tests__/afterAll.test.ts +``` +✅ tests are not marked done until their parent afterAll runs +✅ describe block cannot have hooks and no tests +✅ describe block _can_ have hooks if a child describe block has tests +✅ describe block hooks must not run if describe block is skipped +✅ child tests marked with todo should not run if describe block is skipped +✅ child tests marked with only should not run if describe block is skipped +``` +### ✅ packages/jest-circus/src/__tests__/baseTest.test.ts +``` +✅ simple test +✅ failures +``` +### ✅ packages/jest-circus/src/__tests__/circusItTestError.test.ts +``` +test/it error throwing + ✅ it doesn't throw an error with valid arguments + ✅ it throws error with missing callback function + ✅ it throws an error when first argument isn't a string + ✅ it throws an error when callback function is not a function + ✅ test doesn't throw an error with valid arguments + ✅ test throws error with missing callback function + ✅ test throws an error when first argument isn't a string + ✅ test throws an error when callback function is not a function +``` +### ✅ packages/jest-circus/src/__tests__/circusItTodoTestError.test.ts +``` +test/it.todo error throwing + ✅ todo throws error when given no arguments + ✅ todo throws error when given more than one argument + ✅ todo throws error when given none string description +``` +### ✅ packages/jest-circus/src/__tests__/hooks.test.ts +``` +✅ beforeEach is executed before each test in current/child describe blocks +✅ multiple before each hooks in one describe are executed in the right order +✅ beforeAll is exectued correctly +``` +### ✅ packages/jest-circus/src/__tests__/hooksError.test.ts +``` +beforeEach hooks error throwing + ✅ beforeEach throws an error when "String" is provided as a first argument to it + ✅ beforeEach throws an error when 1 is provided as a first argument to it + ✅ beforeEach throws an error when [] is provided as a first argument to it + ✅ beforeEach throws an error when {} is provided as a first argument to it + ✅ beforeEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeEach throws an error when true is provided as a first argument to it + ✅ beforeEach throws an error when null is provided as a first argument to it + ✅ beforeEach throws an error when undefined is provided as a first argument to it +beforeAll hooks error throwing + ✅ beforeAll throws an error when "String" is provided as a first argument to it + ✅ beforeAll throws an error when 1 is provided as a first argument to it + ✅ beforeAll throws an error when [] is provided as a first argument to it + ✅ beforeAll throws an error when {} is provided as a first argument to it + ✅ beforeAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeAll throws an error when true is provided as a first argument to it + ✅ beforeAll throws an error when null is provided as a first argument to it + ✅ beforeAll throws an error when undefined is provided as a first argument to it +afterEach hooks error throwing + ✅ afterEach throws an error when "String" is provided as a first argument to it + ✅ afterEach throws an error when 1 is provided as a first argument to it + ✅ afterEach throws an error when [] is provided as a first argument to it + ✅ afterEach throws an error when {} is provided as a first argument to it + ✅ afterEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterEach throws an error when true is provided as a first argument to it + ✅ afterEach throws an error when null is provided as a first argument to it + ✅ afterEach throws an error when undefined is provided as a first argument to it +afterAll hooks error throwing + ✅ afterAll throws an error when "String" is provided as a first argument to it + ✅ afterAll throws an error when 1 is provided as a first argument to it + ✅ afterAll throws an error when [] is provided as a first argument to it + ✅ afterAll throws an error when {} is provided as a first argument to it + ✅ afterAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterAll throws an error when true is provided as a first argument to it + ✅ afterAll throws an error when null is provided as a first argument to it + ✅ afterAll throws an error when undefined is provided as a first argument to it +``` +### ✅ packages/jest-cli/src/__tests__/cli/args.test.ts +``` +check + ✅ returns true if the arguments are valid + ✅ raises an exception if runInBand and maxWorkers are both specified + ✅ raises an exception if onlyChanged and watchAll are both specified + ✅ raises an exception if onlyFailures and watchAll are both specified + ✅ raises an exception when lastCommit and watchAll are both specified + ✅ raises an exception if findRelatedTests is specified with no file paths + ✅ raises an exception if maxWorkers is specified with no number + ✅ allows maxWorkers to be a % + ✅ allows using "js" file for --config option + ✅ allows using "ts" file for --config option + ✅ allows using "mjs" file for --config option + ✅ allows using "cjs" file for --config option + ✅ allows using "json" file for --config option + ✅ raises an exception if selectProjects is not provided any project names + ✅ raises an exception if config is not a valid JSON string + ✅ raises an exception if config is not a supported file type +buildArgv + ✅ should return only camelcased args +``` +### ✅ packages/jest-cli/src/init/__tests__/init.test.js +``` +init project with package.json and no jest config all questions answered with answer: "No" + ✅ should return the default configuration (an empty config) + ✅ should generate empty config with mjs extension +init project with package.json and no jest config some questions answered with answer: "Yes" + ✅ should create configuration for {clearMocks: true} + ✅ should create configuration for {coverage: true} + ✅ should create configuration for {coverageProvider: "babel"} + ✅ should create configuration for {coverageProvider: "v8"} + ✅ should create configuration for {environment: "jsdom"} + ✅ should create configuration for {environment: "node"} + ✅ should create package.json with configured test command when {scripts: true} +init no package json + ✅ should throw an error if there is no package.json file +init has-jest-config-file-js ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-ts ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-mjs ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-cjs ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has-jest-config-file-json ask the user whether to override config or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init project using jest.config.ts ask the user whether he wants to use Typescript or not + ✅ user answered with "Yes" + ✅ user answered with "No" +init has jest config in package.json + ✅ should ask the user whether to override config or not +init already has "jest" in packageJson.scripts.test + ✅ should not ask "test script question" +``` +### ✅ packages/jest-cli/src/init/__tests__/modifyPackageJson.test.ts +``` +✅ should remove jest config if exists +✅ should add test script when there are no scripts +✅ should add test script when there are scripts +✅ should not add test script when { shouldModifyScripts: false } +``` +### ✅ packages/jest-config/src/__tests__/Defaults.test.ts +``` +✅ get configuration defaults +``` +### ✅ packages/jest-config/src/__tests__/getMaxWorkers.test.ts +``` +getMaxWorkers + ✅ Returns 1 when runInBand + ✅ Returns 1 when the OS CPUs are not available + ✅ Returns the `maxWorkers` when specified + ✅ Returns based on the number of cpus +getMaxWorkers % based + ✅ 50% = 2 workers + ✅ < 0 workers should become 1 + ✅ 0% shouldn't break +``` +### ✅ packages/jest-config/src/__tests__/normalize.test.js +``` +✅ picks a name based on the rootDir +✅ keeps custom project name based on the projects rootDir +✅ keeps custom names based on the rootDir +✅ minimal config is stable across runs +✅ sets coverageReporters correctly when argv.json is set +rootDir + ✅ throws if the options is missing a rootDir property +automock + ✅ falsy automock is not overwritten +collectCoverageOnlyFrom + ✅ normalizes all paths relative to rootDir + ✅ does not change absolute paths + ✅ substitutes tokens +collectCoverageFrom + ✅ substitutes tokens +findRelatedTests + ✅ it generates --coverageCoverageFrom patterns when needed +roots + ✅ normalizes all paths relative to rootDir + ✅ does not change absolute paths + ✅ substitutes tokens +transform + ✅ normalizes the path + ✅ pulls in config if it's passed as an array, and defaults to empty object +haste + ✅ normalizes the path for hasteImplModulePath +setupFilesAfterEnv + ✅ normalizes the path according to rootDir + ✅ does not change absolute paths + ✅ substitutes tokens +setupTestFrameworkScriptFile + ✅ logs a deprecation warning when `setupTestFrameworkScriptFile` is used + ✅ logs an error when `setupTestFrameworkScriptFile` and `setupFilesAfterEnv` are used +coveragePathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +watchPathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +testPathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +modulePathIgnorePatterns + ✅ does not normalize paths relative to rootDir + ✅ does not normalize trailing slashes + ✅ substitutes tokens +testRunner + ✅ defaults to Circus + ✅ resolves jasmine + ✅ is overwritten by argv +coverageDirectory + ✅ defaults to /coverage +testEnvironment + ✅ resolves to an environment and prefers jest-environment-`name` + ✅ throws on invalid environment names + ✅ works with rootDir +babel-jest + ✅ correctly identifies and uses babel-jest + ✅ uses babel-jest if babel-jest is explicitly specified in a custom transform options +Upgrade help + ✅ logs a warning when `scriptPreprocessor` and/or `preprocessorIgnorePatterns` are used +testRegex + ✅ testRegex empty string is mapped to empty array + ✅ testRegex string is mapped to an array + ✅ testRegex array is preserved +testMatch + ✅ testMatch default not applied if testRegex is set + ✅ testRegex default not applied if testMatch is set + ✅ throws if testRegex and testMatch are both specified + ✅ normalizes testMatch +moduleDirectories + ✅ defaults to node_modules + ✅ normalizes moduleDirectories +preset + ✅ throws when preset not found + ✅ throws when module was found but no "jest-preset.js" or "jest-preset.json" files + ✅ throws when a dependency is missing in the preset + ✅ throws when preset is invalid + ✅ throws when preset evaluation throws type error + ✅ works with "react-native" + ✅ searches for .json and .js preset files + ✅ merges with options + ✅ merges with options and moduleNameMapper preset is overridden by options + ✅ merges with options and transform preset is overridden by options + ✅ extracts setupFilesAfterEnv from preset +preset with globals + ✅ should merge the globals preset correctly +preset without setupFiles + ✅ should normalize setupFiles correctly +preset without setupFilesAfterEnv + ✅ should normalize setupFilesAfterEnv correctly +runner + ✅ defaults to `jest-runner` + ✅ resolves to runners that do not have the prefix + ✅ resolves to runners and prefers jest-runner-`name` + ✅ throw error when a runner is not found +watchPlugins + ✅ defaults to undefined + ✅ resolves to watch plugins and prefers jest-watch-`name` + ✅ resolves watch plugins that do not have the prefix + ✅ normalizes multiple watchPlugins + ✅ throw error when a watch plugin is not found +testPathPattern + ✅ defaults to empty + ✅ joins multiple --testPathPatterns and + ✅ gives precedence to --all +testPathPattern --testPathPattern + ✅ uses --testPathPattern if set + ✅ ignores invalid regular expressions and logs a warning + ✅ joins multiple --testPathPattern if set +testPathPattern --testPathPattern posix + ✅ should not escape the pattern +testPathPattern --testPathPattern win32 + ✅ preserves any use of "\" + ✅ replaces POSIX path separators + ✅ replaces POSIX paths in multiple args + ✅ coerces all patterns to strings +testPathPattern + ✅ uses if set + ✅ ignores invalid regular expressions and logs a warning + ✅ joins multiple if set +testPathPattern posix + ✅ should not escape the pattern +testPathPattern win32 + ✅ preserves any use of "\" + ✅ replaces POSIX path separators + ✅ replaces POSIX paths in multiple args + ✅ coerces all patterns to strings +moduleFileExtensions + ✅ defaults to something useful + ✅ throws if missing `js` but using jest-runner + ✅ does not throw if missing `js` with a custom runner +cwd + ✅ is set to process.cwd + ✅ is not lost if the config has its own cwd property +Defaults + ✅ should be accepted by normalize +displayName + ✅ should throw an error when displayName is is an empty object + ✅ should throw an error when displayName is missing color + ✅ should throw an error when displayName is missing name + ✅ should throw an error when displayName is using invalid values + ✅ generates a default color for the runner undefined + ✅ generates a default color for the runner jest-runner + ✅ generates a default color for the runner jest-runner-eslint + ✅ generates a default color for the runner jest-runner-tslint + ✅ generates a default color for the runner jest-runner-tsc +testTimeout + ✅ should return timeout value if defined + ✅ should throw an error if timeout is a negative number +extensionsToTreatAsEsm + ✅ should pass valid config through + ✅ should enforce leading dots + ✅ throws on .js + ✅ throws on .mjs + ✅ throws on .cjs +``` +### ✅ packages/jest-config/src/__tests__/readConfig.test.ts +``` +✅ readConfig() throws when an object is passed without a file path +``` +### ✅ packages/jest-config/src/__tests__/readConfigs.test.ts +``` +✅ readConfigs() throws when called without project paths +✅ readConfigs() loads async config file +✅ readConfigs() reject if async was rejected +``` +### ✅ packages/jest-config/src/__tests__/resolveConfigPath.test.ts +``` +Resolve config path .js + ✅ file path with ".js" + ✅ directory path with ".js" +Resolve config path .ts + ✅ file path with ".ts" + ✅ directory path with ".ts" +Resolve config path .mjs + ✅ file path with ".mjs" + ✅ directory path with ".mjs" +Resolve config path .cjs + ✅ file path with ".cjs" + ✅ directory path with ".cjs" +Resolve config path .json + ✅ file path with ".json" + ✅ directory path with ".json" +``` +### ✅ packages/jest-config/src/__tests__/setFromArgv.test.ts +``` +✅ maps special values to valid options +✅ maps regular values to themselves +✅ works with string objects +✅ explicit flags override those from --config +``` +### ✅ packages/jest-config/src/__tests__/validatePattern.test.ts +``` +validate pattern function + ✅ without passed args returns true + ✅ returns true for empty pattern + ✅ returns true for valid pattern + ✅ returns false for invalid pattern +``` +### ✅ packages/jest-console/src/__tests__/bufferedConsole.test.ts +``` +CustomConsole assert + ✅ do not log when the assertion is truthy + ✅ do not log when the assertion is truthy and there is a message + ✅ log the assertion error when the assertion is falsy + ✅ log the assertion error when the assertion is falsy with another message argument +CustomConsole count + ✅ count using the default counter + ✅ count using the a labeled counter + ✅ countReset restarts default counter + ✅ countReset restarts custom counter +CustomConsole group + ✅ group without label + ✅ group with label + ✅ groupEnd remove the indentation of the current group + ✅ groupEnd can not remove the indentation below the starting point +CustomConsole time + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer +CustomConsole dir + ✅ should print the deepest value +CustomConsole timeLog + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer + ✅ default timer with data + ✅ custom timer with data +CustomConsole console + ✅ should be able to initialize console instance +``` +### ✅ packages/jest-console/src/__tests__/CustomConsole.test.ts +``` +CustomConsole log + ✅ should print to stdout +CustomConsole error + ✅ should print to stderr +CustomConsole warn + ✅ should print to stderr +CustomConsole assert + ✅ do not log when the assertion is truthy + ✅ do not log when the assertion is truthy and there is a message + ✅ log the assertion error when the assertion is falsy + ✅ log the assertion error when the assertion is falsy with another message argument +CustomConsole count + ✅ count using the default counter + ✅ count using the a labeled counter + ✅ countReset restarts default counter + ✅ countReset restarts custom counter +CustomConsole group + ✅ group without label + ✅ group with label + ✅ groupEnd remove the indentation of the current group + ✅ groupEnd can not remove the indentation below the starting point +CustomConsole time + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer +CustomConsole dir + ✅ should print the deepest value +CustomConsole timeLog + ✅ should return the time between time() and timeEnd() on default timer + ✅ should return the time between time() and timeEnd() on custom timer + ✅ default timer with data + ✅ custom timer with data +CustomConsole console + ✅ should be able to initialize console instance +``` +### ✅ packages/jest-console/src/__tests__/getConsoleOutput.test.ts +``` +getConsoleOutput + ✅ takes noStackTrace and pass it on for assert + ✅ takes noStackTrace and pass it on for count + ✅ takes noStackTrace and pass it on for debug + ✅ takes noStackTrace and pass it on for dir + ✅ takes noStackTrace and pass it on for dirxml + ✅ takes noStackTrace and pass it on for error + ✅ takes noStackTrace and pass it on for group + ✅ takes noStackTrace and pass it on for groupCollapsed + ✅ takes noStackTrace and pass it on for info + ✅ takes noStackTrace and pass it on for log + ✅ takes noStackTrace and pass it on for time + ✅ takes noStackTrace and pass it on for warn +``` +### ✅ packages/jest-core/src/__tests__/FailedTestsCache.test.js +``` +FailedTestsCache + ✅ should filter tests +``` +### ✅ packages/jest-core/src/__tests__/getNoTestsFoundMessage.test.js +``` +getNoTestsFoundMessage + ✅ returns correct message when monitoring only failures + ✅ returns correct message when monitoring only changed + ✅ returns correct message with verbose option + ✅ returns correct message without options + ✅ returns correct message with passWithNoTests +``` +### ✅ packages/jest-core/src/__tests__/globals.test.ts +``` +Common globals + ✅ check process +``` +### ✅ packages/jest-core/src/__tests__/runJest.test.js +``` +runJest + ✅ when watch is set then exit process + ✅ when watch is set then an error message is printed +``` +### ✅ packages/jest-core/src/__tests__/SearchSource.test.ts +``` +SearchSource isTestFilePath + ✅ supports ../ paths and unix separators via testRegex + ✅ supports unix separators + ✅ supports win32 separators +SearchSource testPathsMatching + ✅ finds tests matching a pattern via testRegex + ✅ finds tests matching a pattern via testMatch + ✅ finds tests matching a JS regex pattern + ✅ finds tests matching a JS glob pattern + ✅ finds tests matching a JS with overriding glob patterns + ✅ finds tests with default file extensions using testRegex + ✅ finds tests with default file extensions using testMatch + ✅ finds tests with parentheses in their rootDir when using testMatch + ✅ finds tests with similar but custom file extensions + ✅ finds tests with totally custom foobar file extensions + ✅ finds tests with many kinds of file extensions + ✅ finds tests using a regex only + ✅ finds tests using a glob only +SearchSource findRelatedTests + ✅ makes sure a file is related to itself + ✅ finds tests that depend directly on the path + ✅ excludes untested files from coverage +SearchSource findRelatedTestsFromPattern + ✅ returns empty search result for empty input + ✅ returns empty search result for invalid input + ✅ returns empty search result if no related tests were found + ✅ finds tests for a single file + ✅ finds tests for multiple files + ✅ does not mistake roots folders with prefix names +SearchSource findRelatedSourcesFromTestsInChangedFiles + ✅ return empty set if no SCM + ✅ return sources required by tests +``` +### ✅ packages/jest-core/src/__tests__/SnapshotInteractiveMode.test.js +``` +SnapshotInteractiveMode + ✅ is inactive at construction + ✅ call to run process the first file + ✅ call to abort + ✅ call to reset + ✅ press Q or ESC triggers an abort + ✅ press ENTER trigger a run + ✅ skip 1 test, then restart + ✅ skip 1 test, then quit + ✅ update 1 test, then finish and return + ✅ skip 2 tests, then finish and restart + ✅ update 2 tests, then finish and return + ✅ update 1 test, skip 1 test, then finish and restart + ✅ skip 1 test, update 1 test, then finish and restart +``` +### ✅ packages/jest-core/src/__tests__/TestScheduler.test.js +``` +✅ config for reporters supports `default` +✅ .addReporter() .removeReporter() +✅ schedule tests run in parallel per default +✅ schedule tests run in serial if the runner flags them +✅ should bail after `n` failures +✅ should not bail if less than `n` failures +✅ should set runInBand to run in serial +✅ should set runInBand to not run in serial +``` +### ✅ packages/jest-core/src/__tests__/testSchedulerHelper.test.js +``` +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return false for runInBand mode +✅ shouldRunInBand() - should return true for runInBand mode +``` +### ✅ packages/jest-core/src/__tests__/watch.test.js +``` +Watch mode flows + ✅ Correctly passing test path pattern + ✅ Correctly passing test name pattern + ✅ Runs Jest once by default and shows usage + ✅ Runs Jest in a non-interactive environment not showing usage + ✅ resolves relative to the package root + ✅ shows prompts for WatchPlugins in alphabetical order + ✅ shows update snapshot prompt (without interactive) + ✅ shows update snapshot prompt (with interactive) + ✅ allows WatchPlugins to hook into JestHook + ✅ allows WatchPlugins to override eligible internal plugins + ✅ allows WatchPlugins to be configured + ✅ allows WatchPlugins to hook into file system changes + ✅ makes watch plugin initialization errors look nice + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ allows WatchPlugins to modify only white-listed global config keys + ✅ triggers enter on a WatchPlugin when its key is pressed + ✅ prevents Jest from handling keys when active and returns control when end is called + ✅ Pressing "o" runs test in "only changed files" mode + ✅ Pressing "a" runs test in "watch all" mode + ✅ Pressing "ENTER" reruns the tests + ✅ Pressing "t" reruns the tests in "test name pattern" mode + ✅ Pressing "p" reruns the tests in "filename pattern" mode + ✅ Can combine "p" and "t" filters + ✅ Pressing "u" reruns the tests in "update snapshot" mode + ✅ passWithNoTest should be set to true in watch mode + ✅ shows the correct usage for the f key in "only failed tests" mode +Watch mode flows when dealing with potential watch plugin key conflicts + ✅ forbids WatchPlugins overriding reserved internal plugins + ✅ forbids WatchPlugins overriding reserved internal plugins + ✅ forbids WatchPlugins overriding reserved internal plugins + ✅ allows WatchPlugins to override non-reserved internal plugins + ✅ allows WatchPlugins to override non-reserved internal plugins + ✅ forbids third-party WatchPlugins overriding each other +``` +### ✅ packages/jest-core/src/__tests__/watchFileChanges.test.ts +``` +Watch mode flows with changed files + ✅ should correct require new files without legacy cache +``` +### ✅ packages/jest-core/src/__tests__/watchFilenamePatternMode.test.js +``` +Watch mode flows + ✅ Pressing "P" enters pattern mode + ✅ Pressing "c" clears the filters +``` +### ✅ packages/jest-core/src/__tests__/watchTestNamePatternMode.test.js +``` +Watch mode flows + ✅ Pressing "T" enters pattern mode +``` +### ✅ packages/jest-core/src/lib/__tests__/isValidPath.test.ts +``` +✅ is valid when it is a file inside roots +✅ is not valid when it is a snapshot file +✅ is not valid when it is a file in the coverage dir +``` +### ✅ packages/jest-core/src/lib/__tests__/logDebugMessages.test.ts +``` +✅ prints the jest version +✅ prints the test framework name +✅ prints the config object +``` +### ✅ packages/jest-create-cache-key-function/src/__tests__/index.test.ts +``` +✅ creation of a cache key +``` +### ✅ packages/jest-diff/src/__tests__/diff.test.ts +``` +different types + ✅ '1' and 'a' + ✅ '[object Object]' and 'a' + ✅ '' and '2' + ✅ 'null' and 'undefined' + ✅ '() => {}' and '3' +no visual difference + ✅ '"a"' and '"a"' + ✅ '{}' and '{}' + ✅ '[]' and '[]' + ✅ '[1,2]' and '[1,2]' + ✅ '11' and '11' + ✅ 'null' and 'null' + ✅ 'null' and 'null' + ✅ 'undefined' and 'undefined' + ✅ 'null' and 'null' + ✅ 'undefined' and 'undefined' + ✅ 'false' and 'false' + ✅ '{"a":1}' and '{"a":1}' + ✅ '{"a":{"b":5}}' and '{"a":{"b":5}}' + ✅ Map key order should be irrelevant + ✅ Set value order should be irrelevant +✅ oneline strings +✅ numbers +✅ -0 and 0 +✅ booleans +✅ collapses big diffs to patch format +falls back to not call toJSON if serialization has no differences + ✅ but then objects have differences + ✅ and then objects have no differences +falls back to not call toJSON if it throws + ✅ and then objects have differences + ✅ and then objects have no differences +multiline strings + ✅ (unexpanded) + ✅ (expanded) +objects + ✅ (unexpanded) + ✅ (expanded) +multiline string non-snapshot + ✅ (unexpanded) + ✅ (expanded) +multiline string snapshot + ✅ (unexpanded) + ✅ (expanded) +React elements + ✅ (unexpanded) + ✅ (expanded) +multiline string as value of object property (non-snapshot) + ✅ (unexpanded) + ✅ (expanded) +multiline string as value of object property (snapshot) + ✅ (unexpanded) + ✅ (expanded) +indentation in JavaScript structures from less to more + ✅ (unexpanded) + ✅ (expanded) +indentation in JavaScript structures from more to less + ✅ (unexpanded) + ✅ (expanded) +color of text + ✅ (expanded) + ✅ (unexpanded) +indentation in React elements (non-snapshot) from less to more + ✅ (unexpanded) + ✅ (expanded) +indentation in React elements (non-snapshot) from more to less + ✅ (unexpanded) + ✅ (expanded) +indentation in React elements (snapshot) from less to more + ✅ (unexpanded) + ✅ (expanded) +indentation in React elements (snapshot) from more to less + ✅ (unexpanded) + ✅ (expanded) +outer React element (non-snapshot) from less to more + ✅ (unexpanded) + ✅ (expanded) +outer React element (non-snapshot) from more to less + ✅ (unexpanded) + ✅ (expanded) +trailing newline in multiline string not enclosed in quotes from less to more + ✅ (unexpanded) + ✅ (expanded) +trailing newline in multiline string not enclosed in quotes from more to less + ✅ (unexpanded) + ✅ (expanded) +context + ✅ number of lines: -1 (5 default) + ✅ number of lines: 0 + ✅ number of lines: 1 + ✅ number of lines: 2 + ✅ number of lines: 3.1 (5 default) + ✅ number of lines: undefined (5 default) +diffLinesUnified edge cases + ✅ a empty string b empty string + ✅ a empty string b one line + ✅ a multiple lines b empty string + ✅ a one line b multiple lines +diffLinesUnified2 edge cases + ✅ a empty string b empty string + ✅ a empty string b one line + ✅ a multiple lines b empty string + ✅ a one line b multiple lines +diffLinesUnified2 edge cases lengths not equal + ✅ a + ✅ b +diffStringsUnified edge cases + ✅ empty both a and b + ✅ empty only a + ✅ empty only b + ✅ equal both non-empty + ✅ multiline has no common after clean up chaff + ✅ one-line has no common after clean up chaff +options 7980 + ✅ diff + ✅ diffStringsUnified +options change indicators + ✅ diff +options change color + ✅ diffStringsUnified + ✅ no diff +options common + ✅ diff + ✅ no diff +options includeChangeCounts false + ✅ diffLinesUnified + ✅ diffStringsUnified +options includeChangeCounts true padding + ✅ diffLinesUnified a has 2 digits + ✅ diffLinesUnified b has 2 digits + ✅ diffStringsUnified +options omitAnnotationLines true + ✅ diff + ✅ diffStringsUnified and includeChangeCounts true + ✅ diffStringsUnified empty strings +options trailingSpaceFormatter + ✅ diffDefault default no color + ✅ diffDefault middle dot + ✅ diffDefault yellowish common +options emptyFirstOrLastLinePlaceholder default empty string + ✅ diffDefault + ✅ diffStringsUnified +``` +### ✅ packages/jest-diff/src/__tests__/diffStringsRaw.test.ts +``` +diffStringsRaw + ✅ one-line with cleanup + ✅ one-line without cleanup +``` +### ✅ packages/jest-diff/src/__tests__/getAlignedDiffs.test.ts +``` +getAlignedDiffs lines + ✅ change preceding and following common + ✅ common preceding and following change + ✅ common at end when both current change lines are empty + ✅ common between delete and insert + ✅ common between insert and delete +getAlignedDiffs newline + ✅ delete only + ✅ insert only + ✅ delete with adjacent change + ✅ insert with adjacent changes + ✅ change from space + ✅ change to space +getAlignedDiffs substrings first + ✅ common when both current change lines are empty + ✅ common when either current change line is non-empty + ✅ delete completes the current line + ✅ insert completes the current line +getAlignedDiffs substrings middle + ✅ is empty in delete between common + ✅ is empty in insert at start + ✅ is non-empty in delete at end + ✅ is non-empty in insert between common +getAlignedDiffs substrings last + ✅ is empty in delete at end + ✅ is empty in insert at end + ✅ is non-empty in common not at end +getAlignedDiffs strings + ✅ change at start and delete or insert at end + ✅ delete or insert at start and change at end +``` +### ✅ packages/jest-diff/src/__tests__/joinAlignedDiffs.test.ts +``` +joinAlignedDiffsExpand + ✅ first line is empty common +joinAlignedDiffsNoExpand + ✅ patch 0 with context 1 and change at start and end + ✅ patch 0 with context 5 and first line is empty common + ✅ patch 1 with context 4 and last line is empty common + ✅ patch 2 with context 3 + ✅ patch 3 with context 2 and omit excess common at start +``` +### ✅ packages/jest-docblock/src/__tests__/index.test.ts +``` +docblock + ✅ extracts valid docblock with line comment + ✅ extracts valid docblock + ✅ extracts valid docblock with more comments + ✅ extracts from invalid docblock + ✅ returns extract and parsedocblock + ✅ parses directives out of a docblock + ✅ parses multiple of the same directives out of a docblock + ✅ parses >=3 of the same directives out of a docblock + ✅ parses directives out of a docblock with comments + ✅ parses directives out of a docblock with line comments + ✅ parses multiline directives + ✅ parses multiline directives even if there are linecomments within the docblock + ✅ supports slashes in @team directive + ✅ extracts comments from docblock + ✅ extracts multiline comments from docblock + ✅ preserves leading whitespace in multiline comments from docblock + ✅ removes leading newlines in multiline comments from docblock + ✅ extracts comments from beginning and end of docblock + ✅ preserve urls within a pragma's values + ✅ strip linecomments from pragmas but preserve for comments + ✅ extracts docblock comments as CRLF when docblock contains CRLF + ✅ extracts docblock comments as LF when docblock contains LF + ✅ strips the docblock out of a file that contains a top docblock + ✅ returns a file unchanged if there is no top docblock to strip + ✅ prints docblocks with no pragmas as empty string + ✅ prints docblocks with one pragma on one line + ✅ prints docblocks with multiple pragmas on multiple lines + ✅ prints docblocks with multiple of the same pragma + ✅ prints docblocks with pragmas + ✅ prints docblocks with comments + ✅ prints docblocks with comments and no keys + ✅ prints docblocks with multiline comments + ✅ prints docblocks that are parseable + ✅ can augment existing docblocks with comments + ✅ prints docblocks using CRLF if comments contains CRLF + ✅ prints docblocks using LF if comments contains LF +``` +### ✅ packages/jest-each/src/__tests__/array.test.ts +``` +jest-each .test + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .test.concurrent + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .test.concurrent.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .test.concurrent.skip + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .test.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .it + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .fit + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .it.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .describe + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .fdescribe + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each .describe.only + ✅ throws an error when not called with an array + ✅ throws an error when called with an empty array + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using printf format + ✅ does not call global test with title containing more param values than sprintf placeholders + ✅ calls global test title with %p placeholder injected at the correct positions + ✅ does not calls global test title with %p placeholder when no data is supplied at given position + ✅ calls global with cb function containing all parameters of each test case when given 1d array + ✅ calls global with cb function containing all parameters of each test case 2d array + ✅ calls global with given timeout +jest-each done callback + ✅ calls [ 'test' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'concurrent' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'concurrent', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it' ] with done when cb function has more args than params of given test row + ✅ calls [ 'fit' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it', 'only' ] with done when cb function has more args than params of given test row + ✅ does not call [ 'describe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'fdescribe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'describe', 'only' ] with done when test function has more args than params of given test row +jest-each .xtest + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .test.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .xit + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .it.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .xdescribe + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +jest-each .describe.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using sprintf format + ✅ calls global with title with placeholder values correctly interpolated +``` +### ✅ packages/jest-each/src/__tests__/index.test.ts +``` +array .add + ✅ returns the result of adding 0 to 0 + ✅ returns the result of adding 0 to 1 + ✅ returns the result of adding 1 to 1 +concurrent .add + ✅ returns the result of adding 0 to 0 + ✅ returns the result of adding 0 to 1 + ✅ returns the result of adding 1 to 1 +template .add + ✅ returns 0 when given 0 and 0 + ✅ returns 1 when given 0 and 1 + ✅ returns 2 when given 1 and 1 +✅ throws an error when not called with the right number of arguments +``` +### ✅ packages/jest-each/src/__tests__/template.test.ts +``` +jest-each .test + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .test.concurrent + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .test.concurrent.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .test.concurrent.skip + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .test.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .it + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .fit + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .it.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .describe + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .fdescribe + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each .describe.only + ✅ throws error when there are additional words in first column heading + ✅ throws error when there are additional words in second column heading + ✅ throws error when there are additional words in last column heading + ✅ does not throw error when there is additional words in template after heading row + ✅ does not throw error when there is only one column + ✅ does not throw error when there is only one column with additional words in template after heading + ✅ throws error when there are no arguments for given headings + ✅ throws error when there are fewer arguments than headings when given one row + ✅ throws error when there are fewer arguments than headings over multiple rows + ✅ throws an error when called with an empty string + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format + ✅ calls global with title containing $key in multiple positions + ✅ calls global with title containing $key.path + ✅ calls global with title containing last seen object when $key.path is invalid + ✅ calls global with cb function with object built from table headings and values + ✅ calls global with given timeout + ✅ formats primitive values using .toString() +jest-each done callback + ✅ calls [ 'test' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'test', 'concurrent', 'only' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it' ] with done when cb function has more args than params of given test row + ✅ calls [ 'fit' ] with done when cb function has more args than params of given test row + ✅ calls [ 'it', 'only' ] with done when cb function has more args than params of given test row + ✅ does not call [ 'describe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'fdescribe' ] with done when test function has more args than params of given test row + ✅ does not call [ 'describe', 'only' ] with done when test function has more args than params of given test row +jest-each .xtest + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .test.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .xit + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .it.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .xdescribe + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +jest-each .describe.skip + ✅ calls global with given title + ✅ calls global with given title when multiple tests cases exist + ✅ calls global with title containing param values when using $variable format +``` +### ✅ packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.ts +``` +JSDomEnvironment + ✅ should configure setTimeout/setInterval to use the browser api + ✅ has modern fake timers implementation +``` +### ✅ packages/jest-environment-node/src/__tests__/node_environment.test.ts +``` +NodeEnvironment + ✅ uses a copy of the process object + ✅ exposes process.on + ✅ exposes global.global + ✅ should configure setTimeout/setInterval to use the node api + ✅ has modern fake timers implementation + ✅ TextEncoder references the same global Uint8Array constructor +``` +### ✅ packages/jest-fake-timers/src/__tests__/legacyFakeTimers.test.ts +``` +FakeTimers construction + ✅ installs setTimeout mock + ✅ accepts to promisify setTimeout mock + ✅ installs clearTimeout mock + ✅ installs setInterval mock + ✅ installs clearInterval mock + ✅ mocks process.nextTick if it exists on global + ✅ mocks setImmediate if it exists on global + ✅ mocks clearImmediate if setImmediate is on global +FakeTimers runAllTicks + ✅ runs all ticks, in order + ✅ does nothing when no ticks have been scheduled + ✅ only runs a scheduled callback once + ✅ cancels a callback even from native nextTick + ✅ cancels a callback even from native setImmediate + ✅ doesnt run a tick callback if native nextTick already did + ✅ doesnt run immediate if native setImmediate already did + ✅ native doesnt run immediate if fake already did + ✅ throws before allowing infinite recursion +FakeTimers runAllTimers + ✅ runs all timers in order + ✅ warns when trying to advance timers while real timers are used + ✅ does nothing when no timers have been scheduled + ✅ only runs a setTimeout callback once (ever) + ✅ runs callbacks with arguments after the interval + ✅ doesnt pass the callback to native setTimeout + ✅ throws before allowing infinite recursion + ✅ also clears ticks +FakeTimers advanceTimersByTime + ✅ runs timers in order + ✅ does nothing when no timers have been scheduled + ✅ throws before allowing infinite recursion +FakeTimers advanceTimersToNextTimer + ✅ runs timers in order + ✅ run correct amount of steps + ✅ setTimeout inside setTimeout + ✅ does nothing when no timers have been scheduled +FakeTimers reset + ✅ resets all pending setTimeouts + ✅ resets all pending setIntervals + ✅ resets all pending ticks callbacks & immediates + ✅ resets current advanceTimersByTime time cursor +FakeTimers runOnlyPendingTimers + ✅ runs all timers in order + ✅ does not run timers that were cleared in another timer +FakeTimers runWithRealTimers + ✅ executes callback with native timers + ✅ resets mock timers after executing callback + ✅ resets mock timer functions even if callback throws +FakeTimers useRealTimers + ✅ resets native timer APIs + ✅ resets native process.nextTick when present + ✅ resets native setImmediate when present +FakeTimers useFakeTimers + ✅ resets mock timer APIs + ✅ resets mock process.nextTick when present + ✅ resets mock setImmediate when present +FakeTimers getTimerCount + ✅ returns the correct count + ✅ includes immediates and ticks + ✅ not includes cancelled immediates +``` +### ✅ packages/jest-fake-timers/src/__tests__/modernFakeTimers.test.ts +``` +FakeTimers construction + ✅ installs setTimeout mock + ✅ installs clearTimeout mock + ✅ installs setInterval mock + ✅ installs clearInterval mock + ✅ mocks process.nextTick if it exists on global + ✅ mocks setImmediate if it exists on global + ✅ mocks clearImmediate if setImmediate is on global +FakeTimers runAllTicks + ✅ runs all ticks, in order + ✅ does nothing when no ticks have been scheduled + ✅ only runs a scheduled callback once + ✅ throws before allowing infinite recursion +FakeTimers runAllTimers + ✅ runs all timers in order + ✅ warns when trying to advance timers while real timers are used + ✅ does nothing when no timers have been scheduled + ✅ only runs a setTimeout callback once (ever) + ✅ runs callbacks with arguments after the interval + ✅ doesn't pass the callback to native setTimeout + ✅ throws before allowing infinite recursion + ✅ also clears ticks +FakeTimers advanceTimersByTime + ✅ runs timers in order + ✅ does nothing when no timers have been scheduled +FakeTimers advanceTimersToNextTimer + ✅ runs timers in order + ✅ run correct amount of steps + ✅ setTimeout inside setTimeout + ✅ does nothing when no timers have been scheduled +FakeTimers reset + ✅ resets all pending setTimeouts + ✅ resets all pending setIntervals + ✅ resets all pending ticks callbacks + ✅ resets current advanceTimersByTime time cursor +FakeTimers runOnlyPendingTimers + ✅ runs all timers in order + ✅ does not run timers that were cleared in another timer +FakeTimers useRealTimers + ✅ resets native timer APIs + ✅ resets native process.nextTick when present + ✅ resets native setImmediate when present +FakeTimers useFakeTimers + ✅ resets mock timer APIs + ✅ resets mock process.nextTick when present + ✅ resets mock setImmediate when present +FakeTimers getTimerCount + ✅ returns the correct count + ✅ includes immediates and ticks + ✅ not includes cancelled immediates +``` +### ✅ packages/jest-get-type/src/__tests__/getType.test.ts +``` +.getType() + ✅ null + ✅ undefined + ✅ object + ✅ array + ✅ number + ✅ string + ✅ function + ✅ boolean + ✅ symbol + ✅ regexp + ✅ map + ✅ set + ✅ date + ✅ bigint +``` +### ✅ packages/jest-get-type/src/__tests__/isPrimitive.test.ts +``` +.isPrimitive() + ✅ returns true when given primitive value of: null + ✅ returns true when given primitive value of: undefined + ✅ returns true when given primitive value of: 100 + ✅ returns true when given primitive value of: hello world + ✅ returns true when given primitive value of: true + ✅ returns true when given primitive value of: Symbol(a) + ✅ returns true when given primitive value of: 0 + ✅ returns true when given primitive value of: NaN + ✅ returns true when given primitive value of: Infinity + ✅ returns true when given primitive value of: 1n + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: [] + ✅ returns false when given non primitive value of: undefined + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: {} + ✅ returns false when given non primitive value of: "2021-01-24T19:22:19.272Z" + ✅ returns false when given non primitive value of: {} +``` +### ✅ packages/jest-globals/src/__tests__/index.ts +``` +✅ throw when directly imported +``` +### ✅ packages/jest-haste-map/src/__tests__/get_mock_name.test.js +``` +getMockName + ✅ extracts mock name from file path +``` +### ✅ packages/jest-haste-map/src/__tests__/includes_dotfiles.test.ts +``` +✅ watchman crawler and node crawler both include dotfiles +``` +### ✅ packages/jest-haste-map/src/__tests__/index.test.js +``` +HasteMap + ✅ exports constants + ✅ creates valid cache file paths + ✅ creates different cache file paths for different roots + ✅ creates different cache file paths for different dependency extractor cache keys + ✅ creates different cache file paths for different hasteImplModulePath cache keys + ✅ creates different cache file paths for different projects + ✅ matches files against a pattern + ✅ ignores files given a pattern + ✅ ignores vcs directories without ignore pattern + ✅ ignores vcs directories with ignore pattern regex + ✅ warn on ignore pattern except for regex + ✅ builds a haste map on a fresh cache + ✅ does not crawl native files even if requested to do so + ✅ retains all files if `retainAllFiles` is specified + ✅ warns on duplicate mock files + ✅ warns on duplicate module ids + ✅ warns on duplicate module ids only once + ✅ throws on duplicate module ids if "throwOnModuleCollision" is set to true + ✅ splits up modules by platform + ✅ does not access the file system on a warm cache with no changes + ✅ only does minimal file system access when files change + ✅ correctly handles file deletions + ✅ correctly handles platform-specific file additions + ✅ correctly handles platform-specific file deletions + ✅ correctly handles platform-specific file renames + ✅ discards the cache when configuration changes + ✅ ignores files that do not exist + ✅ distributes work across workers + ✅ tries to crawl using node as a fallback + ✅ tries to crawl using node as a fallback when promise fails once + ✅ stops crawling when both crawlers fail +HasteMap builds a haste map on a fresh cache with SHA-1s + ✅ uses watchman: false + ✅ uses watchman: true +HasteMap duplicate modules + ✅ recovers when a duplicate file is deleted + ✅ recovers with the correct type when a duplicate file is deleted + ✅ recovers when a duplicate module is renamed +HasteMap file system changes processing + ✅ provides a new set of hasteHS and moduleMap + ✅ handles several change events at once + ✅ does not emit duplicate change events + ✅ emits a change even if a file in node_modules has changed + ✅ correctly tracks changes to both platform-specific versions of a single module name +HasteMap file system changes processing recovery from duplicate module IDs + ✅ recovers when the oldest version of the duplicates is fixed + ✅ recovers when the most recent duplicate is fixed + ✅ ignore directories +``` +### ✅ packages/jest-haste-map/src/__tests__/worker.test.js +``` +worker + ✅ parses JavaScript files and extracts module information + ✅ accepts a custom dependency extractor + ✅ delegates to hasteImplModulePath for getting the id + ✅ parses package.json files as haste packages + ✅ returns an error when a file cannot be accessed + ✅ simply computes SHA-1s when requested (works well with binary data) + ✅ avoids computing dependencies if not requested and Haste does not need it +``` +### ✅ packages/jest-haste-map/src/crawlers/__tests__/node.test.js +``` +node crawler + ✅ crawls for files based on patterns + ✅ updates only changed files + ✅ returns removed files + ✅ uses node fs APIs with incompatible find binary + ✅ uses node fs APIs without find binary + ✅ uses node fs APIs if "forceNodeFilesystemAPI" is set to true, regardless of platform + ✅ completes with empty roots + ✅ completes with fs.readdir throwing an error +node crawler readdir withFileTypes support + ✅ calls lstat for directories and symlinks if readdir withFileTypes is not supported + ✅ avoids calling lstat for directories and symlinks if readdir withFileTypes is supported +``` +### ✅ packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js +``` +watchman watch + ✅ returns a list of all files when there are no clocks + ✅ updates file map and removedFiles when the clock is given + ✅ resets the file map and tracks removedFiles when watchman is fresh + ✅ properly resets the file map when only one watcher is reset + ✅ does not add directory filters to query when watching a ROOT + ✅ SHA-1 requested and available + ✅ SHA-1 requested and NOT available + ✅ source control query +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/dependencyExtractor.test.js +``` +dependencyExtractor + ✅ should not extract dependencies inside comments + ✅ should not extract dependencies inside comments (windows line endings) + ✅ should not extract dependencies inside comments (unicode line endings) + ✅ should extract dependencies from `import` statements + ✅ should extract dependencies from side-effect only `import` statements + ✅ should not extract dependencies from `import type/typeof` statements + ✅ should extract dependencies from `export` statements + ✅ should extract dependencies from `export-from` statements + ✅ should not extract dependencies from `export type/typeof` statements + ✅ should extract dependencies from dynamic `import` calls + ✅ should extract dependencies from `require` calls + ✅ should extract dependencies from `jest.requireActual` calls + ✅ should extract dependencies from `jest.requireMock` calls + ✅ should extract dependencies from `jest.genMockFromModule` calls + ✅ should extract dependencies from `jest.createMockFromModule` calls +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/fast_path.test.js +``` +fastPath.relative + ✅ should get relative paths inside the root + ✅ should get relative paths outside the root + ✅ should get relative paths outside the root when start with same word +fastPath.resolve + ✅ should get the absolute path for paths inside the root + ✅ should get the absolute path for paths outside the root +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js +``` +getPlatformExtension + ✅ should get platform ext +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/isRegExpSupported.test.js +``` +isRegExpSupported + ✅ should return true when passing valid regular expression + ✅ should return false when passing an invalid regular expression +``` +### ✅ packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js +``` +normalizePathSep + ✅ does nothing on posix + ✅ replace slashes on windows +``` +### ✅ packages/jest-jasmine2/src/__tests__/concurrent.test.ts +``` +concurrent + ✅ should add 1 to number + ✅ should add 1 to number + ✅ should add 1 to number +``` +### ✅ packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.ts +``` +expectationResultFactory + ✅ returns the result if passed. + ✅ returns the result if failed. + ✅ returns the result if failed (with `message`). + ✅ returns the result if failed (with `error`). + ✅ returns the error name if the error message is empty + ✅ returns the result if failed (with `error` as a string). + ✅ returns the result if failed (with `error.stack` not as a string). +``` +### ✅ packages/jest-jasmine2/src/__tests__/hooksError.test.ts +``` +beforeEach hooks error throwing + ✅ beforeEach throws an error when "String" is provided as a first argument to it + ✅ beforeEach throws an error when 1 is provided as a first argument to it + ✅ beforeEach throws an error when [] is provided as a first argument to it + ✅ beforeEach throws an error when {} is provided as a first argument to it + ✅ beforeEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeEach throws an error when true is provided as a first argument to it + ✅ beforeEach throws an error when null is provided as a first argument to it + ✅ beforeEach throws an error when undefined is provided as a first argument to it +beforeAll hooks error throwing + ✅ beforeAll throws an error when "String" is provided as a first argument to it + ✅ beforeAll throws an error when 1 is provided as a first argument to it + ✅ beforeAll throws an error when [] is provided as a first argument to it + ✅ beforeAll throws an error when {} is provided as a first argument to it + ✅ beforeAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ beforeAll throws an error when true is provided as a first argument to it + ✅ beforeAll throws an error when null is provided as a first argument to it + ✅ beforeAll throws an error when undefined is provided as a first argument to it +afterEach hooks error throwing + ✅ afterEach throws an error when "String" is provided as a first argument to it + ✅ afterEach throws an error when 1 is provided as a first argument to it + ✅ afterEach throws an error when [] is provided as a first argument to it + ✅ afterEach throws an error when {} is provided as a first argument to it + ✅ afterEach throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterEach throws an error when true is provided as a first argument to it + ✅ afterEach throws an error when null is provided as a first argument to it + ✅ afterEach throws an error when undefined is provided as a first argument to it +afterAll hooks error throwing + ✅ afterAll throws an error when "String" is provided as a first argument to it + ✅ afterAll throws an error when 1 is provided as a first argument to it + ✅ afterAll throws an error when [] is provided as a first argument to it + ✅ afterAll throws an error when {} is provided as a first argument to it + ✅ afterAll throws an error when Symbol(hello) is provided as a first argument to it + ✅ afterAll throws an error when true is provided as a first argument to it + ✅ afterAll throws an error when null is provided as a first argument to it + ✅ afterAll throws an error when undefined is provided as a first argument to it +``` +### ✅ packages/jest-jasmine2/src/__tests__/iterators.test.ts +``` +iterators + ✅ works for arrays + ✅ works for custom iterables + ✅ works for Sets + ✅ works for Maps +``` +### ✅ packages/jest-jasmine2/src/__tests__/itTestError.test.ts +``` +test/it error throwing + ✅ it throws error with missing callback function + ✅ it throws an error when first argument isn't a string + ✅ it throws an error when callback function is not a function + ✅ test throws error with missing callback function + ✅ test throws an error when first argument isn't a string + ✅ test throws an error when callback function is not a function +``` +### ✅ packages/jest-jasmine2/src/__tests__/itToTestAlias.test.ts +``` +✅ global.test +``` +### ✅ packages/jest-jasmine2/src/__tests__/pTimeout.test.ts +``` +pTimeout + ✅ calls `clearTimeout` and resolves when `promise` resolves. + ✅ calls `clearTimeout` and rejects when `promise` rejects. + ✅ calls `onTimeout` on timeout. +``` +### ✅ packages/jest-jasmine2/src/__tests__/queueRunner.test.ts +``` +queueRunner + ✅ runs every function in the queue. + ✅ exposes `fail` to `next`. + ✅ passes errors to `onException`. + ✅ passes an error to `onException` on timeout. + ✅ calls `fail` with arguments + ✅ calls `fail` when done(error) is invoked +``` +### ✅ packages/jest-jasmine2/src/__tests__/reporter.test.ts +``` +Jasmine2Reporter + ✅ reports nested suites +``` +### ✅ packages/jest-jasmine2/src/__tests__/Suite.test.ts +``` +Suite + ✅ doesn't throw on addExpectationResult when there are no children +``` +### ✅ packages/jest-jasmine2/src/__tests__/todoError.test.ts +``` +test/it.todo error throwing + ✅ it throws error when given no arguments + ✅ it throws error when given more than one argument + ✅ it throws error when given none string description +``` +### ✅ packages/jest-leak-detector/src/__tests__/index.test.ts +``` +✅ complains if the value is a primitive +✅ does not show the GC if hidden +✅ does not hide the GC if visible +✅ correctly checks simple leaks +✅ tests different objects +✅ correctly checks more complex leaks +``` +### ✅ packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceable.test.ts +``` +✅ returns the same value for primitive or function values +✅ convert accessor descriptor into value descriptor +✅ shuold not skips non-enumerables +✅ copies symbols +✅ copies arrays as array objects +✅ handles cyclic dependencies +✅ Copy Map +✅ Copy cyclic Map +✅ return same value for built-in object type except array, map and object +✅ should copy object symbol key property +✅ should set writable, configurable to true +``` +### ✅ packages/jest-matcher-utils/src/__tests__/deepCyclicCopyReplaceableDom.test.ts +``` +✅ should copy dom element +✅ should copy complex element +``` +### ✅ packages/jest-matcher-utils/src/__tests__/index.test.ts +``` +stringify() + ✅ [] + ✅ {} + ✅ 1 + ✅ 0 + ✅ 1.5 + ✅ null + ✅ undefined + ✅ "abc" + ✅ Symbol(abc) + ✅ NaN + ✅ Infinity + ✅ -Infinity + ✅ /ab\.c/gi + ✅ 1n + ✅ 0n + ✅ circular references + ✅ toJSON error + ✅ toJSON errors when comparing two objects + ✅ reduces maxDepth if stringifying very large objects +ensureNumbers() + ✅ dont throw error when variables are numbers + ✅ throws error when expected is not a number (backward compatibility) + ✅ throws error when received is not a number (backward compatibility) +ensureNumbers() with options + ✅ promise empty isNot false received + ✅ promise empty isNot true expected + ✅ promise rejects isNot false expected + ✅ promise rejects isNot true received + ✅ promise resolves isNot false received + ✅ promise resolves isNot true expected +ensureNoExpected() + ✅ dont throw error when undefined + ✅ throws error when expected is not undefined with matcherName + ✅ throws error when expected is not undefined with matcherName and options +diff + ✅ forwards to jest-diff + ✅ two booleans + ✅ two numbers + ✅ two bigints +pluralize() + ✅ one + ✅ two + ✅ 20 +getLabelPrinter + ✅ 0 args + ✅ 1 empty string + ✅ 1 non-empty string + ✅ 2 equal lengths + ✅ 2 unequal lengths + ✅ returns incorrect padding if inconsistent arg is shorter + ✅ throws if inconsistent arg is longer +matcherHint + ✅ expectedColor + ✅ receivedColor + ✅ secondArgumentColor +``` +### ✅ packages/jest-matcher-utils/src/__tests__/printDiffOrStringify.test.ts +``` +printDiffOrStringify + ✅ expected is empty and received is single line + ✅ expected is multi line and received is empty + ✅ expected and received are single line with multiple changes + ✅ expected and received are multi line with trailing spaces + ✅ has no common after clean up chaff multiline + ✅ has no common after clean up chaff one-line + ✅ object contain readonly symbol key object +printDiffOrStringify MAX_DIFF_STRING_LENGTH + ✅ both are less + ✅ expected is more + ✅ received is more +printDiffOrStringify asymmetricMatcher + ✅ minimal test + ✅ jest asymmetricMatcher + ✅ custom asymmetricMatcher + ✅ nested object + ✅ array + ✅ object in array + ✅ map + ✅ circular object + ✅ transitive circular + ✅ circular array + ✅ circular map +``` +### ✅ packages/jest-matcher-utils/src/__tests__/Replaceable.test.ts +``` +Replaceable constructor + ✅ init with object + ✅ init with array + ✅ init with Map + ✅ init with other type should throw error +Replaceable get + ✅ get object item + ✅ get array item + ✅ get Map item +Replaceable set + ✅ set object item + ✅ set array item + ✅ set Map item +Replaceable forEach + ✅ object forEach + ✅ array forEach + ✅ map forEach + ✅ forEach should ignore nonenumerable property +Replaceable isReplaceable + ✅ should return true if two object types equal and support + ✅ should return false if two object types not equal + ✅ should return false if object types not support +``` +### ✅ packages/jest-message-util/src/__tests__/messages.test.ts +``` +✅ should exclude jasmine from stack trace for Unix paths. +✅ .formatExecError() +✅ formatStackTrace should strip node internals +✅ should not exclude vendor from stack trace +✅ retains message in babel code frame error +✅ codeframe +✅ no codeframe +✅ no stack +formatStackTrace + ✅ prints code frame and stacktrace + ✅ does not print code frame when noCodeFrame = true + ✅ does not print codeframe when noStackTrace = true +``` +### ✅ packages/jest-mock/src/__tests__/index.test.ts +``` +moduleMocker getMetadata + ✅ returns the function `name` property + ✅ mocks constant values + ✅ does not retrieve metadata for arrays + ✅ does not retrieve metadata for undefined + ✅ does not retrieve metadata for null + ✅ retrieves metadata for ES6 classes + ✅ retrieves synchronous function metadata + ✅ retrieves asynchronous function metadata + ✅ retrieves metadata for object literals and it's members + ✅ retrieves Date object metadata +moduleMocker generateFromMetadata + ✅ forwards the function name property + ✅ fixes illegal function name properties + ✅ special cases the mockConstructor name + ✅ wont interfere with previous mocks on a shared prototype + ✅ does not mock non-enumerable getters + ✅ mocks getters of ES modules + ✅ mocks ES2015 non-enumerable methods + ✅ mocks ES2015 non-enumerable static properties and methods + ✅ mocks methods in all the prototype chain (null prototype) + ✅ does not mock methods from Object.prototype + ✅ does not mock methods from Object.prototype (in mock context) + ✅ does not mock methods from Function.prototype + ✅ does not mock methods from Function.prototype (in mock context) + ✅ does not mock methods from RegExp.prototype + ✅ does not mock methods from RegExp.prototype (in mock context) + ✅ mocks methods that are bound multiple times + ✅ mocks methods that are bound after mocking + ✅ mocks regexp instances + ✅ mocks functions with numeric names + ✅ mocks the method in the passed object itself + ✅ should delete previously inexistent methods when restoring + ✅ supports mock value returning undefined + ✅ supports mock value once returning undefined + ✅ mockReturnValueOnce mocks value just once + ✅ supports mocking resolvable async functions + ✅ supports mocking resolvable async functions only once + ✅ supports mocking rejectable async functions + ✅ supports mocking rejectable async functions only once + ✅ tracks thrown errors without interfering with other tracking + ✅ a call that throws undefined is tracked properly + ✅ results of recursive calls are tracked properly + ✅ test results of recursive calls from within the recursive call + ✅ call mockClear inside recursive mock +moduleMocker generateFromMetadata mocked functions + ✅ tracks calls to mocks + ✅ tracks instances made by mocks + ✅ supports clearing mock calls + ✅ supports clearing mocks + ✅ supports clearing all mocks + ✅ supports resetting mock return values + ✅ supports resetting single use mock return values + ✅ supports resetting mock implementations + ✅ supports resetting single use mock implementations + ✅ supports resetting all mocks + ✅ maintains function arity +moduleMocker generateFromMetadata return values + ✅ tracks return values + ✅ tracks mocked return values + ✅ supports resetting return values +moduleMocker generateFromMetadata invocationCallOrder + ✅ tracks invocationCallOrder made by mocks + ✅ supports clearing mock invocationCallOrder + ✅ supports clearing all mocks invocationCallOrder + ✅ handles a property called `prototype` +moduleMocker getMockImplementation + ✅ should mock calls to a mock function +moduleMocker mockImplementationOnce + ✅ should mock constructor + ✅ should mock single call to a mock function + ✅ should fallback to default mock function when no specific mock is available +moduleMocker + ✅ mockReturnValue does not override mockImplementationOnce + ✅ mockImplementation resets the mock + ✅ should recognize a mocked function + ✅ default mockName is jest.fn() + ✅ mockName sets the mock name + ✅ mockName gets reset by mockReset + ✅ mockName gets reset by mockRestore + ✅ mockName is not reset by mockClear +moduleMocker spyOn + ✅ should work + ✅ should throw on invalid input + ✅ supports restoring all spies + ✅ should work with getters +moduleMocker spyOnProperty + ✅ should work - getter + ✅ should work - setter + ✅ should throw on invalid input + ✅ supports restoring all spies + ✅ should work with getters on the prototype chain + ✅ should work with setters on the prototype chain + ✅ supports restoring all spies on the prototype chain +``` +### ✅ packages/jest-regex-util/src/__tests__/index.test.ts +``` +replacePathSepForRegex() posix + ✅ should return the path +replacePathSepForRegex() win32 + ✅ should replace POSIX path separators + ✅ should escape Windows path separators + ✅ should not escape an escaped dot + ✅ should not escape an escaped regexp symbol + ✅ should escape Windows path separators inside groups + ✅ should escape Windows path separator at the beginning + ✅ should not escape several already escaped path separators +``` +### ✅ packages/jest-repl/src/__tests__/jest_repl.test.js +``` +Repl cli + ✅ runs without errors +``` +### ✅ packages/jest-repl/src/__tests__/runtime_cli.test.js +``` +Runtime CLI + ✅ fails with no path + ✅ displays script output + ✅ always disables automocking + ✅ throws script errors +``` +### ✅ packages/jest-reporters/src/__tests__/CoverageReporter.test.js +``` +onRunComplete + ✅ getLastError() returns an error when threshold is not met for global + ✅ getLastError() returns an error when threshold is not met for file + ✅ getLastError() returns `undefined` when threshold is met + ✅ getLastError() returns an error when threshold is not met for non-covered file + ✅ getLastError() returns an error when threshold is not met for directory + ✅ getLastError() returns `undefined` when threshold is met for directory + ✅ getLastError() returns an error when there is no coverage data for a threshold + ✅ getLastError() returns 'undefined' when global threshold group + is empty because PATH and GLOB threshold groups have matched all the + files in the coverage data. + ✅ getLastError() returns 'undefined' when file and directory path + threshold groups overlap + ✅ that if globs or paths are specified alongside global, coverage + data for matching paths will be subtracted from overall coverage + and thresholds will be applied independently + ✅ that files are matched by all matching threshold groups + ✅ that it passes custom options when creating reporters +``` +### ✅ packages/jest-reporters/src/__tests__/CoverageWorker.test.js +``` +✅ resolves to the result of generateEmptyCoverage upon success +✅ throws errors on invalid JavaScript +``` +### ✅ packages/jest-reporters/src/__tests__/DefaultReporter.test.js +``` +✅ normal output, everything goes to stdout +✅ when using stderr as output, no stdout call is made +``` +### ✅ packages/jest-reporters/src/__tests__/generateEmptyCoverage.test.js +``` +generateEmptyCoverage + ✅ generates an empty coverage object for a file without running it + ✅ generates a null coverage result when using /* istanbul ignore file */ + ✅ generates a null coverage result when collectCoverage global config is false +``` +### ✅ packages/jest-reporters/src/__tests__/getResultHeader.test.js +``` +✅ should call `terminal-link` correctly +✅ should render the terminal link +✅ should display test time for slow test +✅ should not display test time for fast test +``` +### ✅ packages/jest-reporters/src/__tests__/getSnapshotStatus.test.js +``` +✅ Retrieves the snapshot status +✅ Shows no snapshot updates if all snapshots matched +✅ Retrieves the snapshot status after a snapshot update +``` +### ✅ packages/jest-reporters/src/__tests__/getSnapshotSummary.test.js +``` +✅ creates a snapshot summary +✅ creates a snapshot summary after an update +✅ creates a snapshot summary with multiple snapshot being written/updated +✅ returns nothing if there are no updates +``` +### ✅ packages/jest-reporters/src/__tests__/getWatermarks.test.ts +``` +getWatermarks + ✅ that watermarks use thresholds as upper target + ✅ that watermarks are created always created +``` +### ✅ packages/jest-reporters/src/__tests__/NotifyReporter.test.ts +``` +✅ test always +✅ test success +✅ test change +✅ test success-change +✅ test failure-change +✅ test always with rootDir +✅ test success with rootDir +✅ test change with rootDir +✅ test success-change with rootDir +✅ test failure-change with rootDir +✅ test always with moduleName +✅ test success with moduleName +✅ test change with moduleName +✅ test success-change with moduleName +✅ test failure-change with moduleName +node-notifier is an optional dependency + ✅ without node-notifier uses mock function that throws an error + ✅ throws the error when require throws an unexpected error + ✅ uses node-notifier when it is available +``` +### ✅ packages/jest-reporters/src/__tests__/SummaryReporter.test.js +``` +✅ snapshots needs update with npm test +✅ snapshots needs update with yarn test +✅ snapshots all have results (no update) +✅ snapshots all have results (after update) +``` +### ✅ packages/jest-reporters/src/__tests__/utils.test.ts +``` +wrapAnsiString() + ✅ wraps a long string containing ansi chars + ✅ returns the string unaltered if given a terminal width of zero +trimAndFormatPath() + ✅ trims dirname + ✅ trims dirname (longer line width) + ✅ trims dirname and basename + ✅ does not trim anything + ✅ split at the path.sep index +printDisplayName + ✅ should default displayName color to white when displayName is a string + ✅ should default displayName color to white when color is not a valid value + ✅ should correctly print the displayName when color and name are valid values +``` +### ✅ packages/jest-reporters/src/__tests__/VerboseReporter.test.js +``` +groupTestsBySuites + ✅ should handle empty results + ✅ should group A1 in A + ✅ should group A1 in A; B1 in B + ✅ should group A1, A2 in A + ✅ should group A1, A2 in A; B1, B2 in B + ✅ should group AB1 in AB + ✅ should group AB1, AB2 in AB + ✅ should group A1 in A; AB1 in AB + ✅ should group AB1 in AB; A1 in A + ✅ should group AB1 in AB; CD1 in CD + ✅ should group ABC1 in ABC; BC1 in BC; D1 in D; A1 in A +``` +### ✅ packages/jest-resolve-dependencies/src/__tests__/dependency_resolver.test.ts +``` +✅ resolves no dependencies for non-existent path +✅ resolves dependencies for existing path +✅ includes the mocks of dependencies as dependencies +✅ resolves dependencies for scoped packages +✅ resolves no inverse dependencies for empty paths set +✅ resolves no inverse dependencies for set of non-existent paths +✅ resolves inverse dependencies for existing path +✅ resolves inverse dependencies of mock +✅ resolves inverse dependencies from available snapshot +✅ resolves dependencies correctly when dependency resolution fails +✅ resolves dependencies correctly when mock dependency resolution fails +``` +### ✅ packages/jest-resolve/src/__tests__/isBuiltinModule.test.ts +``` +isBuiltinModule + ✅ should return true for the `path` module + ✅ should return false for the `chalk` module + ✅ should return true for the `_http_common` module + ✅ should return false for any internal node builtins +``` +### ✅ packages/jest-resolve/src/__tests__/resolve.test.ts +``` +isCoreModule + ✅ returns false if `hasCoreModules` is false. + ✅ returns true if `hasCoreModules` is true and `moduleName` is a core module. + ✅ returns false if `hasCoreModules` is true and `moduleName` is not a core module. + ✅ returns false if `hasCoreModules` is true and `moduleNameMapper` alias a module same name with core module +findNodeModule + ✅ is possible to override the default resolver + ✅ passes packageFilter to the resolve module when using the default resolver +resolveModule + ✅ is possible to resolve node modules + ✅ is possible to resolve node modules with custom extensions + ✅ is possible to resolve node modules with custom extensions and platforms + ✅ is possible to resolve node modules by resolving their realpath + ✅ is possible to specify custom resolve paths + ✅ does not confuse directories with files +getMockModule + ✅ is possible to use custom resolver to resolve deps inside mock modules with moduleNameMapper +nodeModulesPaths + ✅ provides custom module paths after node_modules +Resolver.getModulePaths() -> nodeModulesPaths() + ✅ can resolve node modules relative to absolute paths in "moduleDirectories" on Windows platforms + ✅ can resolve node modules relative to absolute paths in "moduleDirectories" on Posix platforms +``` +### ✅ packages/jest-runner/src/__tests__/testRunner.test.ts +``` +✅ injects the serializable module map into each worker in watch mode +✅ assign process.env.JEST_WORKER_ID = 1 when in runInBand mode +``` +### ✅ packages/jest-runtime/src/__tests__/instrumentation.test.ts +``` +✅ instruments files +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_create_mock_from_module.test.js +``` +Runtime createMockFromModule + ✅ does not cause side effects in the rest of the module system when generating a mock + ✅ resolves mapped modules correctly +Runtime + ✅ creates mock objects in the right environment +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_environment.test.js +``` +Runtime requireModule + ✅ emulates a node stack trace during module load + ✅ emulates a node stack trace during function execution +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_internal_module.test.js +``` +Runtime internalModule + ✅ loads modules and applies transforms + ✅ loads internal modules without applying transforms + ✅ loads JSON modules and applies transforms + ✅ loads internal JSON modules without applying transforms +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_jest_fn.js +``` +Runtime jest.fn + ✅ creates mock functions + ✅ creates mock functions with mock implementations +Runtime jest.isMockFunction + ✅ recognizes a mocked function +Runtime jest.clearAllMocks + ✅ clears all mocks +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_jest_spy_on.test.js +``` +Runtime jest.spyOn + ✅ calls the original function +Runtime jest.spyOnProperty + ✅ calls the original function +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_mock.test.js +``` +Runtime jest.mock + ✅ uses explicitly set mocks instead of automocking + ✅ sets virtual mock for non-existing module required from same directory + ✅ sets virtual mock for non-existing module required from different directory +Runtime jest.setMock + ✅ uses explicitly set mocks instead of automocking +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_module_directories.test.js +``` +Runtime + ✅ uses configured moduleDirectories + ✅ resolves packages + ✅ finds closest module from moduleDirectories + ✅ only checks the configured directories +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_node_path.test.js +``` +Runtime + ✅ uses NODE_PATH to find modules + ✅ uses modulePaths to find modules + ✅ finds modules in NODE_PATH containing multiple paths + ✅ does not find modules if NODE_PATH is relative +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_actual.test.js +``` +Runtime requireActual + ✅ requires node module when manual mock exists + ✅ requireActual with moduleNameMapper +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_cache.test.js +``` +Runtime require.cache + ✅ require.cache returns loaded module list as native Nodejs require does + ✅ require.cache is tolerant readonly +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_mock.test.js +``` +Runtime requireMock + ✅ uses manual mocks before attempting to automock + ✅ can resolve modules that are only referenced from mocks + ✅ stores and re-uses manual mock exports + ✅ automocks haste modules without a manual mock + ✅ automocks relative-path modules without a file extension + ✅ automocks relative-path modules with a file extension + ✅ just falls back when loading a native module + ✅ stores and re-uses automocked haste exports + ✅ stores and re-uses automocked relative-path modules + ✅ multiple node core modules returns correct module + ✅ throws on non-existent haste modules + ✅ uses manual mocks when using a custom resolver + ✅ provides `require.main` in mock +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js +``` +Runtime requireModule with no extension + ✅ throws error pointing out file with extension +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module_or_mock_transitive_deps.test.js +``` +transitive dependencies + ✅ mocks a manually mocked and mapped module + ✅ unmocks transitive dependencies in node_modules by default + ✅ unmocks transitive dependencies in node_modules when using unmock + ✅ unmocks transitive dependencies in node_modules by default when using both patterns and unmock + ✅ mocks deep dependencies when using unmock + ✅ does not mock deep dependencies when using deepUnmock +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module_or_mock.test.js +``` +✅ mocks modules by default when using automocking +✅ doesn't mock modules when explicitly unmocked when using automocking +✅ doesn't mock modules when explicitly unmocked via a different name +✅ doesn't mock modules when disableAutomock() has been called +✅ uses manual mock when automocking on and mock is available +✅ does not use manual mock when automocking is off and a real module is available +✅ resolves mapped module names and unmocks them by default +✅ automocking is disabled by default +✅ unmocks modules in config.unmockedModulePathPatterns for tests with automock enabled when automock is false +✅ unmocks virtual mocks after they have been mocked previously +resetModules + ✅ resets all the modules +isolateModules + ✅ keeps it's registry isolated from global one + ✅ resets all modules after the block + ✅ resets module after failing + ✅ cannot nest isolateModules blocks + ✅ can call resetModules within a isolateModules block +isolateModules can use isolateModules from a beforeEach block + ✅ can use the required module from beforeEach and re-require it +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_module.test.js +``` +Runtime requireModule + ✅ finds haste modules + ✅ provides `module` to modules + ✅ provides `module.parent` to modules + ✅ `module.parent` should be undefined for entrypoints + ✅ resolve module.parent.require correctly + ✅ resolve module.parent.filename correctly + ✅ provides `module.loaded` to modules + ✅ provides `module.filename` to modules + ✅ provides `module.paths` to modules + ✅ provides `require.main` to modules + ✅ throws on non-existent haste modules + ✅ finds relative-path modules without file extension + ✅ finds relative-path modules with file extension + ✅ throws on non-existent relative-path modules + ✅ finds node core built-in modules + ✅ finds and loads JSON files without file extension + ✅ finds and loads JSON files with file extension + ✅ requires a JSON file twice successfully + ✅ provides manual mock when real module doesnt exist + ✅ doesn't override real modules with manual mocks when explicitly unmocked + ✅ resolves haste packages properly + ✅ resolves platform extensions based on the default platform + ✅ finds modules encoded in UTF-8 *with BOM* + ✅ finds and loads JSON files encoded in UTF-8 *with BOM* + ✅ should export a constructable Module class + ✅ caches Module correctly +Runtime requireModule on node >=12.12.0 + ✅ overrides module.createRequire +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_require_resolve.test.ts +``` +Runtime require.resolve + ✅ resolves a module path + ✅ resolves a module path with moduleNameMapper +Runtime require.resolve with the jest-resolve-outside-vm-option + ✅ forwards to the real Node require in an internal context + ✅ ignores the option in an external context + ✅ does not understand a self-constructed outsideJestVmPath in an external context +``` +### ✅ packages/jest-runtime/src/__tests__/runtime_wrap.js +``` +Runtime wrapCodeInModuleWrapper + ✅ generates the correct args for the module wrapper + ✅ injects "extra globals" +``` +### ✅ packages/jest-runtime/src/__tests__/Runtime-sourceMaps.test.js +``` +Runtime requireModule + ✅ installs source maps if available +``` +### ✅ packages/jest-runtime/src/__tests__/Runtime-statics.test.js +``` +Runtime statics + ✅ Runtime.createHasteMap passes correct ignore files to HasteMap + ✅ Runtime.createHasteMap passes correct ignore files to HasteMap in watch mode +``` +### ✅ packages/jest-serializer/src/__tests__/index.test.ts +``` +Using V8 implementation + ✅ throws the error with an invalid serialization +Using V8 implementation Object 0 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 1 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 2 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 3 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 4 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 5 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 6 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +Using V8 implementation Object 7 + ✅ serializes/deserializes in memory + ✅ serializes/deserializes in disk +``` +### ✅ packages/jest-snapshot/src/__tests__/dedentLines.test.ts +``` +dedentLines non-null + ✅ no lines + ✅ one line empty string + ✅ one line empty object + ✅ one line self-closing element + ✅ object value empty string + ✅ object value string includes double-quote marks + ✅ markup with props and text + ✅ markup with components as props +dedentLines null + ✅ object key multi-line + ✅ object value multi-line + ✅ object key and value multi-line + ✅ markup prop multi-line + ✅ markup prop component with multi-line text + ✅ markup text multi-line + ✅ markup text multiple lines + ✅ markup unclosed self-closing start tag + ✅ markup unclosed because no end tag +``` +### ✅ packages/jest-snapshot/src/__tests__/InlineSnapshots.test.ts +``` +✅ saveInlineSnapshots() replaces empty function call with a template literal +✅ saveInlineSnapshots() without prettier leaves formatting outside of snapshots alone +✅ saveInlineSnapshots() can handle typescript without prettier +✅ saveInlineSnapshots() can handle tsx without prettier +✅ saveInlineSnapshots() can handle flow and jsx without prettier +✅ saveInlineSnapshots() can use prettier to fix formatting for whole file +✅ saveInlineSnapshots() replaces existing template literal - babel parser +✅ saveInlineSnapshots() replaces existing template literal - flow parser +✅ saveInlineSnapshots() replaces existing template literal - typescript parser +✅ saveInlineSnapshots() replaces existing template literal with property matchers +✅ saveInlineSnapshots() creates template literal with property matchers +✅ saveInlineSnapshots() creates template literal with property matchers +✅ saveInlineSnapshots() throws if frame does not match +✅ saveInlineSnapshots() throws if multiple calls to to the same location +✅ saveInlineSnapshots() uses escaped backticks +✅ saveInlineSnapshots() works with non-literals in expect call +✅ saveInlineSnapshots() indents multi-line snapshots with spaces +✅ saveInlineSnapshots() does not re-indent error snapshots +✅ saveInlineSnapshots() does not re-indent already indented snapshots +✅ saveInlineSnapshots() indents multi-line snapshots with tabs +✅ saveInlineSnapshots() indents snapshots after prettier reformats +✅ saveInlineSnapshots() does not indent empty lines +``` +### ✅ packages/jest-snapshot/src/__tests__/matcher.test.ts +``` +✅ matcher returns matcher name, expected and actual values +``` +### ✅ packages/jest-snapshot/src/__tests__/mockSerializer.test.ts +``` +✅ mock with 0 calls and default name +✅ mock with 2 calls, 1 return, 1 throw +✅ mock with 0 calls and default name in React element +✅ mock with 0 calls and non-default name +✅ mock with 1 calls and non-default name via new in object +✅ mock with 1 calls in React element +✅ mock with 2 calls +✅ indent option +✅ min option +✅ maxDepth option +``` +### ✅ packages/jest-snapshot/src/__tests__/printSnapshot.test.ts +``` +chalk + ✅ level 0 + ✅ level 1 + ✅ level 2 + ✅ level 3 +matcher error toMatchInlineSnapshot + ✅ Expected properties must be an object (non-null) without snapshot + ✅ Expected properties must be an object (null) with snapshot + ✅ Inline snapshot must be a string + ✅ Snapshot matchers cannot be used with not +matcher error toMatchSnapshot + ✅ Expected properties must be an object (non-null) + ✅ Expected properties must be an object (null) with hint + ✅ Expected properties must be an object (null) without hint + ✅ Snapshot state must be initialized +matcher error toMatchSnapshot received value must be an object + ✅ (non-null) + ✅ (null) +matcher error toThrowErrorMatchingInlineSnapshot + ✅ Inline snapshot must be a string + ✅ Snapshot state must be initialized +matcher error toThrowErrorMatchingSnapshot + ✅ Received value must be a function + ✅ Snapshot matchers cannot be used with not +other error toThrowErrorMatchingSnapshot + ✅ Received function did not throw +pass false toMatchInlineSnapshot with properties equals false + ✅ with snapshot + ✅ without snapshot +pass false toMatchInlineSnapshot with properties + ✅ equals true +pass false toMatchSnapshot + ✅ New snapshot was not written (multi line) + ✅ New snapshot was not written (single line) +pass false toMatchSnapshot with properties equals false + ✅ isLineDiffable false + ✅ isLineDiffable true +pass false toMatchSnapshot with properties + ✅ equals true +pass false toThrowErrorMatchingInlineSnapshot + ✅ with snapshot +pass true toMatchSnapshot + ✅ without properties +printPropertiesAndReceived + ✅ omit missing properties +printSnapshotAndReceived backtick + ✅ single line expected and received +printSnapshotAndReceived empty string + ✅ expected and received single line + ✅ received and expected multi line +printSnapshotAndReceived escape + ✅ double quote marks in string + ✅ backslash in multi line string + ✅ backslash in single line string + ✅ regexp +printSnapshotAndReceived expand + ✅ false + ✅ true +printSnapshotAndReceived + ✅ fallback to line diff + ✅ multi line small change in one line and other is unchanged + ✅ multi line small changes + ✅ single line large changes +printSnapshotAndReceived has no common after clean up chaff + ✅ array + ✅ string single line +printSnapshotAndReceived MAX_DIFF_STRING_LENGTH unquoted + ✅ both are less + ✅ expected is more + ✅ received is more +printSnapshotAndReceived MAX_DIFF_STRING_LENGTH quoted + ✅ both are less + ✅ expected is more + ✅ received is more +printSnapshotAndReceived isLineDiffable false + ✅ asymmetric matcher + ✅ boolean + ✅ date + ✅ error + ✅ function + ✅ number +printSnapshotAndReceived isLineDiffable true + ✅ array + ✅ object + ✅ single line expected and received + ✅ single line expected and multi line received +printSnapshotAndReceived ignore indentation + ✅ markup delete + ✅ markup fall back + ✅ markup insert +printSnapshotAndReceived ignore indentation object + ✅ delete + ✅ insert +printSnapshotAndReceived without serialize + ✅ backtick single line expected and received + ✅ backtick single line expected and multi line received + ✅ has no common after clean up chaff multi line + ✅ has no common after clean up chaff single line + ✅ prettier/pull/5590 +``` +### ✅ packages/jest-snapshot/src/__tests__/SnapshotResolver.test.ts +``` +defaults + ✅ returns cached object if called multiple times + ✅ resolveSnapshotPath() + ✅ resolveTestPath() +custom resolver in project config + ✅ returns cached object if called multiple times + ✅ resolveSnapshotPath() + ✅ resolveTestPath() +malformed custom resolver in project config + ✅ missing resolveSnapshotPath throws + ✅ missing resolveTestPath throws + ✅ missing testPathForConsistencyCheck throws + ✅ inconsistent functions throws +``` +### ✅ packages/jest-snapshot/src/__tests__/throwMatcher.test.ts +``` +✅ throw matcher can take func +throw matcher from promise + ✅ can take error + ✅ can take custom error +``` +### ✅ packages/jest-snapshot/src/__tests__/utils.test.ts +``` +✅ keyToTestName() +✅ testNameToKey +✅ saveSnapshotFile() works with +✅ saveSnapshotFile() works with +✅ getSnapshotData() throws when no snapshot version +✅ getSnapshotData() throws for older snapshot version +✅ getSnapshotData() throws for newer snapshot version +✅ getSnapshotData() does not throw for when updating +✅ getSnapshotData() marks invalid snapshot dirty when updating +✅ getSnapshotData() marks valid snapshot not dirty when updating +✅ escaping +✅ serialize handles \r\n +ExtraLineBreaks + ✅ 0 empty string + ✅ 1 line has double quote marks at edges + ✅ 1 line has spaces at edges + ✅ 2 lines both are blank + ✅ 2 lines have double quote marks at edges + ✅ 2 lines first is blank + ✅ 2 lines last is blank +removeLinesBeforeExternalMatcherTrap + ✅ contains external matcher trap + ✅ doesn't contain external matcher trap +DeepMerge with property matchers + ✅ Correctly merges a nested object + ✅ Correctly merges an object with an array of objects + ✅ Correctly merges an object with an array of strings + ✅ Correctly merges an array of objects + ✅ Correctly merges an array of arrays +``` +### ✅ packages/jest-source-map/src/__tests__/getCallsite.test.ts +``` +getCallsite + ✅ without source map + ✅ ignores errors when fs throws + ✅ reads source map file to determine line and column +``` +### ✅ packages/jest-test-result/src/__tests__/formatTestResults.test.ts +``` +formatTestResults + ✅ includes test full name +``` +### ✅ packages/jest-test-sequencer/src/__tests__/test_sequencer.test.js +``` +✅ sorts by file size if there is no timing information +✅ sorts based on timing information +✅ sorts based on failures and timing information +✅ sorts based on failures, timing information and file size +✅ writes the cache based on results without existing cache +✅ returns failed tests in sorted order +✅ writes the cache based on the results +✅ works with multiple contexts +``` +### ✅ packages/jest-transform/src/__tests__/ScriptTransformer.test.ts +``` +ScriptTransformer + ✅ transforms a file properly + ✅ does not transform Node core modules + ✅ throws an error if `process` doesn't return a string or an objectcontaining `code` key with processed string + ✅ throws an error if `process` doesn't defined + ✅ throws an error if createTransformer returns object without `process` method + ✅ shouldn't throw error without process method. But with corrent createTransformer method + ✅ uses the supplied preprocessor + ✅ uses multiple preprocessors + ✅ writes source map if preprocessor supplies it + ✅ writes source map if preprocessor inlines it + ✅ warns of unparseable inlined source maps from the preprocessor + ✅ writes source maps if given by the transformer + ✅ does not write source map if not given by the transformer + ✅ should write a source map for the instrumented file when transformed + ✅ should write a source map for the instrumented file when not transformed + ✅ passes expected transform options to getCacheKey + ✅ creates transformer with config + ✅ reads values from the cache + ✅ reads values from the cache when the file contains colons + ✅ should reuse the value from in-memory cache which is set by custom transformer + ✅ does not reuse the in-memory cache between different projects + ✅ preload transformer when using `preloadTransformer` +``` +### ✅ packages/jest-transform/src/__tests__/shouldInstrument.test.ts +``` +shouldInstrument should return true + ✅ when testRegex is provided and file is not a test file + ✅ when more than one testRegex is provided and filename is not a test file + ✅ when testMatch is provided and file is not a test file + ✅ when testPathIgnorePatterns is provided and file is not a test file + ✅ when more than one testPathIgnorePatterns is provided and filename is not a test file + ✅ when testRegex and testPathIgnorePatterns are provided and file is not a test file + ✅ when testMatch and testPathIgnorePatterns are provided and file is not a test file + ✅ should return true when file is in collectCoverageOnlyFrom when provided + ✅ should return true when filename matches collectCoverageFrom + ✅ should return true if the file is not in coveragePathIgnorePatterns + ✅ should return true if file is a testfile but forceCoverageMatch is set +shouldInstrument should return false + ✅ if collectCoverage is falsy + ✅ when testRegex is provided and filename is a test file + ✅ when more than one testRegex is provided and filename matches one of the patterns + ✅ when testMatch is provided and file is a test file + ✅ when testRegex and testPathIgnorePatterns are provided and filename is a test file + ✅ when testMatch and testPathIgnorePatterns are provided and file is a test file + ✅ when file is not in collectCoverageOnlyFrom when provided + ✅ when filename does not match collectCoverageFrom + ✅ if the file is in coveragePathIgnorePatterns + ✅ if file is in mock patterns + ✅ if file is a globalSetup file + ✅ if file is globalTeardown file + ✅ if file is in setupFiles + ✅ if file is in setupFilesAfterEnv +``` +### ✅ packages/jest-util/src/__tests__/createProcessObject.test.ts +``` +✅ creates a process object that looks like the original one +✅ fakes require("process") so it is equal to "global.process" +✅ checks that process.env works as expected on Linux platforms +✅ checks that process.env works as expected in Windows platforms +``` +### ✅ packages/jest-util/src/__tests__/deepCyclicCopy.test.ts +``` +✅ returns the same value for primitive or function values +✅ does not execute getters/setters, but copies them +✅ copies symbols +✅ copies arrays as array objects +✅ handles cyclic dependencies +✅ uses the blacklist to avoid copying properties on the first level +✅ does not keep the prototype by default when top level is object +✅ does not keep the prototype by default when top level is array +✅ does not keep the prototype of arrays when keepPrototype = false +✅ keeps the prototype of arrays when keepPrototype = true +✅ does not keep the prototype for objects when keepPrototype = false +✅ keeps the prototype for objects when keepPrototype = true +``` +### ✅ packages/jest-util/src/__tests__/errorWithStack.test.ts +``` +ErrorWithStack + ✅ calls Error.captureStackTrace with given callsite when capture exists +``` +### ✅ packages/jest-util/src/__tests__/formatTime.test.ts +``` +✅ defaults to milliseconds +✅ formats seconds properly +✅ formats milliseconds properly +✅ formats microseconds properly +✅ formats nanoseconds properly +✅ interprets lower than lowest powers as nanoseconds +✅ interprets higher than highest powers as seconds +✅ interprets non-multiple-of-3 powers as next higher prefix +✅ formats the quantity properly when pad length is lower +✅ formats the quantity properly when pad length is equal +✅ left pads the quantity properly when pad length is higher +``` +### ✅ packages/jest-util/src/__tests__/globsToMatcher.test.ts +``` +✅ works like micromatch with only positive globs +✅ works like micromatch with a mix of overlapping positive and negative globs +✅ works like micromatch with only negative globs +✅ works like micromatch with empty globs +``` +### ✅ packages/jest-util/src/__tests__/installCommonGlobals.test.ts +``` +✅ returns the passed object +✅ turns a V8 global object into a Node global object +``` +### ✅ packages/jest-util/src/__tests__/isInteractive.test.ts +``` +✅ Returns true when running on interactive environment +✅ Returns false when running on a non-interactive environment +``` +### ✅ packages/jest-util/src/__tests__/isPromise.test.ts +``` +not a Promise: + ✅ undefined + ✅ null + ✅ true + ✅ 42 + ✅ "1337" + ✅ Symbol() + ✅ [] + ✅ {} +✅ a resolved Promise +✅ a rejected Promise +``` +### ✅ packages/jest-validate/src/__tests__/validate.test.ts +``` +✅ recursively validates default Jest config +✅ recursively validates default jest-validate config +✅ pretty prints valid config for Boolean +✅ pretty prints valid config for Array +✅ pretty prints valid config for String +✅ pretty prints valid config for Object +✅ pretty prints valid config for Function +✅ omits null and undefined config values +✅ recursively omits null and undefined config values +✅ treat async and non-async functions as equivalent +✅ treat async and non-async functions as equivalent +✅ treat async and non-async functions as equivalent +✅ treat async and non-async functions as equivalent +✅ respects recursiveDenylist +✅ displays warning for unknown config options +✅ displays warning for deprecated config options +✅ works with custom warnings +✅ works with custom errors +✅ works with custom deprecations +✅ works with multiple valid types +✅ reports errors nicely when failing with multiple valid options +✅ Repeated types within multiple valid examples are coalesced in error report +✅ Comments in config JSON using "//" key are not warned +``` +### ✅ packages/jest-validate/src/__tests__/validateCLIOptions.test.js +``` +✅ validates yargs special options +✅ validates testURL +✅ fails for unknown option +✅ fails for multiple unknown options +✅ does not show suggestion when unrecognized cli param length <= 1 +✅ shows suggestion when unrecognized cli param length > 1 +``` +### ✅ packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.ts +``` +for multiline test name returns + ✅ test name with highlighted pattern and replaced line breaks +for one line test name with pattern in the head returns + ✅ test name with highlighted pattern + ✅ test name with cutted tail and highlighted pattern + ✅ test name with cutted tail and cutted highlighted pattern +for one line test name pattern in the middle + ✅ test name with highlighted pattern returns + ✅ test name with cutted tail and highlighted pattern + ✅ test name with cutted tail and cutted highlighted pattern + ✅ test name with highlighted cutted +for one line test name pattern in the tail returns + ✅ test name with highlighted pattern + ✅ test name with cutted tail and cutted highlighted pattern + ✅ test name with highlighted cutted +``` +### ✅ packages/jest-watcher/src/lib/__tests__/prompt.test.ts +``` +✅ calls handler on change value +✅ calls handler on success prompt +✅ calls handler on cancel prompt +``` +### ✅ packages/jest-watcher/src/lib/__tests__/scroll.test.ts +``` +✅ When offset is -1 +✅ When offset is in the first set of items +✅ When offset is in the middle of the list +✅ When offset is at the end of the list +✅ When offset is at the end and size is smaller than max +``` +### ✅ packages/jest-worker/src/__tests__/Farm.test.js +``` +Farm + ✅ sends a request to one worker + ✅ sends four requests to four unique workers + ✅ handles null computeWorkerKey, sending to first worker + ✅ sends the same worker key to the same worker + ✅ returns the result if the call worked + ✅ throws if the call failed + ✅ checks that once a sticked task finishes, next time is sent to that worker + ✅ checks that even before a sticked task finishes, next time is sent to that worker + ✅ checks that locking works, and jobs are never lost + ✅ can receive custom messages from workers +``` +### ✅ packages/jest-worker/src/__tests__/FifoQueue.test.js +``` +✅ returns the shared tasks in FIFO ordering +✅ returns the worker specific tasks in FIFO ordering +✅ maintains global FIFO ordering between worker specific and shared tasks +``` +### ✅ packages/jest-worker/src/__tests__/index.test.js +``` +✅ exposes the right API using default working +✅ exposes the right API using passed worker +✅ breaks if any of the forbidden methods is tried to be exposed +✅ works with minimal options +✅ does not let make calls after the farm is ended +✅ does not let end the farm after it is ended +✅ calls doWork +✅ calls getStderr and getStdout from worker +``` +### ✅ packages/jest-worker/src/__tests__/PriorityQueue.test.js +``` +✅ returns the tasks in order +✅ returns the task with the lowest priority value if inserted in reversed order +✅ returns the task with the lowest priority value if inserted in correct order +✅ uses different queues for each worker +✅ process task in the global and shared queue in order +``` +### ✅ packages/jest-worker/src/__tests__/process-integration.test.js +``` +Jest Worker Integration + ✅ calls a single method from the worker + ✅ distributes sequential calls across child processes + ✅ schedules the task on the first available child processes if the scheduling policy is in-order + ✅ distributes concurrent calls across child processes + ✅ sticks parallel calls to children +``` +### ✅ packages/jest-worker/src/__tests__/thread-integration.test.js +``` +Jest Worker Process Integration + ✅ calls a single method from the worker + ✅ distributes sequential calls across child processes + ✅ schedules the task on the first available child processes if the scheduling policy is in-order + ✅ schedules the task on the first available child processes + ✅ distributes concurrent calls across child processes + ✅ sticks parallel calls to children +``` +### ✅ packages/jest-worker/src/__tests__/WorkerPool.test.js +``` +WorkerPool + ✅ should create a ChildProcessWorker and send to it + ✅ should create a NodeThreadWorker and send to it + ✅ should avoid NodeThreadWorker if not passed enableWorkerThreads +``` +### ✅ packages/jest-worker/src/base/__tests__/BaseWorkerPool.test.js +``` +BaseWorkerPool + ✅ throws error when createWorker is not defined + ✅ creates and exposes n workers + ✅ creates and expoeses n workers + ✅ creates workers with the right options + ✅ makes a non-existing relative worker throw + ✅ create multiple workers with unique worker ids + ✅ aggregates all stdouts and stderrs from all workers + ✅ works when stdout and stderr are not piped to the parent +BaseWorkerPool end + ✅ ends all workers + ✅ resolves with forceExited=false if workers exited gracefully + ✅ force exits workers that do not exit gracefully and resolves with forceExited=true +``` +### ✅ packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js +``` +✅ passes fork options down to child_process.fork, adding the defaults +✅ passes workerId to the child process and assign it to 1-indexed env.JEST_WORKER_ID +✅ initializes the child process with the given workerPath +✅ stops initializing the worker after the amount of retries is exceeded +✅ provides stdout and stderr from the child processes +✅ sends the task to the child process +✅ resends the task to the child process after a retry +✅ calls the onProcessStart method synchronously if the queue is empty +✅ can send multiple messages to parent +✅ creates error instances for known errors +✅ throws when the child process returns a strange message +✅ does not restart the child if it cleanly exited +✅ resolves waitForExit() after the child process cleanly exited +✅ restarts the child when the child process dies +✅ sends SIGTERM when forceExit() is called +✅ sends SIGKILL some time after SIGTERM +✅ does not send SIGKILL if SIGTERM exited the process +``` +### ✅ packages/jest-worker/src/workers/__tests__/NodeThreadsWorker.test.js +``` +✅ passes fork options down to child_process.fork, adding the defaults +✅ passes workerId to the thread and assign it to env.JEST_WORKER_ID +✅ initializes the thread with the given workerPath +✅ stops initializing the worker after the amount of retries is exceeded +✅ provides stdout and stderr from the threads +✅ sends the task to the thread +✅ resends the task to the thread after a retry +✅ calls the onProcessStart method synchronously if the queue is empty +✅ can send multiple messages to parent +✅ creates error instances for known errors +✅ throws when the thread returns a strange message +✅ does not restart the thread if it cleanly exited +✅ resolves waitForExit() after the thread cleanly exited +✅ restarts the thread when the thread dies +✅ terminates the thread when forceExit() is called +``` +### ✅ packages/jest-worker/src/workers/__tests__/processChild.test.js +``` +✅ lazily requires the file +✅ calls initialize with the correct arguments +✅ returns results immediately when function is synchronous +✅ returns results when it gets resolved if function is asynchronous +✅ calls the main module if the method call is "default" +✅ calls the main export if the method call is "default" and it is a Babel transpiled one +✅ removes the message listener on END message +✅ calls the teardown method +✅ throws if an invalid message is detected +✅ throws if child is not forked +``` +### ✅ packages/jest-worker/src/workers/__tests__/threadChild.test.js +``` +✅ lazily requires the file +✅ calls initialize with the correct arguments +✅ returns results immediately when function is synchronous +✅ returns results when it gets resolved if function is asynchronous +✅ calls the main module if the method call is "default" +✅ calls the main export if the method call is "default" and it is a Babel transpiled one +✅ removes the message listener on END message +✅ calls the teardown method +✅ throws if an invalid message is detected +✅ throws if child is not forked +``` +### ✅ packages/pretty-format/src/__tests__/AsymmetricMatcher.test.ts +``` +✅ supports any(String) +✅ supports nested any(String) +✅ supports any(Function) +✅ supports nested any(Function) +✅ supports any(Array) +✅ supports nested any(Array) +✅ supports any(Object) +✅ supports nested any(Object) +✅ supports any(RegExp) +✅ supports nested any(RegExp) +✅ supports any(Symbol) +✅ supports nested any(Symbol) +✅ supports any(Function) +✅ supports nested any(Function) +✅ supports any() +✅ supports nested any() +✅ supports any(namedFuntction) +✅ supports nested any(namedFuntction) +✅ anything() +✅ arrayContaining() +✅ arrayNotContaining() +✅ objectContaining() +✅ objectNotContaining() +✅ stringContaining(string) +✅ not.stringContaining(string) +✅ stringMatching(string) +✅ stringMatching(regexp) +✅ stringMatching(regexp) {escapeRegex: false} +✅ stringMatching(regexp) {escapeRegex: true} +✅ stringNotMatching(string) +✅ supports multiple nested asymmetric matchers +✅ min option +indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +maxDepth option + ✅ matchers as leaf nodes + ✅ matchers as internal nodes +``` +### ✅ packages/pretty-format/src/__tests__/ConvertAnsi.test.ts +``` +ConvertAnsi plugin + ✅ supports style.red + ✅ supports style.green + ✅ supports style.reset + ✅ supports style.bold + ✅ supports style.dim + ✅ does not support other colors +``` +### ✅ packages/pretty-format/src/__tests__/DOMCollection.test.ts +``` +DOMCollection plugin for object properties + ✅ supports DOMStringMap + ✅ supports NamedNodeMap + ✅ supports config.min option +DOMCollection plugin for list items + ✅ supports HTMLCollection for getElementsByTagName + ✅ supports HTMLCollection for children + ✅ supports config.maxDepth option + ✅ supports NodeList for querySelectorAll + ✅ supports NodeList for childNodes + ✅ supports HTMLOptionsCollection for select options + ✅ supports HTMLCollection for form elements +``` +### ✅ packages/pretty-format/src/__tests__/DOMElement.test.ts +``` +pretty-format + ✅ prints global window as constructor name alone +DOMElement Plugin + ✅ supports a single HTML element + ✅ supports an HTML element with a class property + ✅ supports an HTML element with a title property + ✅ escapes double quote in attribute value + ✅ supports an HTML element with a single attribute + ✅ supports an HTML element with multiple attributes + ✅ supports an HTML element with attribute and text content + ✅ supports an element with text content + ✅ supports nested elements + ✅ supports nested elements with attributes + ✅ supports nested elements with attribute and text content + ✅ supports nested elements with text content + ✅ supports siblings + ✅ supports multiline text node in pre + ✅ supports multiline text node preceding span in pre + ✅ supports multiline text node in textarea + ✅ supports empty text node + ✅ supports non-empty text node + ✅ supports comment node + ✅ supports fragment node + ✅ supports custom elements + ✅ supports SVG elements + ✅ supports indentation for array of elements + ✅ supports maxDepth option + ✅ handles `tagName` not being a string +DOMElement Plugin matches constructor name of SVG elements + ✅ jsdom 9 and 10 + ✅ jsdom 11 +``` +### ✅ packages/pretty-format/src/__tests__/Immutable.test.ts +``` +✅ does not incorrectly match identity-obj-proxy as Immutable object +Immutable.OrderedSet + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.List + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.Stack + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.Set + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports a single string element + ✅ supports a single integer element + ✅ supports multiple string elements {min: true} + ✅ supports multiple string elements {min: false} + ✅ supports multiple integer elements {min: true} + ✅ supports multiple integer elements {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.Map + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports an object with single key + ✅ supports an object with multiple keys {min: true} + ✅ supports an object with multiple keys {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} +Immutable.OrderedMap + ✅ supports an empty collection {min: true} + ✅ supports an empty collection {min: false} + ✅ supports an object with single key + ✅ supports an object with multiple keys {min: true} + ✅ supports an object with multiple keys {min: false} + ✅ supports object elements {min: true} + ✅ supports object elements {min: false} + ✅ supports React elements {min: true} + ✅ supports React elements {min: false} + ✅ supports non-string keys +Immutable.Record + ✅ supports an empty record {min: true} + ✅ supports an empty record {min: false} + ✅ supports a record with descriptive name + ✅ supports a record without descriptive name + ✅ supports a record with values {min: true} + ✅ supports a record with values {min: false} + ✅ supports a record with Map value {min: true} + ✅ supports a record with Map value {min: false} + ✅ supports imbricated Record {min: true} + ✅ supports imbricated Record {min: false} +indentation of heterogeneous collections + ✅ empty Immutable.List as child of Object + ✅ empty Immutable.Map as child of Array + ✅ non-empty Array as child of Immutable.Map + ✅ non-empty Object as child of Immutable.List +indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +maxDepth option + ✅ Immutable.List as child of Object + ✅ Immutable.Map as child of Array + ✅ Immutable.Seq as child of Immutable.Map + ✅ Immutable.Map as descendants in immutable collection +Immutable.Seq + ✅ supports an empty sequence from array {min: true} + ✅ supports an empty sequence from array {min: false} + ✅ supports a non-empty sequence from array {min: true} + ✅ supports a non-empty sequence from array {min: false} + ✅ supports a non-empty sequence from arguments + ✅ supports an empty sequence from object {min: true} + ✅ supports an empty sequence from object {min: false} + ✅ supports a non-empty sequence from object {min: true} + ✅ supports a non-empty sequence from object {min: false} + ✅ supports a sequence of entries from Immutable.Map + ✅ supports a sequence of values from ECMAScript Set + ✅ supports a sequence of values from Immutable.List + ✅ supports a sequence of values from Immutable.Set + ✅ supports a sequence of values from Immutable.Stack +Immutable.Seq lazy entries + ✅ from object properties + ✅ from Immutable.Map entries +Immutable.Seq lazy values + ✅ from Immutable.Range + ✅ from iterator + ✅ from array items + ✅ from Immutable.List values + ✅ from ECMAScript Set values +``` +### ✅ packages/pretty-format/src/__tests__/prettyFormat.test.ts +``` +prettyFormat() + ✅ prints empty arguments + ✅ prints arguments + ✅ prints an empty array + ✅ prints an array with items + ✅ prints a empty typed array + ✅ prints a typed array with items + ✅ prints an array buffer + ✅ prints a nested array + ✅ prints true + ✅ prints false + ✅ prints an error + ✅ prints a typed error with a message + ✅ prints a function constructor + ✅ prints an anonymous callback function + ✅ prints an anonymous assigned function + ✅ prints a named function + ✅ prints a named generator function + ✅ can customize function names + ✅ prints Infinity + ✅ prints -Infinity + ✅ prints an empty map + ✅ prints a map with values + ✅ prints a map with non-string keys + ✅ prints NaN + ✅ prints null + ✅ prints a positive number + ✅ prints a negative number + ✅ prints zero + ✅ prints negative zero + ✅ prints a positive bigint + ✅ prints a negative bigint + ✅ prints zero bigint + ✅ prints negative zero bigint + ✅ prints a date + ✅ prints an invalid date + ✅ prints an empty object + ✅ prints an object with properties + ✅ prints an object with properties and symbols + ✅ prints an object without non-enumerable properties which have string key + ✅ prints an object without non-enumerable properties which have symbol key + ✅ prints an object with sorted properties + ✅ prints regular expressions from constructors + ✅ prints regular expressions from literals + ✅ prints regular expressions {escapeRegex: false} + ✅ prints regular expressions {escapeRegex: true} + ✅ escapes regular expressions nested inside object + ✅ prints an empty set + ✅ prints a set with values + ✅ prints a string + ✅ prints and escape a string + ✅ doesn't escape string with {excapeString: false} + ✅ prints a string with escapes + ✅ prints a multiline string + ✅ prints a multiline string as value of object property + ✅ prints a symbol + ✅ prints undefined + ✅ prints a WeakMap + ✅ prints a WeakSet + ✅ prints deeply nested objects + ✅ prints circular references + ✅ prints parallel references + ✅ can customize the max depth + ✅ throws on invalid options + ✅ supports plugins + ✅ supports plugins that return empty string + ✅ throws if plugin does not return a string + ✅ throws PrettyFormatPluginError if test throws an error + ✅ throws PrettyFormatPluginError if print throws an error + ✅ throws PrettyFormatPluginError if serialize throws an error + ✅ supports plugins with deeply nested arrays (#24) + ✅ should call plugins on nested basic values + ✅ prints objects with no constructor + ✅ prints identity-obj-proxy with string constructor + ✅ calls toJSON and prints its return value + ✅ calls toJSON and prints an internal representation. + ✅ calls toJSON only on functions + ✅ does not call toJSON recursively + ✅ calls toJSON on Sets + ✅ disables toJSON calls through options +prettyFormat() indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +prettyFormat() min + ✅ prints some basic values in min mode + ✅ prints some complex values in min mode + ✅ does not allow indent !== 0 in min mode +``` +### ✅ packages/pretty-format/src/__tests__/react.test.tsx +``` +✅ supports a single element with no props or children +✅ supports a single element with non-empty string child +✅ supports a single element with empty string child +✅ supports a single element with non-zero number child +✅ supports a single element with zero number child +✅ supports a single element with mixed children +✅ supports props with strings +✅ supports props with multiline strings +✅ supports props with numbers +✅ supports a single element with a function prop +✅ supports a single element with a object prop +✅ supports an element with and object prop and children +✅ supports an element with complex props and mixed children +✅ escapes children properly +✅ supports everything all together +✅ sorts props in nested components +✅ supports a single element with React elements as props +✅ supports a single element with React elements with props +✅ supports a single element with custom React elements with props +✅ supports a single element with custom React elements with props (using displayName) +✅ supports a single element with custom React elements with props (using anonymous function) +✅ supports a single element with custom React elements with a child +✅ supports undefined element type +✅ supports a fragment with no children +✅ supports a fragment with string child +✅ supports a fragment with element child +✅ supports suspense +✅ supports a single element with React elements with a child +✅ supports a single element with React elements with children +✅ supports a single element with React elements with array children +✅ supports array of elements +✅ min option +✅ ReactElement plugin highlights syntax +✅ ReactTestComponent plugin highlights syntax +✅ throws if theme option is null +✅ throws if theme option is not of type "object" +✅ throws if theme option has value that is undefined in ansi-styles +✅ ReactElement plugin highlights syntax with color from theme option +✅ ReactTestComponent plugin highlights syntax with color from theme option +✅ supports forwardRef with a child +✅ supports context Provider with a child +✅ supports context Consumer with a child +✅ ReactElement removes undefined props +✅ ReactTestComponent removes undefined props +test object for subset match + ✅ undefined props + ✅ undefined children +indent option + ✅ default implicit: 2 spaces + ✅ default explicit: 2 spaces + ✅ non-default: 0 spaces + ✅ non-default: 4 spaces +maxDepth option + ✅ elements + ✅ array of elements +React.memo without displayName + ✅ renders the component name +React.memo with displayName + ✅ renders the displayName of component before memoizing + ✅ renders the displayName of memoized component +``` +### ✅ packages/pretty-format/src/__tests__/ReactElement.test.ts +``` +ReactElement Plugin + ✅ serializes forwardRef without displayName + ✅ serializes forwardRef with displayName + ✅ serializes forwardRef component with displayName ``` \ No newline at end of file diff --git a/__tests__/dart-json.test.ts b/__tests__/dart-json.test.ts index a2b959c..12b664b 100644 --- a/__tests__/dart-json.test.ts +++ b/__tests__/dart-json.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {DartJsonParser} from '../src/parsers/dart-json/dart-json-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('dart-json tests', () => { @@ -66,4 +66,66 @@ describe('dart-json tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DartJsonParser(opts, 'dart') + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DartJsonParser(opts, 'dart') + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dart-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DartJsonParser(opts, 'dart') + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/dotnet-nunit.test.ts b/__tests__/dotnet-nunit.test.ts index e0b4778..6903c5a 100644 --- a/__tests__/dotnet-nunit.test.ts +++ b/__tests__/dotnet-nunit.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {DotnetNunitParser} from '../src/parsers/dotnet-nunit/dotnet-nunit-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('dotnet-nunit tests', () => { @@ -26,4 +26,66 @@ describe('dotnet-nunit tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-nunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetNunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-nunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetNunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-nunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetNunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/dotnet-trx.test.ts b/__tests__/dotnet-trx.test.ts index 498abcb..e7f83ee 100644 --- a/__tests__/dotnet-trx.test.ts +++ b/__tests__/dotnet-trx.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {DotnetTrxParser} from '../src/parsers/dotnet-trx/dotnet-trx-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('dotnet-trx tests', () => { @@ -99,4 +99,66 @@ describe('dotnet-trx tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/java-junit.test.ts b/__tests__/java-junit.test.ts index b70fd21..83a7dec 100644 --- a/__tests__/java-junit.test.ts +++ b/__tests__/java-junit.test.ts @@ -3,20 +3,10 @@ import * as path from 'path' import {JavaJunitParser} from '../src/parsers/java-junit/java-junit-parser' import {ParseOptions} from '../src/test-parser' -import {ReportOptions, getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('java-junit tests', () => { - const reportOpts: ReportOptions = { - listSuites: 'all', - listTests: 'all', - baseUrl: '', - onlySummary: false, - useActionsSummary: true, - badgeTitle: 'tests', - reportTitle: '' - } - it('produces empty test run result when there are no test cases', async () => { const fixturePath = path.join(__dirname, 'fixtures', 'empty', 'java-junit.xml') const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) @@ -136,7 +126,7 @@ describe('java-junit tests', () => { const parser = new JavaJunitParser(opts) const result = await parser.parse(filePath, fileContent) const report = getReport([result], { - ...reportOpts, + ...DEFAULT_OPTIONS, reportTitle }) // Report should have the badge as the first line @@ -155,16 +145,10 @@ describe('java-junit tests', () => { const parser = new JavaJunitParser(opts) const result = await parser.parse(filePath, fileContent) - const reportOpts: ReportOptions = { - listSuites: 'all', - listTests: 'all', - baseUrl: '', - onlySummary: false, - useActionsSummary: true, - badgeTitle: 'tests', + const report = getReport([result], { + ...DEFAULT_OPTIONS, reportTitle: 'My Custom Title' - } - const report = getReport([result], reportOpts) + }) // Report should have the title as the first line expect(report).toMatch(/^# My Custom Title\n/) }) diff --git a/__tests__/jest-junit.test.ts b/__tests__/jest-junit.test.ts index d52c047..f4b8335 100644 --- a/__tests__/jest-junit.test.ts +++ b/__tests__/jest-junit.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {JestJunitParser} from '../src/parsers/jest-junit/jest-junit-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('jest-junit tests', () => { @@ -145,4 +145,66 @@ describe('jest-junit tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/mocha-json.test.ts b/__tests__/mocha-json.test.ts index 05393fa..1272962 100644 --- a/__tests__/mocha-json.test.ts +++ b/__tests__/mocha-json.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {MochaJsonParser} from '../src/parsers/mocha-json/mocha-json-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('mocha-json tests', () => { @@ -64,4 +64,66 @@ describe('mocha-json tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'mocha-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new MochaJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'mocha-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new MochaJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'mocha-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new MochaJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/rspec-json.test.ts b/__tests__/rspec-json.test.ts index f77475a..787420b 100644 --- a/__tests__/rspec-json.test.ts +++ b/__tests__/rspec-json.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {RspecJsonParser} from '../src/parsers/rspec-json/rspec-json-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('rspec-json tests', () => { @@ -42,4 +42,66 @@ describe('rspec-json tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'rspec-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new RspecJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'rspec-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new RspecJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'rspec-json.json') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new RspecJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/__tests__/swift-xunit.test.ts b/__tests__/swift-xunit.test.ts index 474c868..9f063ee 100644 --- a/__tests__/swift-xunit.test.ts +++ b/__tests__/swift-xunit.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {SwiftXunitParser} from '../src/parsers/swift-xunit/swift-xunit-parser' import {ParseOptions} from '../src/test-parser' -import {getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('swift-xunit tests', () => { @@ -27,4 +27,66 @@ describe('swift-xunit tests', () => { fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) + + it('report does not include a title by default', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'swift-xunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new SwiftXunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result]) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it.each([ + ['empty string', ''], + ['space', ' '], + ['tab', '\t'], + ['newline', '\n'] + ])('report does not include a title when configured value is %s', async (_, reportTitle) => { + const fixturePath = path.join(__dirname, 'fixtures', 'swift-xunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new SwiftXunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle + }) + // Report should have the badge as the first line + expect(report).toMatch(/^!\[Tests failed]/) + }) + + it('report includes a custom report title', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'swift-xunit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new SwiftXunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + reportTitle: 'My Custom Title' + }) + // Report should have the title as the first line + expect(report).toMatch(/^# My Custom Title\n/) + }) }) diff --git a/dist/index.js b/dist/index.js index 5a53d66..26cc77d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1803,6 +1803,7 @@ var __importStar = (this && this.__importStar) || (function () { }; })(); Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DEFAULT_OPTIONS = void 0; exports.getReport = getReport; const core = __importStar(__nccwpck_require__(7484)); const markdown_utils_1 = __nccwpck_require__(5129); @@ -1811,7 +1812,7 @@ const parse_utils_1 = __nccwpck_require__(9633); const slugger_1 = __nccwpck_require__(9537); const MAX_REPORT_LENGTH = 65535; const MAX_ACTIONS_SUMMARY_LENGTH = 1048576; -const defaultOptions = { +exports.DEFAULT_OPTIONS = { listSuites: 'all', listTests: 'all', baseUrl: '', @@ -1820,7 +1821,7 @@ const defaultOptions = { badgeTitle: 'tests', reportTitle: '' }; -function getReport(results, options = defaultOptions) { +function getReport(results, options = exports.DEFAULT_OPTIONS) { core.info('Generating check run summary'); applySort(results); const opts = { ...options }; @@ -1841,7 +1842,7 @@ function getReport(results, options = defaultOptions) { core.warning(`Test report summary exceeded limit of ${getMaxReportLength(options)} bytes and will be trimmed`); return trimReport(lines, options); } -function getMaxReportLength(options = defaultOptions) { +function getMaxReportLength(options = exports.DEFAULT_OPTIONS) { return options.useActionsSummary ? MAX_ACTIONS_SUMMARY_LENGTH : MAX_REPORT_LENGTH; } function trimReport(lines, options) { diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 1ed6656..a3385e9 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -18,7 +18,7 @@ export interface ReportOptions { reportTitle: string } -const defaultOptions: ReportOptions = { +export const DEFAULT_OPTIONS: ReportOptions = { listSuites: 'all', listTests: 'all', baseUrl: '', @@ -28,7 +28,7 @@ const defaultOptions: ReportOptions = { reportTitle: '' } -export function getReport(results: TestRunResult[], options: ReportOptions = defaultOptions): string { +export function getReport(results: TestRunResult[], options: ReportOptions = DEFAULT_OPTIONS): string { core.info('Generating check run summary') applySort(results) @@ -55,7 +55,7 @@ export function getReport(results: TestRunResult[], options: ReportOptions = def return trimReport(lines, options) } -function getMaxReportLength(options: ReportOptions = defaultOptions): number { +function getMaxReportLength(options: ReportOptions = DEFAULT_OPTIONS): number { return options.useActionsSummary ? MAX_ACTIONS_SUMMARY_LENGTH : MAX_REPORT_LENGTH } From 7745ff0ec130872676b2337004fe915836c6dfbc Mon Sep 17 00:00:00 2001 From: Shamus Taylor Date: Mon, 21 Apr 2025 15:19:16 -0500 Subject: [PATCH 13/80] Add Golang test parser --- __tests__/__outputs__/golang-json.md | 33 +++++ .../__snapshots__/golang-json.test.ts.snap | 108 +++++++++++++++++ __tests__/fixtures/golang-json.json | 46 +++++++ __tests__/golang-json.test.ts | 29 +++++ package.json | 2 + reports/go/calculator.go | 20 +++ reports/go/calculator_test.go | 77 ++++++++++++ reports/go/go.mod | 3 + src/parsers/golang-json/golang-json-parser.ts | 114 ++++++++++++++++++ src/parsers/golang-json/golang-json-types.ts | 19 +++ 10 files changed, 451 insertions(+) create mode 100644 __tests__/__outputs__/golang-json.md create mode 100644 __tests__/__snapshots__/golang-json.test.ts.snap create mode 100644 __tests__/fixtures/golang-json.json create mode 100644 __tests__/golang-json.test.ts create mode 100644 reports/go/calculator.go create mode 100644 reports/go/calculator_test.go create mode 100644 reports/go/go.mod create mode 100644 src/parsers/golang-json/golang-json-parser.ts create mode 100644 src/parsers/golang-json/golang-json-types.ts diff --git a/__tests__/__outputs__/golang-json.md b/__tests__/__outputs__/golang-json.md new file mode 100644 index 0000000..aaa36ea --- /dev/null +++ b/__tests__/__outputs__/golang-json.md @@ -0,0 +1,33 @@ +![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%205%20failed%2C%201%20skipped-critical) +|Report|Passed|Failed|Skipped|Time| +|:---|---:|---:|---:|---:| +|fixtures/golang-json.json|3 ✅|5 ❌|1 ⚪|4s| +## ❌ fixtures/golang-json.json +**9** tests were completed in **4s** with **3** passed, **5** failed and **1** skipped. +|Test suite|Passed|Failed|Skipped|Time| +|:---|---:|---:|---:|---:| +|[_/home/james_t/git/test-reporter/reports/go](#user-content-r0s0)|3 ✅|5 ❌|1 ⚪|4s| +### ❌ _/home/james_t/git/test-reporter/reports/go +``` +✅ TestPassing +❌ TestFailing + calculator_test.go:19: expected 1+1 = 3, got 2 + +❌ TestPanicInsideFunction + calculator_test.go:71: caught panic: runtime error: integer divide by zero + +❌ TestPanicInsideTest + calculator_test.go:71: caught panic: bad stuff + +⚪ TestSkipped + calculator_test.go:45: skipping test + +❌ TestCases + +TestCases + ✅ 1_+_2_=_3 + ✅ 4_+_7_=_11 + ❌ 2_+_3_=_4 + calculator_test.go:62: expected 2 + 3 = 4, got 5 + +``` \ No newline at end of file diff --git a/__tests__/__snapshots__/golang-json.test.ts.snap b/__tests__/__snapshots__/golang-json.test.ts.snap new file mode 100644 index 0000000..f2e4b04 --- /dev/null +++ b/__tests__/__snapshots__/golang-json.test.ts.snap @@ -0,0 +1,108 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`golang-json tests report from ./reports/dotnet test results matches snapshot 1`] = ` +TestRunResult { + "path": "fixtures/golang-json.json", + "suites": [ + TestSuiteResult { + "groups": [ + TestGroupResult { + "name": null, + "tests": [ + TestCaseResult { + "error": undefined, + "name": "TestPassing", + "result": "success", + "time": 90, + }, + TestCaseResult { + "error": { + "details": "calculator_test.go:19: expected 1+1 = 3, got 2 +", + "message": "calculator_test.go:19: expected 1+1 = 3, got 2 +", + }, + "name": "TestFailing", + "result": "failed", + "time": 760, + }, + TestCaseResult { + "error": { + "details": "calculator_test.go:71: caught panic: runtime error: integer divide by zero +", + "message": "calculator_test.go:71: caught panic: runtime error: integer divide by zero +", + }, + "name": "TestPanicInsideFunction", + "result": "failed", + "time": 0, + }, + TestCaseResult { + "error": { + "details": "calculator_test.go:71: caught panic: bad stuff +", + "message": "calculator_test.go:71: caught panic: bad stuff +", + }, + "name": "TestPanicInsideTest", + "result": "failed", + "time": 0, + }, + TestCaseResult { + "error": { + "details": "calculator_test.go:45: skipping test +", + "message": "calculator_test.go:45: skipping test +", + }, + "name": "TestSkipped", + "result": "skipped", + "time": 110, + }, + TestCaseResult { + "error": { + "details": "", + "message": "", + }, + "name": "TestCases", + "result": "failed", + "time": 1620, + }, + ], + }, + TestGroupResult { + "name": "TestCases", + "tests": [ + TestCaseResult { + "error": undefined, + "name": "1_+_2_=_3", + "result": "success", + "time": 540, + }, + TestCaseResult { + "error": undefined, + "name": "4_+_7_=_11", + "result": "success", + "time": 540, + }, + TestCaseResult { + "error": { + "details": "calculator_test.go:62: expected 2 + 3 = 4, got 5 +", + "message": "calculator_test.go:62: expected 2 + 3 = 4, got 5 +", + }, + "name": "2_+_3_=_4", + "result": "failed", + "time": 530, + }, + ], + }, + ], + "name": "_/home/james_t/git/test-reporter/reports/go", + "totalTime": undefined, + }, + ], + "totalTime": undefined, +} +`; diff --git a/__tests__/fixtures/golang-json.json b/__tests__/fixtures/golang-json.json new file mode 100644 index 0000000..c18d7ef --- /dev/null +++ b/__tests__/fixtures/golang-json.json @@ -0,0 +1,46 @@ +{"Time":"2025-04-21T14:45:43.899731191-05:00","Action":"start","Package":"_/home/james_t/git/test-reporter/reports/go"} +{"Time":"2025-04-21T14:45:43.907303273-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing"} +{"Time":"2025-04-21T14:45:43.907333465-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":"=== RUN TestPassing\n"} +{"Time":"2025-04-21T14:45:43.998551886-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":" calculator_test.go:11: pass!\n"} +{"Time":"2025-04-21T14:45:43.998572844-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":"--- PASS: TestPassing (0.09s)\n"} +{"Time":"2025-04-21T14:45:43.998576971-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Elapsed":0.09} +{"Time":"2025-04-21T14:45:43.998580617-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing"} +{"Time":"2025-04-21T14:45:43.998582298-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":"=== RUN TestFailing\n"} +{"Time":"2025-04-21T14:45:44.763532195-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":" calculator_test.go:19: expected 1+1 = 3, got 2\n"} +{"Time":"2025-04-21T14:45:44.763556975-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":"--- FAIL: TestFailing (0.76s)\n"} +{"Time":"2025-04-21T14:45:44.763560434-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Elapsed":0.76} +{"Time":"2025-04-21T14:45:44.763564534-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction"} +{"Time":"2025-04-21T14:45:44.763566339-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":"=== RUN TestPanicInsideFunction\n"} +{"Time":"2025-04-21T14:45:44.763568422-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":" calculator_test.go:71: caught panic: runtime error: integer divide by zero\n"} +{"Time":"2025-04-21T14:45:44.763571047-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":"--- FAIL: TestPanicInsideFunction (0.00s)\n"} +{"Time":"2025-04-21T14:45:44.763575434-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Elapsed":0} +{"Time":"2025-04-21T14:45:44.763577511-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest"} +{"Time":"2025-04-21T14:45:44.763579734-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":"=== RUN TestPanicInsideTest\n"} +{"Time":"2025-04-21T14:45:44.763584346-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":" calculator_test.go:71: caught panic: bad stuff\n"} +{"Time":"2025-04-21T14:45:44.763592493-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":"--- FAIL: TestPanicInsideTest (0.00s)\n"} +{"Time":"2025-04-21T14:45:44.763595682-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Elapsed":0} +{"Time":"2025-04-21T14:45:44.763598032-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped"} +{"Time":"2025-04-21T14:45:44.763600787-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":"=== RUN TestSkipped\n"} +{"Time":"2025-04-21T14:45:44.875085305-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":" calculator_test.go:45: skipping test\n"} +{"Time":"2025-04-21T14:45:44.875128112-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":"--- SKIP: TestSkipped (0.11s)\n"} +{"Time":"2025-04-21T14:45:44.875136234-05:00","Action":"skip","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Elapsed":0.11} +{"Time":"2025-04-21T14:45:44.87514445-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases"} +{"Time":"2025-04-21T14:45:44.87514908-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Output":"=== RUN TestCases\n"} +{"Time":"2025-04-21T14:45:44.875158116-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3"} +{"Time":"2025-04-21T14:45:44.875163067-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Output":"=== RUN TestCases/1_+_2_=_3\n"} +{"Time":"2025-04-21T14:45:45.413895814-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11"} +{"Time":"2025-04-21T14:45:45.413916191-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Output":"=== RUN TestCases/4_+_7_=_11\n"} +{"Time":"2025-04-21T14:45:45.957801848-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4"} +{"Time":"2025-04-21T14:45:45.957836789-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":"=== RUN TestCases/2_+_3_=_4\n"} +{"Time":"2025-04-21T14:45:46.492673381-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":" calculator_test.go:62: expected 2 + 3 = 4, got 5\n"} +{"Time":"2025-04-21T14:45:46.492759645-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Output":"--- FAIL: TestCases (1.62s)\n"} +{"Time":"2025-04-21T14:45:46.492779916-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Output":" --- PASS: TestCases/1_+_2_=_3 (0.54s)\n"} +{"Time":"2025-04-21T14:45:46.492787539-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Elapsed":0.54} +{"Time":"2025-04-21T14:45:46.492795891-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Output":" --- PASS: TestCases/4_+_7_=_11 (0.54s)\n"} +{"Time":"2025-04-21T14:45:46.492801851-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Elapsed":0.54} +{"Time":"2025-04-21T14:45:46.492806634-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":" --- FAIL: TestCases/2_+_3_=_4 (0.53s)\n"} +{"Time":"2025-04-21T14:45:46.492811453-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Elapsed":0.53} +{"Time":"2025-04-21T14:45:46.49281562-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Elapsed":1.62} +{"Time":"2025-04-21T14:45:46.492821605-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Output":"FAIL\n"} +{"Time":"2025-04-21T14:45:46.493310745-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Output":"FAIL\t_/home/james_t/git/test-reporter/reports/go\t2.593s\n"} +{"Time":"2025-04-21T14:45:46.493343801-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Elapsed":2.594} diff --git a/__tests__/golang-json.test.ts b/__tests__/golang-json.test.ts new file mode 100644 index 0000000..37d45b3 --- /dev/null +++ b/__tests__/golang-json.test.ts @@ -0,0 +1,29 @@ +import * as fs from 'fs' +import * as path from 'path' + +import { GolangJsonParser } from '../src/parsers/golang-json/golang-json-parser' +import { ParseOptions } from '../src/test-parser' +import { getReport } from '../src/report/get-report' +import { normalizeFilePath } from '../src/utils/path-utils' + +describe('golang-json tests', () => { + it('report from ./reports/dotnet test results matches snapshot', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'golang-json.json') + const outputPath = path.join(__dirname, '__outputs__', 'golang-json.md') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, { encoding: 'utf8' }) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: ['calculator.go', 'calculator_test.go'] + } + + const parser = new GolangJsonParser(opts) + const result = await parser.parse(filePath, fileContent) + expect(result).toMatchSnapshot() + + const report = getReport([result]) + fs.mkdirSync(path.dirname(outputPath), { recursive: true }) + fs.writeFileSync(outputPath, report) + }) +}) diff --git a/package.json b/package.json index 96a951e..6c8cdc0 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "dart-fixture": "cd \"reports/dart\" && dart test --file-reporter=\"json:../../__tests__/fixtures/dart-json.json\"", "dotnet-fixture": "dotnet test reports/dotnet/DotnetTests.XUnitTests --logger \"trx;LogFileName=../../../../__tests__/fixtures/dotnet-trx.trx\"", "dotnet-nunit-fixture": "nunit.exe reports/dotnet/DotnetTests.NUnitV3Tests/bin/Debug/netcoreapp3.1/DotnetTests.NUnitV3Tests.dll --result=__tests__/fixtures/dotnet-nunit.xml", + "dotnet-nunit-legacy-fixture": "nunit-console.exe reports/dotnet-nunit-legacy/NUnitLegacy.sln --result=__tests__/fixtures/dotnet-nunit-legacy.xml", + "golang-json-fixture": "go test -v -json -timeout 5s ./reports/go | tee __tests__/fixtures/golang-json.json", "jest-fixture": "cd \"reports/jest\" && npm test", "mocha-fixture": "cd \"reports/mocha\" && npm test" }, diff --git a/reports/go/calculator.go b/reports/go/calculator.go new file mode 100644 index 0000000..c863ae0 --- /dev/null +++ b/reports/go/calculator.go @@ -0,0 +1,20 @@ +package main + +import "errors" + +func CalculatorSum(a, b int) int { + return a + b +} + +func CalculatorDivide(a, b int) int { + return a / b +} + +var ErrDivideByZero = errors.New("divide by zero") + +func CalculatorSafeDivide(a, b int) (int, error) { + if b == 0 { + return 0, ErrDivideByZero + } + return a / b, nil +} diff --git a/reports/go/calculator_test.go b/reports/go/calculator_test.go new file mode 100644 index 0000000..c0649fb --- /dev/null +++ b/reports/go/calculator_test.go @@ -0,0 +1,77 @@ +package main + +import ( + "math/rand" + "testing" + "time" +) + +func TestPassing(t *testing.T) { + randomSleep() + t.Log("pass!") +} + +func TestFailing(t *testing.T) { + randomSleep() + expected := 3 + actual := CalculatorSum(1, 1) + if actual != expected { + t.Fatalf("expected 1+1 = %d, got %d", expected, actual) + } +} + +func TestPanicInsideFunction(t *testing.T) { + defer catchPanics(t) + + expected := 0 + actual := CalculatorDivide(1, 0) + if actual != expected { + t.Fatalf("expected 1/1 = %d, got %d", expected, actual) + } +} + +func TestPanicInsideTest(t *testing.T) { + defer catchPanics(t) + panic("bad stuff") +} + +// Timeouts cause the entire test process to end - so we can't get good output for these +// func TestTimeout(t *testing.T) { +// time.Sleep(time.Second * 5) +// } + +func TestSkipped(t *testing.T) { + randomSleep() + t.Skipf("skipping test") +} + +func TestCases(t *testing.T) { + for _, tc := range []struct { + name string + a, b, c int + }{ + {"1 + 2 = 3", 1, 2, 3}, + {"4 + 7 = 11", 4, 7, 11}, + {"2 + 3 = 4", 2, 3, 4}, + } { + t.Run(tc.name, func(t *testing.T) { + randomSleep() + + c := CalculatorSum(tc.a, tc.b) + if c != tc.c { + t.Fatalf("expected %s, got %d", tc.name, c) + } + }) + } +} + +func catchPanics(t *testing.T) { + err := recover() + if err != nil { + t.Fatalf("caught panic: %v", err) + } +} + +func randomSleep() { + time.Sleep(time.Duration(rand.Int63n(int64(time.Second)))) +} diff --git a/reports/go/go.mod b/reports/go/go.mod new file mode 100644 index 0000000..4b3a577 --- /dev/null +++ b/reports/go/go.mod @@ -0,0 +1,3 @@ +module test_reporter_example + +go 1.24.2 diff --git a/src/parsers/golang-json/golang-json-parser.ts b/src/parsers/golang-json/golang-json-parser.ts new file mode 100644 index 0000000..b79e1f9 --- /dev/null +++ b/src/parsers/golang-json/golang-json-parser.ts @@ -0,0 +1,114 @@ +import { ParseOptions, TestParser } from '../../test-parser' + +import { GoTestEvent } from './golang-json-types' +import { getExceptionSource } from '../../utils/node-utils' +import { getBasePath, normalizeFilePath } from '../../utils/path-utils' + +import { + TestExecutionResult, + TestRunResult, + TestSuiteResult, + TestGroupResult, + TestCaseResult, + TestCaseError +} from '../../test-results' + +export class GolangJsonParser implements TestParser { + assumedWorkDir: string | undefined + + constructor(readonly options: ParseOptions) { } + + async parse(path: string, content: string): Promise { + const events = await this.getGolangTestEvents(path, content) + return this.getTestRunResult(path, events) + } + + private async getGolangTestEvents(path: string, content: string): Promise { + return content.trim().split('\n').map((line, index) => { + try { + return JSON.parse(line) as GoTestEvent + } catch (e) { + throw new Error(`Invalid JSON at ${path} line ${index + 1}\n\n${e}`) + } + }) + } + + private getTestRunResult(path: string, events: GoTestEvent[]): TestRunResult { + const eventGroups = new Map() + for (const event of events) { + if (!event.Test) { + continue + } + const k = `${event.Package}/${event.Test}` + let g = eventGroups.get(k) + if (!g) { + g = [] + eventGroups.set(k, g) + } + g.push(event) + } + + const suites: TestSuiteResult[] = [] + + for (const eventGroup of eventGroups.values()) { + const event = eventGroup[0] + + let suite = suites.find(s => s.name === event.Package) + if (!suite) { + suite = new TestSuiteResult(event.Package, []) + suites.push(suite) + } + + if (!event.Test) { + continue + } + + let groupName: string | null + let testName: string + [groupName, testName] = event.Test.split('/', 2) + if (!testName) { + testName = groupName + groupName = null + } + + let group = suite.groups.find(g => g.name === groupName) + if (!group) { + group = new TestGroupResult(groupName, []) + suite.groups.push(group) + } + + const lastEvent = eventGroup.at(-1)! + + const result: TestExecutionResult = lastEvent.Action === 'pass' ? 'success' + : lastEvent.Action === 'skip' ? 'skipped' + : 'failed' + if (lastEvent.Elapsed === undefined) { + throw new Error('missing elapsed on final test event') + } + const time: number = lastEvent.Elapsed * 1000 + + let error: TestCaseError | undefined = undefined + if (result !== 'success') { + const outputEvents = eventGroup + .filter(e => e.Action === 'output') + .map(e => e.Output ?? '') + // Go output prepends indentation to help group tests - remove it + .map(o => o.replace(/^ /, '')) + + // First and last lines will be generic "test started" and "test finished" lines - remove them + outputEvents.splice(0, 1) + outputEvents.splice(-1, 1) + + const details = outputEvents.join('') + error = { + message: details, + details: details + } + } + + group.tests.push(new TestCaseResult(testName, result, time, error)) + } + + return new TestRunResult(path, suites) + } +} diff --git a/src/parsers/golang-json/golang-json-types.ts b/src/parsers/golang-json/golang-json-types.ts new file mode 100644 index 0000000..f27fa86 --- /dev/null +++ b/src/parsers/golang-json/golang-json-types.ts @@ -0,0 +1,19 @@ +export type GoTestAction = 'start' + | 'run' + | 'pause' + | 'cont' + | 'pass' + | 'bench' + | 'fail' + | 'output' + | 'skip' + +export type GoTestEvent = { + Time: string + Action: GoTestAction + Package: string + Test?: string + Elapsed?: number + Output?: string + FailedBuild?: string +} From 34f1c566ff37c6839418102e3cc501d38efe2a6d Mon Sep 17 00:00:00 2001 From: Shamus Taylor Date: Mon, 21 Apr 2025 15:26:42 -0500 Subject: [PATCH 14/80] register parser and update readme --- README.md | 9 +++++++++ src/main.ts | 3 +++ 2 files changed, 12 insertions(+) diff --git a/README.md b/README.md index e5abd85..676d21e 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ This [Github Action](https://github.com/features/actions) displays test results - .NET / [dotnet test](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test#examples) ( [xUnit](https://xunit.net/) / [NUnit](https://nunit.org/) / [MSTest](https://github.com/Microsoft/testfx-docs) ) - Dart / [test](https://pub.dev/packages/test) - Flutter / [test](https://pub.dev/packages/test) +- Go / [go test](https://pkg.go.dev/testing) - Java / [JUnit](https://junit.org/) - JavaScript / [JEST](https://jestjs.io/) / [Mocha](https://mochajs.org/) - Swift / xUnit @@ -140,6 +141,7 @@ jobs: # dotnet-nunit # dotnet-trx # flutter-json + # golang-json # java-junit # jest-junit # mocha-json @@ -278,6 +280,13 @@ For more information see:
+
+ golang-json + +You must use the `-json` flag and output the results to a file (ex: `go test -json > testresults.json`) + +
+
java-junit (Experimental) diff --git a/src/main.ts b/src/main.ts index 109d75b..b018390 100644 --- a/src/main.ts +++ b/src/main.ts @@ -13,6 +13,7 @@ import {getReport} from './report/get-report' import {DartJsonParser} from './parsers/dart-json/dart-json-parser' import {DotnetNunitParser} from './parsers/dotnet-nunit/dotnet-nunit-parser' import {DotnetTrxParser} from './parsers/dotnet-trx/dotnet-trx-parser' +import {GolangJsonParser} from './parsers/golang-json/golang-json-parser' import {JavaJunitParser} from './parsers/java-junit/java-junit-parser' import {JestJunitParser} from './parsers/jest-junit/jest-junit-parser' import {MochaJsonParser} from './parsers/mocha-json/mocha-json-parser' @@ -248,6 +249,8 @@ class TestReporter { return new DotnetNunitParser(options) case 'dotnet-trx': return new DotnetTrxParser(options) + case 'golang-json': + return new GolangJsonParser(options) case 'flutter-json': return new DartJsonParser(options, 'flutter') case 'java-junit': From a0398fb7ddd193fcf3eb2a1fbb6c7bca62915932 Mon Sep 17 00:00:00 2001 From: Shamus Taylor Date: Tue, 22 Apr 2025 09:04:22 -0500 Subject: [PATCH 15/80] Correct behavior for test cases with slashes --- __tests__/__outputs__/golang-json.md | 19 ++-- .../__snapshots__/golang-json.test.ts.snap | 49 +++++--- __tests__/fixtures/golang-json.json | 105 ++++++++++-------- __tests__/golang-json.test.ts | 12 +- dist/index.js | 103 +++++++++++++++++ reports/go/calculator_test.go | 13 ++- src/parsers/golang-json/golang-json-parser.ts | 5 +- 7 files changed, 228 insertions(+), 78 deletions(-) diff --git a/__tests__/__outputs__/golang-json.md b/__tests__/__outputs__/golang-json.md index aaa36ea..b3640d8 100644 --- a/__tests__/__outputs__/golang-json.md +++ b/__tests__/__outputs__/golang-json.md @@ -1,12 +1,12 @@ -![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%205%20failed%2C%201%20skipped-critical) +![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%206%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/golang-json.json|3 ✅|5 ❌|1 ⚪|4s| +|fixtures/golang-json.json|5 ✅|6 ❌|1 ⚪|6s| ## ❌ fixtures/golang-json.json -**9** tests were completed in **4s** with **3** passed, **5** failed and **1** skipped. +**12** tests were completed in **6s** with **5** passed, **6** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|[_/home/james_t/git/test-reporter/reports/go](#user-content-r0s0)|3 ✅|5 ❌|1 ⚪|4s| +|[_/home/james_t/git/test-reporter/reports/go](#user-content-r0s0)|5 ✅|6 ❌|1 ⚪|6s| ### ❌ _/home/james_t/git/test-reporter/reports/go ``` ✅ TestPassing @@ -14,10 +14,10 @@ calculator_test.go:19: expected 1+1 = 3, got 2 ❌ TestPanicInsideFunction - calculator_test.go:71: caught panic: runtime error: integer divide by zero + calculator_test.go:76: caught panic: runtime error: integer divide by zero ❌ TestPanicInsideTest - calculator_test.go:71: caught panic: bad stuff + calculator_test.go:76: caught panic: bad stuff ⚪ TestSkipped calculator_test.go:45: skipping test @@ -28,6 +28,11 @@ TestCases ✅ 1_+_2_=_3 ✅ 4_+_7_=_11 ❌ 2_+_3_=_4 - calculator_test.go:62: expected 2 + 3 = 4, got 5 + calculator_test.go:67: expected 2 + 3 = 4, got 5 + ❌ 1_/_2_=_1 + calculator_test.go:67: expected 1 / 2 = 1, got 0 + + ✅ 9_/_3_=_3 + ✅ 14_/_7_=_2 ``` \ No newline at end of file diff --git a/__tests__/__snapshots__/golang-json.test.ts.snap b/__tests__/__snapshots__/golang-json.test.ts.snap index f2e4b04..75c6de1 100644 --- a/__tests__/__snapshots__/golang-json.test.ts.snap +++ b/__tests__/__snapshots__/golang-json.test.ts.snap @@ -13,7 +13,7 @@ TestRunResult { "error": undefined, "name": "TestPassing", "result": "success", - "time": 90, + "time": 60, }, TestCaseResult { "error": { @@ -24,13 +24,13 @@ TestRunResult { }, "name": "TestFailing", "result": "failed", - "time": 760, + "time": 890, }, TestCaseResult { "error": { - "details": "calculator_test.go:71: caught panic: runtime error: integer divide by zero + "details": "calculator_test.go:76: caught panic: runtime error: integer divide by zero ", - "message": "calculator_test.go:71: caught panic: runtime error: integer divide by zero + "message": "calculator_test.go:76: caught panic: runtime error: integer divide by zero ", }, "name": "TestPanicInsideFunction", @@ -39,9 +39,9 @@ TestRunResult { }, TestCaseResult { "error": { - "details": "calculator_test.go:71: caught panic: bad stuff + "details": "calculator_test.go:76: caught panic: bad stuff ", - "message": "calculator_test.go:71: caught panic: bad stuff + "message": "calculator_test.go:76: caught panic: bad stuff ", }, "name": "TestPanicInsideTest", @@ -57,7 +57,7 @@ TestRunResult { }, "name": "TestSkipped", "result": "skipped", - "time": 110, + "time": 940, }, TestCaseResult { "error": { @@ -66,7 +66,7 @@ TestRunResult { }, "name": "TestCases", "result": "failed", - "time": 1620, + "time": 2250, }, ], }, @@ -77,24 +77,47 @@ TestRunResult { "error": undefined, "name": "1_+_2_=_3", "result": "success", - "time": 540, + "time": 400, }, TestCaseResult { "error": undefined, "name": "4_+_7_=_11", "result": "success", - "time": 540, + "time": 460, }, TestCaseResult { "error": { - "details": "calculator_test.go:62: expected 2 + 3 = 4, got 5 + "details": "calculator_test.go:67: expected 2 + 3 = 4, got 5 ", - "message": "calculator_test.go:62: expected 2 + 3 = 4, got 5 + "message": "calculator_test.go:67: expected 2 + 3 = 4, got 5 ", }, "name": "2_+_3_=_4", "result": "failed", - "time": 530, + "time": 90, + }, + TestCaseResult { + "error": { + "details": "calculator_test.go:67: expected 1 / 2 = 1, got 0 +", + "message": "calculator_test.go:67: expected 1 / 2 = 1, got 0 +", + }, + "name": "1_/_2_=_1", + "result": "failed", + "time": 920, + }, + TestCaseResult { + "error": undefined, + "name": "9_/_3_=_3", + "result": "success", + "time": 340, + }, + TestCaseResult { + "error": undefined, + "name": "14_/_7_=_2", + "result": "success", + "time": 40, }, ], }, diff --git a/__tests__/fixtures/golang-json.json b/__tests__/fixtures/golang-json.json index c18d7ef..421a707 100644 --- a/__tests__/fixtures/golang-json.json +++ b/__tests__/fixtures/golang-json.json @@ -1,46 +1,59 @@ -{"Time":"2025-04-21T14:45:43.899731191-05:00","Action":"start","Package":"_/home/james_t/git/test-reporter/reports/go"} -{"Time":"2025-04-21T14:45:43.907303273-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing"} -{"Time":"2025-04-21T14:45:43.907333465-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":"=== RUN TestPassing\n"} -{"Time":"2025-04-21T14:45:43.998551886-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":" calculator_test.go:11: pass!\n"} -{"Time":"2025-04-21T14:45:43.998572844-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":"--- PASS: TestPassing (0.09s)\n"} -{"Time":"2025-04-21T14:45:43.998576971-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Elapsed":0.09} -{"Time":"2025-04-21T14:45:43.998580617-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing"} -{"Time":"2025-04-21T14:45:43.998582298-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":"=== RUN TestFailing\n"} -{"Time":"2025-04-21T14:45:44.763532195-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":" calculator_test.go:19: expected 1+1 = 3, got 2\n"} -{"Time":"2025-04-21T14:45:44.763556975-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":"--- FAIL: TestFailing (0.76s)\n"} -{"Time":"2025-04-21T14:45:44.763560434-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Elapsed":0.76} -{"Time":"2025-04-21T14:45:44.763564534-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction"} -{"Time":"2025-04-21T14:45:44.763566339-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":"=== RUN TestPanicInsideFunction\n"} -{"Time":"2025-04-21T14:45:44.763568422-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":" calculator_test.go:71: caught panic: runtime error: integer divide by zero\n"} -{"Time":"2025-04-21T14:45:44.763571047-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":"--- FAIL: TestPanicInsideFunction (0.00s)\n"} -{"Time":"2025-04-21T14:45:44.763575434-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Elapsed":0} -{"Time":"2025-04-21T14:45:44.763577511-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest"} -{"Time":"2025-04-21T14:45:44.763579734-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":"=== RUN TestPanicInsideTest\n"} -{"Time":"2025-04-21T14:45:44.763584346-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":" calculator_test.go:71: caught panic: bad stuff\n"} -{"Time":"2025-04-21T14:45:44.763592493-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":"--- FAIL: TestPanicInsideTest (0.00s)\n"} -{"Time":"2025-04-21T14:45:44.763595682-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Elapsed":0} -{"Time":"2025-04-21T14:45:44.763598032-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped"} -{"Time":"2025-04-21T14:45:44.763600787-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":"=== RUN TestSkipped\n"} -{"Time":"2025-04-21T14:45:44.875085305-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":" calculator_test.go:45: skipping test\n"} -{"Time":"2025-04-21T14:45:44.875128112-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":"--- SKIP: TestSkipped (0.11s)\n"} -{"Time":"2025-04-21T14:45:44.875136234-05:00","Action":"skip","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Elapsed":0.11} -{"Time":"2025-04-21T14:45:44.87514445-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases"} -{"Time":"2025-04-21T14:45:44.87514908-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Output":"=== RUN TestCases\n"} -{"Time":"2025-04-21T14:45:44.875158116-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3"} -{"Time":"2025-04-21T14:45:44.875163067-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Output":"=== RUN TestCases/1_+_2_=_3\n"} -{"Time":"2025-04-21T14:45:45.413895814-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11"} -{"Time":"2025-04-21T14:45:45.413916191-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Output":"=== RUN TestCases/4_+_7_=_11\n"} -{"Time":"2025-04-21T14:45:45.957801848-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4"} -{"Time":"2025-04-21T14:45:45.957836789-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":"=== RUN TestCases/2_+_3_=_4\n"} -{"Time":"2025-04-21T14:45:46.492673381-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":" calculator_test.go:62: expected 2 + 3 = 4, got 5\n"} -{"Time":"2025-04-21T14:45:46.492759645-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Output":"--- FAIL: TestCases (1.62s)\n"} -{"Time":"2025-04-21T14:45:46.492779916-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Output":" --- PASS: TestCases/1_+_2_=_3 (0.54s)\n"} -{"Time":"2025-04-21T14:45:46.492787539-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Elapsed":0.54} -{"Time":"2025-04-21T14:45:46.492795891-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Output":" --- PASS: TestCases/4_+_7_=_11 (0.54s)\n"} -{"Time":"2025-04-21T14:45:46.492801851-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Elapsed":0.54} -{"Time":"2025-04-21T14:45:46.492806634-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":" --- FAIL: TestCases/2_+_3_=_4 (0.53s)\n"} -{"Time":"2025-04-21T14:45:46.492811453-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Elapsed":0.53} -{"Time":"2025-04-21T14:45:46.49281562-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Elapsed":1.62} -{"Time":"2025-04-21T14:45:46.492821605-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Output":"FAIL\n"} -{"Time":"2025-04-21T14:45:46.493310745-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Output":"FAIL\t_/home/james_t/git/test-reporter/reports/go\t2.593s\n"} -{"Time":"2025-04-21T14:45:46.493343801-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Elapsed":2.594} +{"Time":"2025-04-22T08:59:55.364618802-05:00","Action":"start","Package":"_/home/james_t/git/test-reporter/reports/go"} +{"Time":"2025-04-22T08:59:55.371779289-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing"} +{"Time":"2025-04-22T08:59:55.371805677-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":"=== RUN TestPassing\n"} +{"Time":"2025-04-22T08:59:55.428201983-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":" calculator_test.go:11: pass!\n"} +{"Time":"2025-04-22T08:59:55.428265529-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Output":"--- PASS: TestPassing (0.06s)\n"} +{"Time":"2025-04-22T08:59:55.428285649-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPassing","Elapsed":0.06} +{"Time":"2025-04-22T08:59:55.428299886-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing"} +{"Time":"2025-04-22T08:59:55.428309029-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":"=== RUN TestFailing\n"} +{"Time":"2025-04-22T08:59:56.317425091-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":" calculator_test.go:19: expected 1+1 = 3, got 2\n"} +{"Time":"2025-04-22T08:59:56.31748077-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Output":"--- FAIL: TestFailing (0.89s)\n"} +{"Time":"2025-04-22T08:59:56.317493452-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestFailing","Elapsed":0.89} +{"Time":"2025-04-22T08:59:56.317506107-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction"} +{"Time":"2025-04-22T08:59:56.317514487-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":"=== RUN TestPanicInsideFunction\n"} +{"Time":"2025-04-22T08:59:56.317530448-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":" calculator_test.go:76: caught panic: runtime error: integer divide by zero\n"} +{"Time":"2025-04-22T08:59:56.317541866-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Output":"--- FAIL: TestPanicInsideFunction (0.00s)\n"} +{"Time":"2025-04-22T08:59:56.317552981-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideFunction","Elapsed":0} +{"Time":"2025-04-22T08:59:56.317561057-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest"} +{"Time":"2025-04-22T08:59:56.317568742-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":"=== RUN TestPanicInsideTest\n"} +{"Time":"2025-04-22T08:59:56.317584113-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":" calculator_test.go:76: caught panic: bad stuff\n"} +{"Time":"2025-04-22T08:59:56.317598524-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Output":"--- FAIL: TestPanicInsideTest (0.00s)\n"} +{"Time":"2025-04-22T08:59:56.317608268-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestPanicInsideTest","Elapsed":0} +{"Time":"2025-04-22T08:59:56.317615472-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped"} +{"Time":"2025-04-22T08:59:56.317623959-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":"=== RUN TestSkipped\n"} +{"Time":"2025-04-22T08:59:57.256475698-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":" calculator_test.go:45: skipping test\n"} +{"Time":"2025-04-22T08:59:57.256536372-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Output":"--- SKIP: TestSkipped (0.94s)\n"} +{"Time":"2025-04-22T08:59:57.256549142-05:00","Action":"skip","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestSkipped","Elapsed":0.94} +{"Time":"2025-04-22T08:59:57.256562053-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases"} +{"Time":"2025-04-22T08:59:57.256569388-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Output":"=== RUN TestCases\n"} +{"Time":"2025-04-22T08:59:57.256580104-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3"} +{"Time":"2025-04-22T08:59:57.256587408-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Output":"=== RUN TestCases/1_+_2_=_3\n"} +{"Time":"2025-04-22T08:59:57.653005399-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11"} +{"Time":"2025-04-22T08:59:57.653036336-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Output":"=== RUN TestCases/4_+_7_=_11\n"} +{"Time":"2025-04-22T08:59:58.112825221-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4"} +{"Time":"2025-04-22T08:59:58.112858016-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":"=== RUN TestCases/2_+_3_=_4\n"} +{"Time":"2025-04-22T08:59:58.201204209-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":" calculator_test.go:67: expected 2 + 3 = 4, got 5\n"} +{"Time":"2025-04-22T08:59:58.201245827-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_/_2_=_1"} +{"Time":"2025-04-22T08:59:58.201255566-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_/_2_=_1","Output":"=== RUN TestCases/1_/_2_=_1\n"} +{"Time":"2025-04-22T08:59:59.119852965-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_/_2_=_1","Output":" calculator_test.go:67: expected 1 / 2 = 1, got 0\n"} +{"Time":"2025-04-22T08:59:59.119877603-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/9_/_3_=_3"} +{"Time":"2025-04-22T08:59:59.119879955-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/9_/_3_=_3","Output":"=== RUN TestCases/9_/_3_=_3\n"} +{"Time":"2025-04-22T08:59:59.460576385-05:00","Action":"run","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/14_/_7_=_2"} +{"Time":"2025-04-22T08:59:59.460607599-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/14_/_7_=_2","Output":"=== RUN TestCases/14_/_7_=_2\n"} +{"Time":"2025-04-22T08:59:59.504952672-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Output":"--- FAIL: TestCases (2.25s)\n"} +{"Time":"2025-04-22T08:59:59.504995938-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Output":" --- PASS: TestCases/1_+_2_=_3 (0.40s)\n"} +{"Time":"2025-04-22T08:59:59.505006062-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_+_2_=_3","Elapsed":0.4} +{"Time":"2025-04-22T08:59:59.505017551-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Output":" --- PASS: TestCases/4_+_7_=_11 (0.46s)\n"} +{"Time":"2025-04-22T08:59:59.505026099-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/4_+_7_=_11","Elapsed":0.46} +{"Time":"2025-04-22T08:59:59.505033963-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Output":" --- FAIL: TestCases/2_+_3_=_4 (0.09s)\n"} +{"Time":"2025-04-22T08:59:59.505042238-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/2_+_3_=_4","Elapsed":0.09} +{"Time":"2025-04-22T08:59:59.505050917-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_/_2_=_1","Output":" --- FAIL: TestCases/1_/_2_=_1 (0.92s)\n"} +{"Time":"2025-04-22T08:59:59.505059901-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/1_/_2_=_1","Elapsed":0.92} +{"Time":"2025-04-22T08:59:59.505068125-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/9_/_3_=_3","Output":" --- PASS: TestCases/9_/_3_=_3 (0.34s)\n"} +{"Time":"2025-04-22T08:59:59.505076976-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/9_/_3_=_3","Elapsed":0.34} +{"Time":"2025-04-22T08:59:59.5050845-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/14_/_7_=_2","Output":" --- PASS: TestCases/14_/_7_=_2 (0.04s)\n"} +{"Time":"2025-04-22T08:59:59.505091554-05:00","Action":"pass","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases/14_/_7_=_2","Elapsed":0.04} +{"Time":"2025-04-22T08:59:59.505098998-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Test":"TestCases","Elapsed":2.25} +{"Time":"2025-04-22T08:59:59.505107502-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Output":"FAIL\n"} +{"Time":"2025-04-22T08:59:59.505552861-05:00","Action":"output","Package":"_/home/james_t/git/test-reporter/reports/go","Output":"FAIL\t_/home/james_t/git/test-reporter/reports/go\t4.141s\n"} +{"Time":"2025-04-22T08:59:59.505584529-05:00","Action":"fail","Package":"_/home/james_t/git/test-reporter/reports/go","Elapsed":4.141} diff --git a/__tests__/golang-json.test.ts b/__tests__/golang-json.test.ts index 37d45b3..0bfdd86 100644 --- a/__tests__/golang-json.test.ts +++ b/__tests__/golang-json.test.ts @@ -1,17 +1,17 @@ import * as fs from 'fs' import * as path from 'path' -import { GolangJsonParser } from '../src/parsers/golang-json/golang-json-parser' -import { ParseOptions } from '../src/test-parser' -import { getReport } from '../src/report/get-report' -import { normalizeFilePath } from '../src/utils/path-utils' +import {GolangJsonParser} from '../src/parsers/golang-json/golang-json-parser' +import {ParseOptions} from '../src/test-parser' +import {getReport} from '../src/report/get-report' +import {normalizeFilePath} from '../src/utils/path-utils' describe('golang-json tests', () => { it('report from ./reports/dotnet test results matches snapshot', async () => { const fixturePath = path.join(__dirname, 'fixtures', 'golang-json.json') const outputPath = path.join(__dirname, '__outputs__', 'golang-json.md') const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) - const fileContent = fs.readFileSync(fixturePath, { encoding: 'utf8' }) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) const opts: ParseOptions = { parseErrors: true, @@ -23,7 +23,7 @@ describe('golang-json tests', () => { expect(result).toMatchSnapshot() const report = getReport([result]) - fs.mkdirSync(path.dirname(outputPath), { recursive: true }) + fs.mkdirSync(path.dirname(outputPath), {recursive: true}) fs.writeFileSync(outputPath, report) }) }) diff --git a/dist/index.js b/dist/index.js index 26cc77d..94ba8b0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -273,6 +273,7 @@ const get_report_1 = __nccwpck_require__(7070); const dart_json_parser_1 = __nccwpck_require__(1254); const dotnet_nunit_parser_1 = __nccwpck_require__(6394); const dotnet_trx_parser_1 = __nccwpck_require__(1658); +const golang_json_parser_1 = __nccwpck_require__(5162); const java_junit_parser_1 = __nccwpck_require__(8342); const jest_junit_parser_1 = __nccwpck_require__(1042); const mocha_json_parser_1 = __nccwpck_require__(5402); @@ -475,6 +476,8 @@ class TestReporter { return new dotnet_nunit_parser_1.DotnetNunitParser(options); case 'dotnet-trx': return new dotnet_trx_parser_1.DotnetTrxParser(options); + case 'golang-json': + return new golang_json_parser_1.GolangJsonParser(options); case 'flutter-json': return new dart_json_parser_1.DartJsonParser(options, 'flutter'); case 'java-junit': @@ -1066,6 +1069,106 @@ class DotnetTrxParser { exports.DotnetTrxParser = DotnetTrxParser; +/***/ }), + +/***/ 5162: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GolangJsonParser = void 0; +const test_results_1 = __nccwpck_require__(613); +class GolangJsonParser { + options; + assumedWorkDir; + constructor(options) { + this.options = options; + } + async parse(path, content) { + const events = await this.getGolangTestEvents(path, content); + return this.getTestRunResult(path, events); + } + async getGolangTestEvents(path, content) { + return content.trim().split('\n').map((line, index) => { + try { + return JSON.parse(line); + } + catch (e) { + throw new Error(`Invalid JSON at ${path} line ${index + 1}\n\n${e}`); + } + }); + } + getTestRunResult(path, events) { + const eventGroups = new Map(); + for (const event of events) { + if (!event.Test) { + continue; + } + const k = `${event.Package}/${event.Test}`; + let g = eventGroups.get(k); + if (!g) { + g = []; + eventGroups.set(k, g); + } + g.push(event); + } + const suites = []; + for (const eventGroup of eventGroups.values()) { + const event = eventGroup[0]; + let suite = suites.find(s => s.name === event.Package); + if (!suite) { + suite = new test_results_1.TestSuiteResult(event.Package, []); + suites.push(suite); + } + if (!event.Test) { + continue; + } + let groupName; + let rest; + [groupName, ...rest] = event.Test.split('/'); + let testName = rest.join('/'); + if (!testName) { + testName = groupName; + groupName = null; + } + let group = suite.groups.find(g => g.name === groupName); + if (!group) { + group = new test_results_1.TestGroupResult(groupName, []); + suite.groups.push(group); + } + const lastEvent = eventGroup.at(-1); + const result = lastEvent.Action === 'pass' ? 'success' + : lastEvent.Action === 'skip' ? 'skipped' + : 'failed'; + if (lastEvent.Elapsed === undefined) { + throw new Error('missing elapsed on final test event'); + } + const time = lastEvent.Elapsed * 1000; + let error = undefined; + if (result !== 'success') { + const outputEvents = eventGroup + .filter(e => e.Action === 'output') + .map(e => e.Output ?? '') + // Go output prepends indentation to help group tests - remove it + .map(o => o.replace(/^ /, '')); + // First and last lines will be generic "test started" and "test finished" lines - remove them + outputEvents.splice(0, 1); + outputEvents.splice(-1, 1); + const details = outputEvents.join(''); + error = { + message: details, + details: details + }; + } + group.tests.push(new test_results_1.TestCaseResult(testName, result, time, error)); + } + return new test_results_1.TestRunResult(path, suites); + } +} +exports.GolangJsonParser = GolangJsonParser; + + /***/ }), /***/ 8342: diff --git a/reports/go/calculator_test.go b/reports/go/calculator_test.go index c0649fb..d9f6128 100644 --- a/reports/go/calculator_test.go +++ b/reports/go/calculator_test.go @@ -48,16 +48,21 @@ func TestSkipped(t *testing.T) { func TestCases(t *testing.T) { for _, tc := range []struct { name string + fn func(int, int) int a, b, c int }{ - {"1 + 2 = 3", 1, 2, 3}, - {"4 + 7 = 11", 4, 7, 11}, - {"2 + 3 = 4", 2, 3, 4}, + {"1 + 2 = 3", CalculatorSum, 1, 2, 3}, + {"4 + 7 = 11", CalculatorSum, 4, 7, 11}, + {"2 + 3 = 4", CalculatorSum, 2, 3, 4}, + + {"1 / 2 = 1", CalculatorDivide, 1, 2, 1}, + {"9 / 3 = 3", CalculatorDivide, 9, 3, 3}, + {"14 / 7 = 2", CalculatorDivide, 14, 7, 2}, } { t.Run(tc.name, func(t *testing.T) { randomSleep() - c := CalculatorSum(tc.a, tc.b) + c := tc.fn(tc.a, tc.b) if c != tc.c { t.Fatalf("expected %s, got %d", tc.name, c) } diff --git a/src/parsers/golang-json/golang-json-parser.ts b/src/parsers/golang-json/golang-json-parser.ts index b79e1f9..bc20821 100644 --- a/src/parsers/golang-json/golang-json-parser.ts +++ b/src/parsers/golang-json/golang-json-parser.ts @@ -64,8 +64,9 @@ export class GolangJsonParser implements TestParser { } let groupName: string | null - let testName: string - [groupName, testName] = event.Test.split('/', 2) + let rest: string[] + [groupName, ...rest] = event.Test.split('/') + let testName = rest.join('/') if (!testName) { testName = groupName groupName = null From 4a3cfcde80f8e0d3ac04903a9ad443032d5a919e Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 17 May 2025 14:04:03 +0200 Subject: [PATCH 16/80] Upgrade `typescript` to v5.8.3 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbd39e9..bc11a69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "js-yaml": "^4.1.0", "prettier": "^3.5.3", "ts-jest": "^29.2.6", - "typescript": "^5.5.4" + "typescript": "^5.8.3" }, "engines": { "node": ">=20" @@ -7664,9 +7664,9 @@ } }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 6c8cdc0..e5ab6a6 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "js-yaml": "^4.1.0", "prettier": "^3.5.3", "ts-jest": "^29.2.6", - "typescript": "^5.5.4" + "typescript": "^5.8.3" }, "jest-junit": { "suiteName": "jest tests", From ebe4a9b00577f7fc0e621278fe9ae4fbb17a1e2c Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 17 May 2025 14:06:25 +0200 Subject: [PATCH 17/80] Upgrade npm packages --- package-lock.json | 648 ++++++++++++++++++++++++++++++++++++---------- package.json | 10 +- tsconfig.json | 1 + 3 files changed, 524 insertions(+), 135 deletions(-) diff --git a/package-lock.json b/package-lock.json index bc11a69..6529743 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@actions/core": "^1.11.1", "@actions/exec": "^1.1.1", - "@actions/github": "^6.0.0", + "@actions/github": "^6.0.1", "adm-zip": "^0.5.16", "fast-glob": "^3.3.3", "got": "^11.8.6", @@ -22,7 +22,7 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^29.5.14", - "@types/node": "^20.17.24", + "@types/node": "^20.17.47", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -30,17 +30,17 @@ "@vercel/ncc": "^0.38.3", "eol-converter-cli": "^1.1.0", "eslint": "^8.57.1", - "eslint-import-resolver-typescript": "^3.8.5", + "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-github": "^4.10.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-prettier": "^5.2.3", + "eslint-plugin-prettier": "^5.4.0", "jest": "^29.7.0", "jest-circus": "^29.7.0", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.5.3", - "ts-jest": "^29.2.6", + "ts-jest": "^29.3.4", "typescript": "^5.8.3" }, "engines": { @@ -75,14 +75,18 @@ } }, "node_modules/@actions/github": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz", - "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.1.tgz", + "integrity": "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==", + "license": "MIT", "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + "@octokit/plugin-paginate-rest": "^9.2.2", + "@octokit/plugin-rest-endpoint-methods": "^10.4.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "undici": "^5.28.5" } }, "node_modules/@actions/http-client": { @@ -773,6 +777,40 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1315,6 +1353,19 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz", + "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1361,20 +1412,22 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.2.tgz", - "integrity": "sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz", + "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", + "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -1383,11 +1436,12 @@ } }, "node_modules/@octokit/endpoint": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", - "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1395,12 +1449,13 @@ } }, "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", + "license": "MIT", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1408,46 +1463,80 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", - "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", - "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz", + "integrity": "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.4.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.2.0.tgz", - "integrity": "sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.3.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/request": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.6.tgz", - "integrity": "sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", + "license": "MIT", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1455,11 +1544,12 @@ } }, "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -1468,11 +1558,12 @@ } }, "node_modules/@octokit/types": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz", - "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^19.1.0" + "@octokit/openapi-types": "^24.2.0" } }, "node_modules/@octokit/webhooks-types": { @@ -1483,16 +1574,16 @@ "license": "MIT" }, "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/pkgr" } }, "node_modules/@rtsao/scc": { @@ -1548,6 +1639,17 @@ "node": ">=10" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/adm-zip": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.7.tgz", @@ -1674,9 +1776,9 @@ } }, "node_modules/@types/node": { - "version": "20.17.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.24.tgz", - "integrity": "sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==", + "version": "20.17.47", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.47.tgz", + "integrity": "sha512-3dLX0Upo1v7RvUimvxLeXqwrfyKxUINk0EAM83swP2mlSUcwV73sZy8XhNz8bcZ3VbsfQyC/y6jRdL5tgCNpDQ==", "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -1952,6 +2054,247 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.2.tgz", + "integrity": "sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.2.tgz", + "integrity": "sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.2.tgz", + "integrity": "sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.2.tgz", + "integrity": "sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.2.tgz", + "integrity": "sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.2.tgz", + "integrity": "sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.2.tgz", + "integrity": "sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.2.tgz", + "integrity": "sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.2.tgz", + "integrity": "sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.2.tgz", + "integrity": "sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.2.tgz", + "integrity": "sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.2.tgz", + "integrity": "sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.2.tgz", + "integrity": "sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.2.tgz", + "integrity": "sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.9" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.2.tgz", + "integrity": "sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.2.tgz", + "integrity": "sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.2.tgz", + "integrity": "sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@vercel/ncc": { "version": "0.38.3", "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz", @@ -2408,7 +2751,8 @@ "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "license": "Apache-2.0" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -2948,7 +3292,8 @@ "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "license": "ISC" }, "node_modules/dequal": { "version": "2.0.3", @@ -3065,19 +3410,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eol": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", @@ -3409,25 +3741,25 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.8.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.8.5.tgz", - "integrity": "sha512-0ZRnzOqKc7TRm85w6REOUkVLHevN6nWd/xZsmKhSD/dcDktoxQaQAg59e5EK/QEsGFf7o5JSpE6qTwCEz0WjTw==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", "dev": true, "license": "ISC", "dependencies": { "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", + "debug": "^4.4.0", "get-tsconfig": "^4.10.0", - "is-bun-module": "^1.0.2", - "stable-hash": "^0.0.4", - "tinyglobby": "^0.2.12" + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://opencollective.com/eslint-import-resolver-typescript" }, "peerDependencies": { "eslint": "*", @@ -3705,14 +4037,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", - "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", + "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "synckit": "^0.11.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -3723,7 +4055,7 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": "*", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -3979,9 +4311,9 @@ } }, "node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4704,13 +5036,13 @@ } }, "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.6.3" + "semver": "^7.7.1" } }, "node_modules/is-callable": { @@ -6087,6 +6419,22 @@ "dev": true, "license": "MIT" }, + "node_modules/napi-postinstall": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz", + "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6953,9 +7301,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { @@ -7158,9 +7506,9 @@ "dev": true }, "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", "dev": true, "license": "MIT" }, @@ -7354,29 +7702,19 @@ } }, "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz", + "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" + "url": "https://opencollective.com/synckit" } }, "node_modules/test-exclude": { @@ -7400,13 +7738,13 @@ "dev": true }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2" }, "engines": { @@ -7456,9 +7794,9 @@ } }, "node_modules/ts-jest": { - "version": "29.2.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.6.tgz", - "integrity": "sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==", + "version": "29.3.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz", + "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==", "dev": true, "license": "MIT", "dependencies": { @@ -7469,7 +7807,8 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.1", + "semver": "^7.7.2", + "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "bin": { @@ -7504,6 +7843,19 @@ } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -7542,7 +7894,8 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "license": "0BSD" + "license": "0BSD", + "optional": true }, "node_modules/tunnel": { "version": "0.0.6", @@ -7697,9 +8050,10 @@ } }, "node_modules/undici": { - "version": "5.28.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", - "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -7716,7 +8070,41 @@ "node_modules/universal-user-agent": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "license": "ISC" + }, + "node_modules/unrs-resolver": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.2.tgz", + "integrity": "sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/JounQin" + }, + "optionalDependencies": { + "@unrs/resolver-binding-darwin-arm64": "1.7.2", + "@unrs/resolver-binding-darwin-x64": "1.7.2", + "@unrs/resolver-binding-freebsd-x64": "1.7.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.7.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.7.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.7.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.7.2", + "@unrs/resolver-binding-linux-x64-musl": "1.7.2", + "@unrs/resolver-binding-wasm32-wasi": "1.7.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.7.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.7.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.7.2" + } }, "node_modules/update-browserslist-db": { "version": "1.0.13", diff --git a/package.json b/package.json index e5ab6a6..3be3a88 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "dependencies": { "@actions/core": "^1.11.1", "@actions/exec": "^1.1.1", - "@actions/github": "^6.0.0", + "@actions/github": "^6.0.1", "adm-zip": "^0.5.16", "fast-glob": "^3.3.3", "got": "^11.8.6", @@ -48,7 +48,7 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^29.5.14", - "@types/node": "^20.17.24", + "@types/node": "^20.17.47", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -56,17 +56,17 @@ "@vercel/ncc": "^0.38.3", "eol-converter-cli": "^1.1.0", "eslint": "^8.57.1", - "eslint-import-resolver-typescript": "^3.8.5", + "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-github": "^4.10.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-prettier": "^5.2.3", + "eslint-plugin-prettier": "^5.4.0", "jest": "^29.7.0", "jest-circus": "^29.7.0", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.5.3", - "ts-jest": "^29.2.6", + "ts-jest": "^29.3.4", "typescript": "^5.8.3" }, "jest-junit": { diff --git a/tsconfig.json b/tsconfig.json index 1408a09..fcea80f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ "esModuleInterop": true, "skipLibCheck": true, "moduleResolution": "node16", + "isolatedModules": true, "outDir": "./lib", "rootDir": "./src", From b0baeedf4a29ed72474c74d223801b60ae031fc4 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 17 May 2025 14:06:57 +0200 Subject: [PATCH 18/80] Rebuild dist --- dist/index.js | 502 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 402 insertions(+), 100 deletions(-) diff --git a/dist/index.js b/dist/index.js index 94ba8b0..9cb9528 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4567,6 +4567,7 @@ class Context { this.action = process.env.GITHUB_ACTION; this.actor = process.env.GITHUB_ACTOR; this.job = process.env.GITHUB_JOB; + this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10); this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; @@ -7152,11 +7153,11 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var dist_src_exports = {}; -__export(dist_src_exports, { +var index_exports = {}; +__export(index_exports, { Octokit: () => Octokit }); -module.exports = __toCommonJS(dist_src_exports); +module.exports = __toCommonJS(index_exports); var import_universal_user_agent = __nccwpck_require__(3843); var import_before_after_hook = __nccwpck_require__(2732); var import_request = __nccwpck_require__(8636); @@ -7164,7 +7165,7 @@ var import_graphql = __nccwpck_require__(7); var import_auth_token = __nccwpck_require__(7864); // pkg/dist-src/version.js -var VERSION = "5.0.2"; +var VERSION = "5.2.1"; // pkg/dist-src/index.js var noop = () => { @@ -7331,7 +7332,7 @@ module.exports = __toCommonJS(dist_src_exports); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "9.0.4"; +var VERSION = "9.0.6"; // pkg/dist-src/defaults.js var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; @@ -7436,9 +7437,9 @@ function addQueryParameters(url, parameters) { } // pkg/dist-src/util/extract-url-variable-names.js -var urlVariableRegex = /\{[^}]+\}/g; +var urlVariableRegex = /\{[^{}}]+\}/g; function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); + return variableName.replace(/(?:^\W+)|(?:(? { const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; return `application/vnd.github.${preview}-preview${format}`; @@ -7705,18 +7706,18 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var dist_src_exports = {}; -__export(dist_src_exports, { +var index_exports = {}; +__export(index_exports, { GraphqlResponseError: () => GraphqlResponseError, graphql: () => graphql2, withCustomRequest: () => withCustomRequest }); -module.exports = __toCommonJS(dist_src_exports); +module.exports = __toCommonJS(index_exports); var import_request3 = __nccwpck_require__(8636); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "7.0.2"; +var VERSION = "7.1.1"; // pkg/dist-src/with-defaults.js var import_request2 = __nccwpck_require__(8636); @@ -7764,8 +7765,7 @@ function graphql(request2, query, options) { ); } for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) - continue; + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; return Promise.reject( new Error( `[@octokit/graphql] "${key}" cannot be used as variable name` @@ -7873,7 +7873,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "9.1.5"; +var VERSION = "9.2.2"; // pkg/dist-src/normalize-paginated-list-response.js function normalizePaginatedListResponse(response) { @@ -7921,7 +7921,7 @@ function iterator(octokit, route, parameters) { const response = await requestMethod({ method, url, headers }); const normalizedResponse = normalizePaginatedListResponse(response); url = ((normalizedResponse.headers.link || "").match( - /<([^>]+)>;\s*rel="next"/ + /<([^<>]+)>;\s*rel="next"/ ) || [])[1]; return { value: normalizedResponse }; } catch (error) { @@ -8034,6 +8034,8 @@ var paginatingEndpoints = [ "GET /orgs/{org}/members/{username}/codespaces", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", + "GET /orgs/{org}/organization-roles/{role_id}/teams", + "GET /orgs/{org}/organization-roles/{role_id}/users", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", @@ -8270,7 +8272,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "10.2.0"; +var VERSION = "10.4.1"; // pkg/dist-src/generated/endpoints.js var Endpoints = { @@ -8397,6 +8399,9 @@ var Endpoints = { "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" ], getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + getCustomOidcSubClaimForRepo: [ + "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], getEnvironmentPublicKey: [ "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key" ], @@ -8549,6 +8554,9 @@ var Endpoints = { setCustomLabelsForSelfHostedRunnerForRepo: [ "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" ], + setCustomOidcSubClaimForRepo: [ + "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], setGithubActionsDefaultWorkflowPermissionsOrganization: [ "PUT /orgs/{org}/actions/permissions/workflow" ], @@ -8618,6 +8626,7 @@ var Endpoints = { listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], markNotificationsAsRead: ["PUT /notifications"], markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], + markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], setThreadSubscription: [ @@ -8894,10 +8903,10 @@ var Endpoints = { updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] }, copilot: { - addCopilotForBusinessSeatsForTeams: [ + addCopilotSeatsForTeams: [ "POST /orgs/{org}/copilot/billing/selected_teams" ], - addCopilotForBusinessSeatsForUsers: [ + addCopilotSeatsForUsers: [ "POST /orgs/{org}/copilot/billing/selected_users" ], cancelCopilotSeatAssignmentForTeams: [ @@ -9210,10 +9219,24 @@ var Endpoints = { } ] }, + oidc: { + getOidcCustomSubTemplateForOrg: [ + "GET /orgs/{org}/actions/oidc/customization/sub" + ], + updateOidcCustomSubTemplateForOrg: [ + "PUT /orgs/{org}/actions/oidc/customization/sub" + ] + }, orgs: { addSecurityManagerTeam: [ "PUT /orgs/{org}/security-managers/teams/{team_slug}" ], + assignTeamToOrgRole: [ + "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + assignUserToOrgRole: [ + "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], blockUser: ["PUT /orgs/{org}/blocks/{username}"], cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], @@ -9222,6 +9245,7 @@ var Endpoints = { convertMemberToOutsideCollaborator: [ "PUT /orgs/{org}/outside_collaborators/{username}" ], + createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], createInvitation: ["POST /orgs/{org}/invitations"], createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], createOrUpdateCustomPropertiesValuesForRepos: [ @@ -9232,6 +9256,9 @@ var Endpoints = { ], createWebhook: ["POST /orgs/{org}/hooks"], delete: ["DELETE /orgs/{org}"], + deleteCustomOrganizationRole: [ + "DELETE /orgs/{org}/organization-roles/{role_id}" + ], deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], enableOrDisableSecurityProductOnAllOrgRepos: [ "POST /orgs/{org}/{security_product}/{enablement}" @@ -9243,6 +9270,7 @@ var Endpoints = { ], getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], + getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], getWebhookDelivery: [ @@ -9258,6 +9286,12 @@ var Endpoints = { listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], listMembers: ["GET /orgs/{org}/members"], listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], + listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], + listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], + listOrgRoles: ["GET /orgs/{org}/organization-roles"], + listOrganizationFineGrainedPermissions: [ + "GET /orgs/{org}/organization-fine-grained-permissions" + ], listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], listPatGrantRepositories: [ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" @@ -9272,6 +9306,9 @@ var Endpoints = { listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], listWebhooks: ["GET /orgs/{org}/hooks"], + patchCustomOrganizationRole: [ + "PATCH /orgs/{org}/organization-roles/{role_id}" + ], pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], redeliverWebhookDelivery: [ "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" @@ -9296,6 +9333,18 @@ var Endpoints = { reviewPatGrantRequestsInBulk: [ "POST /orgs/{org}/personal-access-token-requests" ], + revokeAllOrgRolesTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" + ], + revokeAllOrgRolesUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}" + ], + revokeOrgRoleTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + revokeOrgRoleUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], setPublicMembershipForAuthenticatedUser: [ "PUT /orgs/{org}/public_members/{username}" @@ -9586,6 +9635,9 @@ var Endpoints = { {}, { mapToData: "users" } ], + cancelPagesDeployment: [ + "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" + ], checkAutomatedSecurityFixes: [ "GET /repos/{owner}/{repo}/automated-security-fixes" ], @@ -9621,12 +9673,15 @@ var Endpoints = { createForAuthenticatedUser: ["POST /user/repos"], createFork: ["POST /repos/{owner}/{repo}/forks"], createInOrg: ["POST /orgs/{org}/repos"], + createOrUpdateCustomPropertiesValues: [ + "PATCH /repos/{owner}/{repo}/properties/values" + ], createOrUpdateEnvironment: [ "PUT /repos/{owner}/{repo}/environments/{environment_name}" ], createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], createOrgRuleset: ["POST /orgs/{org}/rulesets"], - createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployment"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], createPagesSite: ["POST /repos/{owner}/{repo}/pages"], createRelease: ["POST /repos/{owner}/{repo}/releases"], createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], @@ -9779,6 +9834,9 @@ var Endpoints = { getOrgRulesets: ["GET /orgs/{org}/rulesets"], getPages: ["GET /repos/{owner}/{repo}/pages"], getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], + getPagesDeployment: [ + "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" + ], getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], getPullRequestReviewProtection: [ @@ -9989,6 +10047,9 @@ var Endpoints = { ] }, securityAdvisories: { + createFork: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" + ], createPrivateVulnerabilityReport: [ "POST /repos/{owner}/{repo}/security-advisories/reports" ], @@ -10412,7 +10473,7 @@ var RequestError = class extends Error { if (options.request.headers.authorization) { requestCopy.headers = Object.assign({}, options.request.headers, { authorization: options.request.headers.authorization.replace( - / .*$/, + /(?]+)>; rel="deprecation"/); + const matches = headers.link && headers.link.match(/<([^<>]+)>; rel="deprecation"/); const deprecationLink = matches && matches.pop(); log.warn( `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` @@ -10624,11 +10686,17 @@ async function getResponseData(response) { function toErrorMessage(data) { if (typeof data === "string") return data; + let suffix; + if ("documentation_url" in data) { + suffix = ` - ${data.documentation_url}`; + } else { + suffix = ""; + } if ("message" in data) { if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; + return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; } - return data.message; + return `${data.message}${suffix}`; } return `Unknown error: ${JSON.stringify(data)}`; } @@ -37679,7 +37747,7 @@ module.exports = { const { parseSetCookie } = __nccwpck_require__(8915) -const { stringify, getHeadersList } = __nccwpck_require__(3834) +const { stringify } = __nccwpck_require__(3834) const { webidl } = __nccwpck_require__(4222) const { Headers } = __nccwpck_require__(6349) @@ -37755,14 +37823,13 @@ function getSetCookies (headers) { webidl.brandCheck(headers, Headers, { strict: false }) - const cookies = getHeadersList(headers).cookies + const cookies = headers.getSetCookie() if (!cookies) { return [] } - // In older versions of undici, cookies is a list of name:value. - return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) + return cookies.map((pair) => parseSetCookie(pair)) } /** @@ -38190,14 +38257,15 @@ module.exports = { /***/ }), /***/ 3834: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ ((module) => { "use strict"; -const assert = __nccwpck_require__(2613) -const { kHeadersList } = __nccwpck_require__(6443) - +/** + * @param {string} value + * @returns {boolean} + */ function isCTLExcludingHtab (value) { if (value.length === 0) { return false @@ -38458,31 +38526,13 @@ function stringify (cookie) { return out.join('; ') } -let kHeadersListNode - -function getHeadersList (headers) { - if (headers[kHeadersList]) { - return headers[kHeadersList] - } - - if (!kHeadersListNode) { - kHeadersListNode = Object.getOwnPropertySymbols(headers).find( - (symbol) => symbol.description === 'headers list' - ) - - assert(kHeadersListNode, 'Headers cannot be parsed') - } - - const headersList = headers[kHeadersListNode] - assert(headersList) - - return headersList -} - module.exports = { isCTLExcludingHtab, - stringify, - getHeadersList + validateCookieName, + validateCookiePath, + validateCookieValue, + toIMFDate, + stringify } @@ -38683,6 +38733,132 @@ function onConnectTimeout (socket) { module.exports = buildConnector +/***/ }), + +/***/ 735: +/***/ ((module) => { + +"use strict"; + + +/** @type {Record} */ +const headerNameLowerCasedRecord = {} + +// https://developer.mozilla.org/docs/Web/HTTP/Headers +const wellknownHeaderNames = [ + 'Accept', + 'Accept-Encoding', + 'Accept-Language', + 'Accept-Ranges', + 'Access-Control-Allow-Credentials', + 'Access-Control-Allow-Headers', + 'Access-Control-Allow-Methods', + 'Access-Control-Allow-Origin', + 'Access-Control-Expose-Headers', + 'Access-Control-Max-Age', + 'Access-Control-Request-Headers', + 'Access-Control-Request-Method', + 'Age', + 'Allow', + 'Alt-Svc', + 'Alt-Used', + 'Authorization', + 'Cache-Control', + 'Clear-Site-Data', + 'Connection', + 'Content-Disposition', + 'Content-Encoding', + 'Content-Language', + 'Content-Length', + 'Content-Location', + 'Content-Range', + 'Content-Security-Policy', + 'Content-Security-Policy-Report-Only', + 'Content-Type', + 'Cookie', + 'Cross-Origin-Embedder-Policy', + 'Cross-Origin-Opener-Policy', + 'Cross-Origin-Resource-Policy', + 'Date', + 'Device-Memory', + 'Downlink', + 'ECT', + 'ETag', + 'Expect', + 'Expect-CT', + 'Expires', + 'Forwarded', + 'From', + 'Host', + 'If-Match', + 'If-Modified-Since', + 'If-None-Match', + 'If-Range', + 'If-Unmodified-Since', + 'Keep-Alive', + 'Last-Modified', + 'Link', + 'Location', + 'Max-Forwards', + 'Origin', + 'Permissions-Policy', + 'Pragma', + 'Proxy-Authenticate', + 'Proxy-Authorization', + 'RTT', + 'Range', + 'Referer', + 'Referrer-Policy', + 'Refresh', + 'Retry-After', + 'Sec-WebSocket-Accept', + 'Sec-WebSocket-Extensions', + 'Sec-WebSocket-Key', + 'Sec-WebSocket-Protocol', + 'Sec-WebSocket-Version', + 'Server', + 'Server-Timing', + 'Service-Worker-Allowed', + 'Service-Worker-Navigation-Preload', + 'Set-Cookie', + 'SourceMap', + 'Strict-Transport-Security', + 'Supports-Loading-Mode', + 'TE', + 'Timing-Allow-Origin', + 'Trailer', + 'Transfer-Encoding', + 'Upgrade', + 'Upgrade-Insecure-Requests', + 'User-Agent', + 'Vary', + 'Via', + 'WWW-Authenticate', + 'X-Content-Type-Options', + 'X-DNS-Prefetch-Control', + 'X-Frame-Options', + 'X-Permitted-Cross-Domain-Policies', + 'X-Powered-By', + 'X-Requested-With', + 'X-XSS-Protection' +] + +for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i] + const lowerCasedKey = key.toLowerCase() + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = + lowerCasedKey +} + +// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. +Object.setPrototypeOf(headerNameLowerCasedRecord, null) + +module.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord +} + + /***/ }), /***/ 8707: @@ -39515,6 +39691,7 @@ const { InvalidArgumentError } = __nccwpck_require__(8707) const { Blob } = __nccwpck_require__(181) const nodeUtil = __nccwpck_require__(9023) const { stringify } = __nccwpck_require__(3480) +const { headerNameLowerCasedRecord } = __nccwpck_require__(735) const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) @@ -39724,6 +39901,15 @@ function parseKeepAliveTimeout (val) { return m ? parseInt(m[1], 10) * 1000 : null } +/** + * Retrieves a header name and returns its lowercase value. + * @param {string | Buffer} value Header name + * @returns {string} + */ +function headerNameToString (value) { + return headerNameLowerCasedRecord[value] || value.toLowerCase() +} + function parseHeaders (headers, obj = {}) { // For H2 support if (!Array.isArray(headers)) return headers @@ -39995,6 +40181,7 @@ module.exports = { isIterable, isAsyncIterable, isDestroyed, + headerNameToString, parseRawHeaders, parseHeaders, parseKeepAliveTimeout, @@ -40274,6 +40461,14 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(8253) const { File: UndiciFile } = __nccwpck_require__(3041) const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) +let random +try { + const crypto = __nccwpck_require__(7598) + random = (max) => crypto.randomInt(0, max) +} catch { + random = (max) => Math.floor(Math.random(max)) +} + let ReadableStream = globalThis.ReadableStream /** @type {globalThis['File']} */ @@ -40359,7 +40554,7 @@ function extractBody (object, keepalive = false) { // Set source to a copy of the bytes held by object. source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` + const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` const prefix = `--${boundary}\r\nContent-Disposition: form-data` /*! formdata-polyfill. MIT License. Jimmy Wärting */ @@ -42341,6 +42536,7 @@ const { isValidHeaderName, isValidHeaderValue } = __nccwpck_require__(5523) +const util = __nccwpck_require__(9023) const { webidl } = __nccwpck_require__(4222) const assert = __nccwpck_require__(2613) @@ -42894,6 +43090,9 @@ Object.defineProperties(Headers.prototype, { [Symbol.toStringTag]: { value: 'Headers', configurable: true + }, + [util.inspect.custom]: { + enumerable: false } }) @@ -44131,6 +44330,9 @@ function httpRedirectFetch (fetchParams, response) { // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name request.headersList.delete('authorization') + // https://fetch.spec.whatwg.org/#authentication-entries + request.headersList.delete('proxy-authorization', true) + // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. request.headersList.delete('cookie') request.headersList.delete('host') @@ -46639,14 +46841,18 @@ const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(3440 const assert = __nccwpck_require__(2613) const { isUint8Array } = __nccwpck_require__(8253) +let supportedHashes = [] + // https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable /** @type {import('crypto')|undefined} */ let crypto try { crypto = __nccwpck_require__(6982) + const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] + supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) +/* c8 ignore next 3 */ } catch { - } function responseURL (response) { @@ -47174,66 +47380,56 @@ function bytesMatch (bytes, metadataList) { return true } - // 3. If parsedMetadata is the empty set, return true. + // 3. If response is not eligible for integrity validation, return false. + // TODO + + // 4. If parsedMetadata is the empty set, return true. if (parsedMetadata.length === 0) { return true } - // 4. Let metadata be the result of getting the strongest + // 5. Let metadata be the result of getting the strongest // metadata from parsedMetadata. - const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo)) - // get the strongest algorithm - const strongest = list[0].algo - // get all entries that use the strongest algorithm; ignore weaker - const metadata = list.filter((item) => item.algo === strongest) + const strongest = getStrongestMetadata(parsedMetadata) + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) - // 5. For each item in metadata: + // 6. For each item in metadata: for (const item of metadata) { // 1. Let algorithm be the alg component of item. const algorithm = item.algo // 2. Let expectedValue be the val component of item. - let expectedValue = item.hash + const expectedValue = item.hash // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e // "be liberal with padding". This is annoying, and it's not even in the spec. - if (expectedValue.endsWith('==')) { - expectedValue = expectedValue.slice(0, -2) - } - // 3. Let actualValue be the result of applying algorithm to bytes. let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') - if (actualValue.endsWith('==')) { - actualValue = actualValue.slice(0, -2) + if (actualValue[actualValue.length - 1] === '=') { + if (actualValue[actualValue.length - 2] === '=') { + actualValue = actualValue.slice(0, -2) + } else { + actualValue = actualValue.slice(0, -1) + } } // 4. If actualValue is a case-sensitive match for expectedValue, // return true. - if (actualValue === expectedValue) { - return true - } - - let actualBase64URL = crypto.createHash(algorithm).update(bytes).digest('base64url') - - if (actualBase64URL.endsWith('==')) { - actualBase64URL = actualBase64URL.slice(0, -2) - } - - if (actualBase64URL === expectedValue) { + if (compareBase64Mixed(actualValue, expectedValue)) { return true } } - // 6. Return false. + // 7. Return false. return false } // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options // https://www.w3.org/TR/CSP2/#source-list-syntax // https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 -const parseHashWithOptions = /((?sha256|sha384|sha512)-(?[A-z0-9+/]{1}.*={0,2}))( +[\x21-\x7e]?)?/i +const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i /** * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata @@ -47247,8 +47443,6 @@ function parseMetadata (metadata) { // 2. Let empty be equal to true. let empty = true - const supportedHashes = crypto.getHashes() - // 3. For each token returned by splitting metadata on spaces: for (const token of metadata.split(' ')) { // 1. Set empty to false. @@ -47258,7 +47452,11 @@ function parseMetadata (metadata) { const parsedToken = parseHashWithOptions.exec(token) // 3. If token does not parse, continue to the next token. - if (parsedToken === null || parsedToken.groups === undefined) { + if ( + parsedToken === null || + parsedToken.groups === undefined || + parsedToken.groups.algo === undefined + ) { // Note: Chromium blocks the request at this point, but Firefox // gives a warning that an invalid integrity was given. The // correct behavior is to ignore these, and subsequently not @@ -47267,11 +47465,11 @@ function parseMetadata (metadata) { } // 4. Let algorithm be the hash-algo component of token. - const algorithm = parsedToken.groups.algo + const algorithm = parsedToken.groups.algo.toLowerCase() // 5. If algorithm is a hash function recognized by the user // agent, add the parsed token to result. - if (supportedHashes.includes(algorithm.toLowerCase())) { + if (supportedHashes.includes(algorithm)) { result.push(parsedToken.groups) } } @@ -47284,6 +47482,82 @@ function parseMetadata (metadata) { return result } +/** + * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList + */ +function getStrongestMetadata (metadataList) { + // Let algorithm be the algo component of the first item in metadataList. + // Can be sha256 + let algorithm = metadataList[0].algo + // If the algorithm is sha512, then it is the strongest + // and we can return immediately + if (algorithm[3] === '5') { + return algorithm + } + + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i] + // If the algorithm is sha512, then it is the strongest + // and we can break the loop immediately + if (metadata.algo[3] === '5') { + algorithm = 'sha512' + break + // If the algorithm is sha384, then a potential sha256 or sha384 is ignored + } else if (algorithm[3] === '3') { + continue + // algorithm is sha256, check if algorithm is sha384 and if so, set it as + // the strongest + } else if (metadata.algo[3] === '3') { + algorithm = 'sha384' + } + } + return algorithm +} + +function filterMetadataListByAlgorithm (metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList + } + + let pos = 0 + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i] + } + } + + metadataList.length = pos + + return metadataList +} + +/** + * Compares two base64 strings, allowing for base64url + * in the second string. + * +* @param {string} actualValue always base64 + * @param {string} expectedValue base64 or base64url + * @returns {boolean} + */ +function compareBase64Mixed (actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if ( + (actualValue[i] === '+' && expectedValue[i] === '-') || + (actualValue[i] === '/' && expectedValue[i] === '_') + ) { + continue + } + return false + } + } + + return true +} + // https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { // TODO @@ -47699,7 +47973,8 @@ module.exports = { urlHasHttpsScheme, urlIsHttpHttpsScheme, readAllBytes, - normalizeMethodRecord + normalizeMethodRecord, + parseMetadata } @@ -49786,12 +50061,17 @@ function parseLocation (statusCode, headers) { // https://tools.ietf.org/html/rfc7231#section-6.4.4 function shouldRemoveHeader (header, removeContent, unknownOrigin) { - return ( - (header.length === 4 && header.toString().toLowerCase() === 'host') || - (removeContent && header.toString().toLowerCase().indexOf('content-') === 0) || - (unknownOrigin && header.length === 13 && header.toString().toLowerCase() === 'authorization') || - (unknownOrigin && header.length === 6 && header.toString().toLowerCase() === 'cookie') - ) + if (header.length === 4) { + return util.headerNameToString(header) === 'host' + } + if (removeContent && util.headerNameToString(header).startsWith('content-')) { + return true + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util.headerNameToString(header) + return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' + } + return false } // https://tools.ietf.org/html/rfc7231#section-6.4 @@ -51989,6 +52269,20 @@ class Pool extends PoolBase { ? { ...options.interceptors } : undefined this[kFactory] = factory + + this.on('connectionError', (origin, targets, error) => { + // If a connection error occurs, we remove the client from the pool, + // and emit a connectionError event. They will not be re-used. + // Fixes https://github.com/nodejs/undici/issues/3895 + for (const target of targets) { + // Do not use kRemoveClient here, as it will close the client, + // but the client cannot be closed in this state. + const idx = this[kClients].indexOf(target) + if (idx !== -1) { + this[kClients].splice(idx, 1) + } + } + }) } [kGetDispatcher] () { @@ -59488,6 +59782,14 @@ module.exports = require("net"); /***/ }), +/***/ 7598: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:crypto"); + +/***/ }), + /***/ 8474: /***/ ((module) => { From 53f5051dfe659678c87a2d0a13d5cc5c5b9b5b0a Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 17 May 2025 15:57:53 +0200 Subject: [PATCH 19/80] test-reporter release v2.1.0 --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69c93a4..d47e76e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 2.1.0 +* Feature: Add summary title https://github.com/dorny/test-reporter/pull/568 +* Feature: Add Golang test parser https://github.com/dorny/test-reporter/pull/571 +* Increase step summary limit to 1MiB https://github.com/dorny/test-reporter/pull/581 +* Fix for empty TRX TestDefinitions https://github.com/dorny/test-reporter/pull/582 +* Fix input description for list options https://github.com/dorny/test-reporter/pull/572 +* Update npm packages https://github.com/dorny/test-reporter/pull/583 + ## 2.0.0 * Parse JUnit report with detailed message in failure https://github.com/dorny/test-reporter/pull/559 * Support displaying test results in markdown using GitHub Actions Job Summaries https://github.com/dorny/test-reporter/pull/383 diff --git a/package-lock.json b/package-lock.json index 6529743..d892009 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "test-reporter", - "version": "2.0.0", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "test-reporter", - "version": "2.0.0", + "version": "2.1.0", "license": "MIT", "dependencies": { "@actions/core": "^1.11.1", diff --git a/package.json b/package.json index 3be3a88..8d738a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "test-reporter", - "version": "2.0.0", + "version": "2.1.0", "private": true, "description": "Presents test results from popular testing frameworks as Github check run", "main": "lib/main.js", From 302102c9a4f2396f5068361db5cd2067ee0265f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Kautler?= Date: Mon, 5 May 2025 16:40:11 +0200 Subject: [PATCH 20/80] Use if: ${{ !cancelled() }} --- .github/workflows/ci.yml | 2 +- .github/workflows/manual-run.yml | 2 +- README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a8a86e4..d5f8615 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: - run: npm test - name: Upload test results - if: success() || failure() + if: ${{ !cancelled() }} uses: actions/upload-artifact@v4 with: name: test-results diff --git a/.github/workflows/manual-run.yml b/.github/workflows/manual-run.yml index f8b1ee0..169c810 100644 --- a/.github/workflows/manual-run.yml +++ b/.github/workflows/manual-run.yml @@ -15,7 +15,7 @@ jobs: - name: Create test report uses: ./ - if: success() || failure() + if: ${{ !cancelled() }} with: name: JEST Tests path: __tests__/__results__/*.xml diff --git a/README.md b/README.md index 676d21e..ff030f2 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ jobs: - name: Test Report uses: dorny/test-reporter@v2 - if: success() || failure() # run this step even if previous step failed + if: ${{ !cancelled() }} # run this step even if previous step failed with: name: JEST Tests # Name of the check run which will be created path: reports/jest-*.xml # Path to test results @@ -79,7 +79,7 @@ jobs: - run: npm ci # install packages - run: npm test # run tests (configured to use jest-junit reporter) - uses: actions/upload-artifact@v4 # upload test results - if: success() || failure() # run this step even if previous step failed + if: ${{ !cancelled() }} # run this step even if previous step failed with: name: test-results path: jest-junit.xml From 364887ed359e744d6d9048e40c6539d51a26c575 Mon Sep 17 00:00:00 2001 From: Oles Galatsan Date: Tue, 20 May 2025 12:11:51 +0300 Subject: [PATCH 21/80] Add short summary for step summary --- dist/index.js | 511 +++++++++++--------------------------------------- src/main.ts | 11 +- 2 files changed, 111 insertions(+), 411 deletions(-) diff --git a/dist/index.js b/dist/index.js index 9cb9528..28dfc49 100644 --- a/dist/index.js +++ b/dist/index.js @@ -402,6 +402,10 @@ class TestReporter { } } const { listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle } = this; + const passed = results.reduce((sum, tr) => sum + tr.passed, 0); + const failed = results.reduce((sum, tr) => sum + tr.failed, 0); + const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0); + const shortSummary = `${passed} passed, ${failed} failed and ${skipped} skipped `; let baseUrl = ''; if (this.useActionsSummary) { const summary = (0, get_report_1.getReport)(results, { @@ -415,6 +419,7 @@ class TestReporter { }); core.info('Summary content:'); core.info(summary); + core.summary.addRaw(`# ${shortSummary}`); await core.summary.addRaw(summary).write(); } else { @@ -444,10 +449,6 @@ class TestReporter { const annotations = (0, get_annotations_1.getAnnotations)(results, this.maxAnnotations); const isFailed = this.failOnError && results.some(tr => tr.result === 'failed'); const conclusion = isFailed ? 'failure' : 'success'; - const passed = results.reduce((sum, tr) => sum + tr.passed, 0); - const failed = results.reduce((sum, tr) => sum + tr.failed, 0); - const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0); - const shortSummary = `${passed} passed, ${failed} failed and ${skipped} skipped `; core.info(`Updating check run conclusion (${conclusion}) and output`); const resp = await this.octokit.rest.checks.update({ check_run_id: createResp.data.id, @@ -4567,7 +4568,6 @@ class Context { this.action = process.env.GITHUB_ACTION; this.actor = process.env.GITHUB_ACTOR; this.job = process.env.GITHUB_JOB; - this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10); this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; @@ -7153,11 +7153,11 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var index_exports = {}; -__export(index_exports, { +var dist_src_exports = {}; +__export(dist_src_exports, { Octokit: () => Octokit }); -module.exports = __toCommonJS(index_exports); +module.exports = __toCommonJS(dist_src_exports); var import_universal_user_agent = __nccwpck_require__(3843); var import_before_after_hook = __nccwpck_require__(2732); var import_request = __nccwpck_require__(8636); @@ -7165,7 +7165,7 @@ var import_graphql = __nccwpck_require__(7); var import_auth_token = __nccwpck_require__(7864); // pkg/dist-src/version.js -var VERSION = "5.2.1"; +var VERSION = "5.0.2"; // pkg/dist-src/index.js var noop = () => { @@ -7332,7 +7332,7 @@ module.exports = __toCommonJS(dist_src_exports); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "9.0.6"; +var VERSION = "9.0.4"; // pkg/dist-src/defaults.js var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; @@ -7437,9 +7437,9 @@ function addQueryParameters(url, parameters) { } // pkg/dist-src/util/extract-url-variable-names.js -var urlVariableRegex = /\{[^{}}]+\}/g; +var urlVariableRegex = /\{[^}]+\}/g; function removeNonChars(variableName) { - return variableName.replace(/(?:^\W+)|(?:(? { const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; return `application/vnd.github.${preview}-preview${format}`; @@ -7706,18 +7706,18 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var index_exports = {}; -__export(index_exports, { +var dist_src_exports = {}; +__export(dist_src_exports, { GraphqlResponseError: () => GraphqlResponseError, graphql: () => graphql2, withCustomRequest: () => withCustomRequest }); -module.exports = __toCommonJS(index_exports); +module.exports = __toCommonJS(dist_src_exports); var import_request3 = __nccwpck_require__(8636); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "7.1.1"; +var VERSION = "7.0.2"; // pkg/dist-src/with-defaults.js var import_request2 = __nccwpck_require__(8636); @@ -7765,7 +7765,8 @@ function graphql(request2, query, options) { ); } for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) + continue; return Promise.reject( new Error( `[@octokit/graphql] "${key}" cannot be used as variable name` @@ -7873,7 +7874,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "9.2.2"; +var VERSION = "9.1.5"; // pkg/dist-src/normalize-paginated-list-response.js function normalizePaginatedListResponse(response) { @@ -7921,7 +7922,7 @@ function iterator(octokit, route, parameters) { const response = await requestMethod({ method, url, headers }); const normalizedResponse = normalizePaginatedListResponse(response); url = ((normalizedResponse.headers.link || "").match( - /<([^<>]+)>;\s*rel="next"/ + /<([^>]+)>;\s*rel="next"/ ) || [])[1]; return { value: normalizedResponse }; } catch (error) { @@ -8034,8 +8035,6 @@ var paginatingEndpoints = [ "GET /orgs/{org}/members/{username}/codespaces", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", - "GET /orgs/{org}/organization-roles/{role_id}/teams", - "GET /orgs/{org}/organization-roles/{role_id}/users", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", @@ -8272,7 +8271,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "10.4.1"; +var VERSION = "10.2.0"; // pkg/dist-src/generated/endpoints.js var Endpoints = { @@ -8399,9 +8398,6 @@ var Endpoints = { "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" ], getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - getCustomOidcSubClaimForRepo: [ - "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], getEnvironmentPublicKey: [ "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key" ], @@ -8554,9 +8550,6 @@ var Endpoints = { setCustomLabelsForSelfHostedRunnerForRepo: [ "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" ], - setCustomOidcSubClaimForRepo: [ - "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], setGithubActionsDefaultWorkflowPermissionsOrganization: [ "PUT /orgs/{org}/actions/permissions/workflow" ], @@ -8626,7 +8619,6 @@ var Endpoints = { listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], markNotificationsAsRead: ["PUT /notifications"], markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], - markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], setThreadSubscription: [ @@ -8903,10 +8895,10 @@ var Endpoints = { updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] }, copilot: { - addCopilotSeatsForTeams: [ + addCopilotForBusinessSeatsForTeams: [ "POST /orgs/{org}/copilot/billing/selected_teams" ], - addCopilotSeatsForUsers: [ + addCopilotForBusinessSeatsForUsers: [ "POST /orgs/{org}/copilot/billing/selected_users" ], cancelCopilotSeatAssignmentForTeams: [ @@ -9219,24 +9211,10 @@ var Endpoints = { } ] }, - oidc: { - getOidcCustomSubTemplateForOrg: [ - "GET /orgs/{org}/actions/oidc/customization/sub" - ], - updateOidcCustomSubTemplateForOrg: [ - "PUT /orgs/{org}/actions/oidc/customization/sub" - ] - }, orgs: { addSecurityManagerTeam: [ "PUT /orgs/{org}/security-managers/teams/{team_slug}" ], - assignTeamToOrgRole: [ - "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - assignUserToOrgRole: [ - "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], blockUser: ["PUT /orgs/{org}/blocks/{username}"], cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], @@ -9245,7 +9223,6 @@ var Endpoints = { convertMemberToOutsideCollaborator: [ "PUT /orgs/{org}/outside_collaborators/{username}" ], - createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], createInvitation: ["POST /orgs/{org}/invitations"], createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], createOrUpdateCustomPropertiesValuesForRepos: [ @@ -9256,9 +9233,6 @@ var Endpoints = { ], createWebhook: ["POST /orgs/{org}/hooks"], delete: ["DELETE /orgs/{org}"], - deleteCustomOrganizationRole: [ - "DELETE /orgs/{org}/organization-roles/{role_id}" - ], deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], enableOrDisableSecurityProductOnAllOrgRepos: [ "POST /orgs/{org}/{security_product}/{enablement}" @@ -9270,7 +9244,6 @@ var Endpoints = { ], getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], - getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], getWebhookDelivery: [ @@ -9286,12 +9259,6 @@ var Endpoints = { listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], listMembers: ["GET /orgs/{org}/members"], listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], - listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], - listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], - listOrgRoles: ["GET /orgs/{org}/organization-roles"], - listOrganizationFineGrainedPermissions: [ - "GET /orgs/{org}/organization-fine-grained-permissions" - ], listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], listPatGrantRepositories: [ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" @@ -9306,9 +9273,6 @@ var Endpoints = { listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], listWebhooks: ["GET /orgs/{org}/hooks"], - patchCustomOrganizationRole: [ - "PATCH /orgs/{org}/organization-roles/{role_id}" - ], pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], redeliverWebhookDelivery: [ "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" @@ -9333,18 +9297,6 @@ var Endpoints = { reviewPatGrantRequestsInBulk: [ "POST /orgs/{org}/personal-access-token-requests" ], - revokeAllOrgRolesTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" - ], - revokeAllOrgRolesUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}" - ], - revokeOrgRoleTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - revokeOrgRoleUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], setPublicMembershipForAuthenticatedUser: [ "PUT /orgs/{org}/public_members/{username}" @@ -9635,9 +9587,6 @@ var Endpoints = { {}, { mapToData: "users" } ], - cancelPagesDeployment: [ - "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" - ], checkAutomatedSecurityFixes: [ "GET /repos/{owner}/{repo}/automated-security-fixes" ], @@ -9673,15 +9622,12 @@ var Endpoints = { createForAuthenticatedUser: ["POST /user/repos"], createFork: ["POST /repos/{owner}/{repo}/forks"], createInOrg: ["POST /orgs/{org}/repos"], - createOrUpdateCustomPropertiesValues: [ - "PATCH /repos/{owner}/{repo}/properties/values" - ], createOrUpdateEnvironment: [ "PUT /repos/{owner}/{repo}/environments/{environment_name}" ], createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], createOrgRuleset: ["POST /orgs/{org}/rulesets"], - createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployment"], createPagesSite: ["POST /repos/{owner}/{repo}/pages"], createRelease: ["POST /repos/{owner}/{repo}/releases"], createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], @@ -9834,9 +9780,6 @@ var Endpoints = { getOrgRulesets: ["GET /orgs/{org}/rulesets"], getPages: ["GET /repos/{owner}/{repo}/pages"], getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], - getPagesDeployment: [ - "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" - ], getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], getPullRequestReviewProtection: [ @@ -10047,9 +9990,6 @@ var Endpoints = { ] }, securityAdvisories: { - createFork: [ - "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" - ], createPrivateVulnerabilityReport: [ "POST /repos/{owner}/{repo}/security-advisories/reports" ], @@ -10473,7 +10413,7 @@ var RequestError = class extends Error { if (options.request.headers.authorization) { requestCopy.headers = Object.assign({}, options.request.headers, { authorization: options.request.headers.authorization.replace( - /(?]+)>; rel="deprecation"/); + const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); const deprecationLink = matches && matches.pop(); log.warn( `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` @@ -10686,17 +10625,11 @@ async function getResponseData(response) { function toErrorMessage(data) { if (typeof data === "string") return data; - let suffix; - if ("documentation_url" in data) { - suffix = ` - ${data.documentation_url}`; - } else { - suffix = ""; - } if ("message" in data) { if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; + return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; } - return `${data.message}${suffix}`; + return data.message; } return `Unknown error: ${JSON.stringify(data)}`; } @@ -37747,7 +37680,7 @@ module.exports = { const { parseSetCookie } = __nccwpck_require__(8915) -const { stringify } = __nccwpck_require__(3834) +const { stringify, getHeadersList } = __nccwpck_require__(3834) const { webidl } = __nccwpck_require__(4222) const { Headers } = __nccwpck_require__(6349) @@ -37823,13 +37756,14 @@ function getSetCookies (headers) { webidl.brandCheck(headers, Headers, { strict: false }) - const cookies = headers.getSetCookie() + const cookies = getHeadersList(headers).cookies if (!cookies) { return [] } - return cookies.map((pair) => parseSetCookie(pair)) + // In older versions of undici, cookies is a list of name:value. + return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) } /** @@ -38257,15 +38191,14 @@ module.exports = { /***/ }), /***/ 3834: -/***/ ((module) => { +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -/** - * @param {string} value - * @returns {boolean} - */ +const assert = __nccwpck_require__(2613) +const { kHeadersList } = __nccwpck_require__(6443) + function isCTLExcludingHtab (value) { if (value.length === 0) { return false @@ -38526,13 +38459,31 @@ function stringify (cookie) { return out.join('; ') } +let kHeadersListNode + +function getHeadersList (headers) { + if (headers[kHeadersList]) { + return headers[kHeadersList] + } + + if (!kHeadersListNode) { + kHeadersListNode = Object.getOwnPropertySymbols(headers).find( + (symbol) => symbol.description === 'headers list' + ) + + assert(kHeadersListNode, 'Headers cannot be parsed') + } + + const headersList = headers[kHeadersListNode] + assert(headersList) + + return headersList +} + module.exports = { isCTLExcludingHtab, - validateCookieName, - validateCookiePath, - validateCookieValue, - toIMFDate, - stringify + stringify, + getHeadersList } @@ -38733,132 +38684,6 @@ function onConnectTimeout (socket) { module.exports = buildConnector -/***/ }), - -/***/ 735: -/***/ ((module) => { - -"use strict"; - - -/** @type {Record} */ -const headerNameLowerCasedRecord = {} - -// https://developer.mozilla.org/docs/Web/HTTP/Headers -const wellknownHeaderNames = [ - 'Accept', - 'Accept-Encoding', - 'Accept-Language', - 'Accept-Ranges', - 'Access-Control-Allow-Credentials', - 'Access-Control-Allow-Headers', - 'Access-Control-Allow-Methods', - 'Access-Control-Allow-Origin', - 'Access-Control-Expose-Headers', - 'Access-Control-Max-Age', - 'Access-Control-Request-Headers', - 'Access-Control-Request-Method', - 'Age', - 'Allow', - 'Alt-Svc', - 'Alt-Used', - 'Authorization', - 'Cache-Control', - 'Clear-Site-Data', - 'Connection', - 'Content-Disposition', - 'Content-Encoding', - 'Content-Language', - 'Content-Length', - 'Content-Location', - 'Content-Range', - 'Content-Security-Policy', - 'Content-Security-Policy-Report-Only', - 'Content-Type', - 'Cookie', - 'Cross-Origin-Embedder-Policy', - 'Cross-Origin-Opener-Policy', - 'Cross-Origin-Resource-Policy', - 'Date', - 'Device-Memory', - 'Downlink', - 'ECT', - 'ETag', - 'Expect', - 'Expect-CT', - 'Expires', - 'Forwarded', - 'From', - 'Host', - 'If-Match', - 'If-Modified-Since', - 'If-None-Match', - 'If-Range', - 'If-Unmodified-Since', - 'Keep-Alive', - 'Last-Modified', - 'Link', - 'Location', - 'Max-Forwards', - 'Origin', - 'Permissions-Policy', - 'Pragma', - 'Proxy-Authenticate', - 'Proxy-Authorization', - 'RTT', - 'Range', - 'Referer', - 'Referrer-Policy', - 'Refresh', - 'Retry-After', - 'Sec-WebSocket-Accept', - 'Sec-WebSocket-Extensions', - 'Sec-WebSocket-Key', - 'Sec-WebSocket-Protocol', - 'Sec-WebSocket-Version', - 'Server', - 'Server-Timing', - 'Service-Worker-Allowed', - 'Service-Worker-Navigation-Preload', - 'Set-Cookie', - 'SourceMap', - 'Strict-Transport-Security', - 'Supports-Loading-Mode', - 'TE', - 'Timing-Allow-Origin', - 'Trailer', - 'Transfer-Encoding', - 'Upgrade', - 'Upgrade-Insecure-Requests', - 'User-Agent', - 'Vary', - 'Via', - 'WWW-Authenticate', - 'X-Content-Type-Options', - 'X-DNS-Prefetch-Control', - 'X-Frame-Options', - 'X-Permitted-Cross-Domain-Policies', - 'X-Powered-By', - 'X-Requested-With', - 'X-XSS-Protection' -] - -for (let i = 0; i < wellknownHeaderNames.length; ++i) { - const key = wellknownHeaderNames[i] - const lowerCasedKey = key.toLowerCase() - headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = - lowerCasedKey -} - -// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. -Object.setPrototypeOf(headerNameLowerCasedRecord, null) - -module.exports = { - wellknownHeaderNames, - headerNameLowerCasedRecord -} - - /***/ }), /***/ 8707: @@ -39691,7 +39516,6 @@ const { InvalidArgumentError } = __nccwpck_require__(8707) const { Blob } = __nccwpck_require__(181) const nodeUtil = __nccwpck_require__(9023) const { stringify } = __nccwpck_require__(3480) -const { headerNameLowerCasedRecord } = __nccwpck_require__(735) const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) @@ -39901,15 +39725,6 @@ function parseKeepAliveTimeout (val) { return m ? parseInt(m[1], 10) * 1000 : null } -/** - * Retrieves a header name and returns its lowercase value. - * @param {string | Buffer} value Header name - * @returns {string} - */ -function headerNameToString (value) { - return headerNameLowerCasedRecord[value] || value.toLowerCase() -} - function parseHeaders (headers, obj = {}) { // For H2 support if (!Array.isArray(headers)) return headers @@ -40181,7 +39996,6 @@ module.exports = { isIterable, isAsyncIterable, isDestroyed, - headerNameToString, parseRawHeaders, parseHeaders, parseKeepAliveTimeout, @@ -40461,14 +40275,6 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(8253) const { File: UndiciFile } = __nccwpck_require__(3041) const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) -let random -try { - const crypto = __nccwpck_require__(7598) - random = (max) => crypto.randomInt(0, max) -} catch { - random = (max) => Math.floor(Math.random(max)) -} - let ReadableStream = globalThis.ReadableStream /** @type {globalThis['File']} */ @@ -40554,7 +40360,7 @@ function extractBody (object, keepalive = false) { // Set source to a copy of the bytes held by object. source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` + const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` const prefix = `--${boundary}\r\nContent-Disposition: form-data` /*! formdata-polyfill. MIT License. Jimmy Wärting */ @@ -42536,7 +42342,6 @@ const { isValidHeaderName, isValidHeaderValue } = __nccwpck_require__(5523) -const util = __nccwpck_require__(9023) const { webidl } = __nccwpck_require__(4222) const assert = __nccwpck_require__(2613) @@ -43090,9 +42895,6 @@ Object.defineProperties(Headers.prototype, { [Symbol.toStringTag]: { value: 'Headers', configurable: true - }, - [util.inspect.custom]: { - enumerable: false } }) @@ -44330,9 +44132,6 @@ function httpRedirectFetch (fetchParams, response) { // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name request.headersList.delete('authorization') - // https://fetch.spec.whatwg.org/#authentication-entries - request.headersList.delete('proxy-authorization', true) - // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. request.headersList.delete('cookie') request.headersList.delete('host') @@ -46841,18 +46640,14 @@ const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(3440 const assert = __nccwpck_require__(2613) const { isUint8Array } = __nccwpck_require__(8253) -let supportedHashes = [] - // https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable /** @type {import('crypto')|undefined} */ let crypto try { crypto = __nccwpck_require__(6982) - const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] - supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) -/* c8 ignore next 3 */ } catch { + } function responseURL (response) { @@ -47380,56 +47175,66 @@ function bytesMatch (bytes, metadataList) { return true } - // 3. If response is not eligible for integrity validation, return false. - // TODO - - // 4. If parsedMetadata is the empty set, return true. + // 3. If parsedMetadata is the empty set, return true. if (parsedMetadata.length === 0) { return true } - // 5. Let metadata be the result of getting the strongest + // 4. Let metadata be the result of getting the strongest // metadata from parsedMetadata. - const strongest = getStrongestMetadata(parsedMetadata) - const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) + const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo)) + // get the strongest algorithm + const strongest = list[0].algo + // get all entries that use the strongest algorithm; ignore weaker + const metadata = list.filter((item) => item.algo === strongest) - // 6. For each item in metadata: + // 5. For each item in metadata: for (const item of metadata) { // 1. Let algorithm be the alg component of item. const algorithm = item.algo // 2. Let expectedValue be the val component of item. - const expectedValue = item.hash + let expectedValue = item.hash // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e // "be liberal with padding". This is annoying, and it's not even in the spec. + if (expectedValue.endsWith('==')) { + expectedValue = expectedValue.slice(0, -2) + } + // 3. Let actualValue be the result of applying algorithm to bytes. let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') - if (actualValue[actualValue.length - 1] === '=') { - if (actualValue[actualValue.length - 2] === '=') { - actualValue = actualValue.slice(0, -2) - } else { - actualValue = actualValue.slice(0, -1) - } + if (actualValue.endsWith('==')) { + actualValue = actualValue.slice(0, -2) } // 4. If actualValue is a case-sensitive match for expectedValue, // return true. - if (compareBase64Mixed(actualValue, expectedValue)) { + if (actualValue === expectedValue) { + return true + } + + let actualBase64URL = crypto.createHash(algorithm).update(bytes).digest('base64url') + + if (actualBase64URL.endsWith('==')) { + actualBase64URL = actualBase64URL.slice(0, -2) + } + + if (actualBase64URL === expectedValue) { return true } } - // 7. Return false. + // 6. Return false. return false } // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options // https://www.w3.org/TR/CSP2/#source-list-syntax // https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 -const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i +const parseHashWithOptions = /((?sha256|sha384|sha512)-(?[A-z0-9+/]{1}.*={0,2}))( +[\x21-\x7e]?)?/i /** * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata @@ -47443,6 +47248,8 @@ function parseMetadata (metadata) { // 2. Let empty be equal to true. let empty = true + const supportedHashes = crypto.getHashes() + // 3. For each token returned by splitting metadata on spaces: for (const token of metadata.split(' ')) { // 1. Set empty to false. @@ -47452,11 +47259,7 @@ function parseMetadata (metadata) { const parsedToken = parseHashWithOptions.exec(token) // 3. If token does not parse, continue to the next token. - if ( - parsedToken === null || - parsedToken.groups === undefined || - parsedToken.groups.algo === undefined - ) { + if (parsedToken === null || parsedToken.groups === undefined) { // Note: Chromium blocks the request at this point, but Firefox // gives a warning that an invalid integrity was given. The // correct behavior is to ignore these, and subsequently not @@ -47465,11 +47268,11 @@ function parseMetadata (metadata) { } // 4. Let algorithm be the hash-algo component of token. - const algorithm = parsedToken.groups.algo.toLowerCase() + const algorithm = parsedToken.groups.algo // 5. If algorithm is a hash function recognized by the user // agent, add the parsed token to result. - if (supportedHashes.includes(algorithm)) { + if (supportedHashes.includes(algorithm.toLowerCase())) { result.push(parsedToken.groups) } } @@ -47482,82 +47285,6 @@ function parseMetadata (metadata) { return result } -/** - * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList - */ -function getStrongestMetadata (metadataList) { - // Let algorithm be the algo component of the first item in metadataList. - // Can be sha256 - let algorithm = metadataList[0].algo - // If the algorithm is sha512, then it is the strongest - // and we can return immediately - if (algorithm[3] === '5') { - return algorithm - } - - for (let i = 1; i < metadataList.length; ++i) { - const metadata = metadataList[i] - // If the algorithm is sha512, then it is the strongest - // and we can break the loop immediately - if (metadata.algo[3] === '5') { - algorithm = 'sha512' - break - // If the algorithm is sha384, then a potential sha256 or sha384 is ignored - } else if (algorithm[3] === '3') { - continue - // algorithm is sha256, check if algorithm is sha384 and if so, set it as - // the strongest - } else if (metadata.algo[3] === '3') { - algorithm = 'sha384' - } - } - return algorithm -} - -function filterMetadataListByAlgorithm (metadataList, algorithm) { - if (metadataList.length === 1) { - return metadataList - } - - let pos = 0 - for (let i = 0; i < metadataList.length; ++i) { - if (metadataList[i].algo === algorithm) { - metadataList[pos++] = metadataList[i] - } - } - - metadataList.length = pos - - return metadataList -} - -/** - * Compares two base64 strings, allowing for base64url - * in the second string. - * -* @param {string} actualValue always base64 - * @param {string} expectedValue base64 or base64url - * @returns {boolean} - */ -function compareBase64Mixed (actualValue, expectedValue) { - if (actualValue.length !== expectedValue.length) { - return false - } - for (let i = 0; i < actualValue.length; ++i) { - if (actualValue[i] !== expectedValue[i]) { - if ( - (actualValue[i] === '+' && expectedValue[i] === '-') || - (actualValue[i] === '/' && expectedValue[i] === '_') - ) { - continue - } - return false - } - } - - return true -} - // https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { // TODO @@ -47973,8 +47700,7 @@ module.exports = { urlHasHttpsScheme, urlIsHttpHttpsScheme, readAllBytes, - normalizeMethodRecord, - parseMetadata + normalizeMethodRecord } @@ -50061,17 +49787,12 @@ function parseLocation (statusCode, headers) { // https://tools.ietf.org/html/rfc7231#section-6.4.4 function shouldRemoveHeader (header, removeContent, unknownOrigin) { - if (header.length === 4) { - return util.headerNameToString(header) === 'host' - } - if (removeContent && util.headerNameToString(header).startsWith('content-')) { - return true - } - if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { - const name = util.headerNameToString(header) - return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' - } - return false + return ( + (header.length === 4 && header.toString().toLowerCase() === 'host') || + (removeContent && header.toString().toLowerCase().indexOf('content-') === 0) || + (unknownOrigin && header.length === 13 && header.toString().toLowerCase() === 'authorization') || + (unknownOrigin && header.length === 6 && header.toString().toLowerCase() === 'cookie') + ) } // https://tools.ietf.org/html/rfc7231#section-6.4 @@ -52269,20 +51990,6 @@ class Pool extends PoolBase { ? { ...options.interceptors } : undefined this[kFactory] = factory - - this.on('connectionError', (origin, targets, error) => { - // If a connection error occurs, we remove the client from the pool, - // and emit a connectionError event. They will not be re-used. - // Fixes https://github.com/nodejs/undici/issues/3895 - for (const target of targets) { - // Do not use kRemoveClient here, as it will close the client, - // but the client cannot be closed in this state. - const idx = this[kClients].indexOf(target) - if (idx !== -1) { - this[kClients].splice(idx, 1) - } - } - }) } [kGetDispatcher] () { @@ -59782,14 +59489,6 @@ module.exports = require("net"); /***/ }), -/***/ 7598: -/***/ ((module) => { - -"use strict"; -module.exports = require("node:crypto"); - -/***/ }), - /***/ 8474: /***/ ((module) => { diff --git a/src/main.ts b/src/main.ts index b018390..57137ab 100644 --- a/src/main.ts +++ b/src/main.ts @@ -168,6 +168,11 @@ class TestReporter { const {listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle} = this + const passed = results.reduce((sum, tr) => sum + tr.passed, 0) + const failed = results.reduce((sum, tr) => sum + tr.failed, 0) + const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0) + const shortSummary = `${passed} passed, ${failed} failed and ${skipped} skipped ` + let baseUrl = '' if (this.useActionsSummary) { const summary = getReport(results, { @@ -182,6 +187,7 @@ class TestReporter { core.info('Summary content:') core.info(summary) + core.summary.addRaw(`# ${shortSummary}`) await core.summary.addRaw(summary).write() } else { core.info(`Creating check run ${name}`) @@ -214,11 +220,6 @@ class TestReporter { const isFailed = this.failOnError && results.some(tr => tr.result === 'failed') const conclusion = isFailed ? 'failure' : 'success' - const passed = results.reduce((sum, tr) => sum + tr.passed, 0) - const failed = results.reduce((sum, tr) => sum + tr.failed, 0) - const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0) - const shortSummary = `${passed} passed, ${failed} failed and ${skipped} skipped ` - core.info(`Updating check run conclusion (${conclusion}) and output`) const resp = await this.octokit.rest.checks.update({ check_run_id: createResp.data.id, From 0f25185fa5d3e3f71f5296030b88f1f1cb6888dd Mon Sep 17 00:00:00 2001 From: Oles Galatsan Date: Tue, 20 May 2025 14:46:05 +0300 Subject: [PATCH 22/80] Rebuild --- dist/index.js | 502 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 402 insertions(+), 100 deletions(-) diff --git a/dist/index.js b/dist/index.js index 28dfc49..bf79df4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4568,6 +4568,7 @@ class Context { this.action = process.env.GITHUB_ACTION; this.actor = process.env.GITHUB_ACTOR; this.job = process.env.GITHUB_JOB; + this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10); this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; @@ -7153,11 +7154,11 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var dist_src_exports = {}; -__export(dist_src_exports, { +var index_exports = {}; +__export(index_exports, { Octokit: () => Octokit }); -module.exports = __toCommonJS(dist_src_exports); +module.exports = __toCommonJS(index_exports); var import_universal_user_agent = __nccwpck_require__(3843); var import_before_after_hook = __nccwpck_require__(2732); var import_request = __nccwpck_require__(8636); @@ -7165,7 +7166,7 @@ var import_graphql = __nccwpck_require__(7); var import_auth_token = __nccwpck_require__(7864); // pkg/dist-src/version.js -var VERSION = "5.0.2"; +var VERSION = "5.2.1"; // pkg/dist-src/index.js var noop = () => { @@ -7332,7 +7333,7 @@ module.exports = __toCommonJS(dist_src_exports); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "9.0.4"; +var VERSION = "9.0.6"; // pkg/dist-src/defaults.js var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; @@ -7437,9 +7438,9 @@ function addQueryParameters(url, parameters) { } // pkg/dist-src/util/extract-url-variable-names.js -var urlVariableRegex = /\{[^}]+\}/g; +var urlVariableRegex = /\{[^{}}]+\}/g; function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); + return variableName.replace(/(?:^\W+)|(?:(? { const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; return `application/vnd.github.${preview}-preview${format}`; @@ -7706,18 +7707,18 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var dist_src_exports = {}; -__export(dist_src_exports, { +var index_exports = {}; +__export(index_exports, { GraphqlResponseError: () => GraphqlResponseError, graphql: () => graphql2, withCustomRequest: () => withCustomRequest }); -module.exports = __toCommonJS(dist_src_exports); +module.exports = __toCommonJS(index_exports); var import_request3 = __nccwpck_require__(8636); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "7.0.2"; +var VERSION = "7.1.1"; // pkg/dist-src/with-defaults.js var import_request2 = __nccwpck_require__(8636); @@ -7765,8 +7766,7 @@ function graphql(request2, query, options) { ); } for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) - continue; + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; return Promise.reject( new Error( `[@octokit/graphql] "${key}" cannot be used as variable name` @@ -7874,7 +7874,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "9.1.5"; +var VERSION = "9.2.2"; // pkg/dist-src/normalize-paginated-list-response.js function normalizePaginatedListResponse(response) { @@ -7922,7 +7922,7 @@ function iterator(octokit, route, parameters) { const response = await requestMethod({ method, url, headers }); const normalizedResponse = normalizePaginatedListResponse(response); url = ((normalizedResponse.headers.link || "").match( - /<([^>]+)>;\s*rel="next"/ + /<([^<>]+)>;\s*rel="next"/ ) || [])[1]; return { value: normalizedResponse }; } catch (error) { @@ -8035,6 +8035,8 @@ var paginatingEndpoints = [ "GET /orgs/{org}/members/{username}/codespaces", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", + "GET /orgs/{org}/organization-roles/{role_id}/teams", + "GET /orgs/{org}/organization-roles/{role_id}/users", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", @@ -8271,7 +8273,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "10.2.0"; +var VERSION = "10.4.1"; // pkg/dist-src/generated/endpoints.js var Endpoints = { @@ -8398,6 +8400,9 @@ var Endpoints = { "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" ], getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + getCustomOidcSubClaimForRepo: [ + "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], getEnvironmentPublicKey: [ "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key" ], @@ -8550,6 +8555,9 @@ var Endpoints = { setCustomLabelsForSelfHostedRunnerForRepo: [ "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" ], + setCustomOidcSubClaimForRepo: [ + "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], setGithubActionsDefaultWorkflowPermissionsOrganization: [ "PUT /orgs/{org}/actions/permissions/workflow" ], @@ -8619,6 +8627,7 @@ var Endpoints = { listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], markNotificationsAsRead: ["PUT /notifications"], markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], + markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], setThreadSubscription: [ @@ -8895,10 +8904,10 @@ var Endpoints = { updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] }, copilot: { - addCopilotForBusinessSeatsForTeams: [ + addCopilotSeatsForTeams: [ "POST /orgs/{org}/copilot/billing/selected_teams" ], - addCopilotForBusinessSeatsForUsers: [ + addCopilotSeatsForUsers: [ "POST /orgs/{org}/copilot/billing/selected_users" ], cancelCopilotSeatAssignmentForTeams: [ @@ -9211,10 +9220,24 @@ var Endpoints = { } ] }, + oidc: { + getOidcCustomSubTemplateForOrg: [ + "GET /orgs/{org}/actions/oidc/customization/sub" + ], + updateOidcCustomSubTemplateForOrg: [ + "PUT /orgs/{org}/actions/oidc/customization/sub" + ] + }, orgs: { addSecurityManagerTeam: [ "PUT /orgs/{org}/security-managers/teams/{team_slug}" ], + assignTeamToOrgRole: [ + "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + assignUserToOrgRole: [ + "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], blockUser: ["PUT /orgs/{org}/blocks/{username}"], cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], @@ -9223,6 +9246,7 @@ var Endpoints = { convertMemberToOutsideCollaborator: [ "PUT /orgs/{org}/outside_collaborators/{username}" ], + createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], createInvitation: ["POST /orgs/{org}/invitations"], createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], createOrUpdateCustomPropertiesValuesForRepos: [ @@ -9233,6 +9257,9 @@ var Endpoints = { ], createWebhook: ["POST /orgs/{org}/hooks"], delete: ["DELETE /orgs/{org}"], + deleteCustomOrganizationRole: [ + "DELETE /orgs/{org}/organization-roles/{role_id}" + ], deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], enableOrDisableSecurityProductOnAllOrgRepos: [ "POST /orgs/{org}/{security_product}/{enablement}" @@ -9244,6 +9271,7 @@ var Endpoints = { ], getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], + getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], getWebhookDelivery: [ @@ -9259,6 +9287,12 @@ var Endpoints = { listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], listMembers: ["GET /orgs/{org}/members"], listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], + listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], + listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], + listOrgRoles: ["GET /orgs/{org}/organization-roles"], + listOrganizationFineGrainedPermissions: [ + "GET /orgs/{org}/organization-fine-grained-permissions" + ], listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], listPatGrantRepositories: [ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" @@ -9273,6 +9307,9 @@ var Endpoints = { listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], listWebhooks: ["GET /orgs/{org}/hooks"], + patchCustomOrganizationRole: [ + "PATCH /orgs/{org}/organization-roles/{role_id}" + ], pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], redeliverWebhookDelivery: [ "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" @@ -9297,6 +9334,18 @@ var Endpoints = { reviewPatGrantRequestsInBulk: [ "POST /orgs/{org}/personal-access-token-requests" ], + revokeAllOrgRolesTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" + ], + revokeAllOrgRolesUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}" + ], + revokeOrgRoleTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + revokeOrgRoleUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], setPublicMembershipForAuthenticatedUser: [ "PUT /orgs/{org}/public_members/{username}" @@ -9587,6 +9636,9 @@ var Endpoints = { {}, { mapToData: "users" } ], + cancelPagesDeployment: [ + "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" + ], checkAutomatedSecurityFixes: [ "GET /repos/{owner}/{repo}/automated-security-fixes" ], @@ -9622,12 +9674,15 @@ var Endpoints = { createForAuthenticatedUser: ["POST /user/repos"], createFork: ["POST /repos/{owner}/{repo}/forks"], createInOrg: ["POST /orgs/{org}/repos"], + createOrUpdateCustomPropertiesValues: [ + "PATCH /repos/{owner}/{repo}/properties/values" + ], createOrUpdateEnvironment: [ "PUT /repos/{owner}/{repo}/environments/{environment_name}" ], createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], createOrgRuleset: ["POST /orgs/{org}/rulesets"], - createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployment"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], createPagesSite: ["POST /repos/{owner}/{repo}/pages"], createRelease: ["POST /repos/{owner}/{repo}/releases"], createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], @@ -9780,6 +9835,9 @@ var Endpoints = { getOrgRulesets: ["GET /orgs/{org}/rulesets"], getPages: ["GET /repos/{owner}/{repo}/pages"], getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], + getPagesDeployment: [ + "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" + ], getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], getPullRequestReviewProtection: [ @@ -9990,6 +10048,9 @@ var Endpoints = { ] }, securityAdvisories: { + createFork: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" + ], createPrivateVulnerabilityReport: [ "POST /repos/{owner}/{repo}/security-advisories/reports" ], @@ -10413,7 +10474,7 @@ var RequestError = class extends Error { if (options.request.headers.authorization) { requestCopy.headers = Object.assign({}, options.request.headers, { authorization: options.request.headers.authorization.replace( - / .*$/, + /(?]+)>; rel="deprecation"/); + const matches = headers.link && headers.link.match(/<([^<>]+)>; rel="deprecation"/); const deprecationLink = matches && matches.pop(); log.warn( `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` @@ -10625,11 +10687,17 @@ async function getResponseData(response) { function toErrorMessage(data) { if (typeof data === "string") return data; + let suffix; + if ("documentation_url" in data) { + suffix = ` - ${data.documentation_url}`; + } else { + suffix = ""; + } if ("message" in data) { if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; + return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; } - return data.message; + return `${data.message}${suffix}`; } return `Unknown error: ${JSON.stringify(data)}`; } @@ -37680,7 +37748,7 @@ module.exports = { const { parseSetCookie } = __nccwpck_require__(8915) -const { stringify, getHeadersList } = __nccwpck_require__(3834) +const { stringify } = __nccwpck_require__(3834) const { webidl } = __nccwpck_require__(4222) const { Headers } = __nccwpck_require__(6349) @@ -37756,14 +37824,13 @@ function getSetCookies (headers) { webidl.brandCheck(headers, Headers, { strict: false }) - const cookies = getHeadersList(headers).cookies + const cookies = headers.getSetCookie() if (!cookies) { return [] } - // In older versions of undici, cookies is a list of name:value. - return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) + return cookies.map((pair) => parseSetCookie(pair)) } /** @@ -38191,14 +38258,15 @@ module.exports = { /***/ }), /***/ 3834: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ ((module) => { "use strict"; -const assert = __nccwpck_require__(2613) -const { kHeadersList } = __nccwpck_require__(6443) - +/** + * @param {string} value + * @returns {boolean} + */ function isCTLExcludingHtab (value) { if (value.length === 0) { return false @@ -38459,31 +38527,13 @@ function stringify (cookie) { return out.join('; ') } -let kHeadersListNode - -function getHeadersList (headers) { - if (headers[kHeadersList]) { - return headers[kHeadersList] - } - - if (!kHeadersListNode) { - kHeadersListNode = Object.getOwnPropertySymbols(headers).find( - (symbol) => symbol.description === 'headers list' - ) - - assert(kHeadersListNode, 'Headers cannot be parsed') - } - - const headersList = headers[kHeadersListNode] - assert(headersList) - - return headersList -} - module.exports = { isCTLExcludingHtab, - stringify, - getHeadersList + validateCookieName, + validateCookiePath, + validateCookieValue, + toIMFDate, + stringify } @@ -38684,6 +38734,132 @@ function onConnectTimeout (socket) { module.exports = buildConnector +/***/ }), + +/***/ 735: +/***/ ((module) => { + +"use strict"; + + +/** @type {Record} */ +const headerNameLowerCasedRecord = {} + +// https://developer.mozilla.org/docs/Web/HTTP/Headers +const wellknownHeaderNames = [ + 'Accept', + 'Accept-Encoding', + 'Accept-Language', + 'Accept-Ranges', + 'Access-Control-Allow-Credentials', + 'Access-Control-Allow-Headers', + 'Access-Control-Allow-Methods', + 'Access-Control-Allow-Origin', + 'Access-Control-Expose-Headers', + 'Access-Control-Max-Age', + 'Access-Control-Request-Headers', + 'Access-Control-Request-Method', + 'Age', + 'Allow', + 'Alt-Svc', + 'Alt-Used', + 'Authorization', + 'Cache-Control', + 'Clear-Site-Data', + 'Connection', + 'Content-Disposition', + 'Content-Encoding', + 'Content-Language', + 'Content-Length', + 'Content-Location', + 'Content-Range', + 'Content-Security-Policy', + 'Content-Security-Policy-Report-Only', + 'Content-Type', + 'Cookie', + 'Cross-Origin-Embedder-Policy', + 'Cross-Origin-Opener-Policy', + 'Cross-Origin-Resource-Policy', + 'Date', + 'Device-Memory', + 'Downlink', + 'ECT', + 'ETag', + 'Expect', + 'Expect-CT', + 'Expires', + 'Forwarded', + 'From', + 'Host', + 'If-Match', + 'If-Modified-Since', + 'If-None-Match', + 'If-Range', + 'If-Unmodified-Since', + 'Keep-Alive', + 'Last-Modified', + 'Link', + 'Location', + 'Max-Forwards', + 'Origin', + 'Permissions-Policy', + 'Pragma', + 'Proxy-Authenticate', + 'Proxy-Authorization', + 'RTT', + 'Range', + 'Referer', + 'Referrer-Policy', + 'Refresh', + 'Retry-After', + 'Sec-WebSocket-Accept', + 'Sec-WebSocket-Extensions', + 'Sec-WebSocket-Key', + 'Sec-WebSocket-Protocol', + 'Sec-WebSocket-Version', + 'Server', + 'Server-Timing', + 'Service-Worker-Allowed', + 'Service-Worker-Navigation-Preload', + 'Set-Cookie', + 'SourceMap', + 'Strict-Transport-Security', + 'Supports-Loading-Mode', + 'TE', + 'Timing-Allow-Origin', + 'Trailer', + 'Transfer-Encoding', + 'Upgrade', + 'Upgrade-Insecure-Requests', + 'User-Agent', + 'Vary', + 'Via', + 'WWW-Authenticate', + 'X-Content-Type-Options', + 'X-DNS-Prefetch-Control', + 'X-Frame-Options', + 'X-Permitted-Cross-Domain-Policies', + 'X-Powered-By', + 'X-Requested-With', + 'X-XSS-Protection' +] + +for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i] + const lowerCasedKey = key.toLowerCase() + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = + lowerCasedKey +} + +// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. +Object.setPrototypeOf(headerNameLowerCasedRecord, null) + +module.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord +} + + /***/ }), /***/ 8707: @@ -39516,6 +39692,7 @@ const { InvalidArgumentError } = __nccwpck_require__(8707) const { Blob } = __nccwpck_require__(181) const nodeUtil = __nccwpck_require__(9023) const { stringify } = __nccwpck_require__(3480) +const { headerNameLowerCasedRecord } = __nccwpck_require__(735) const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) @@ -39725,6 +39902,15 @@ function parseKeepAliveTimeout (val) { return m ? parseInt(m[1], 10) * 1000 : null } +/** + * Retrieves a header name and returns its lowercase value. + * @param {string | Buffer} value Header name + * @returns {string} + */ +function headerNameToString (value) { + return headerNameLowerCasedRecord[value] || value.toLowerCase() +} + function parseHeaders (headers, obj = {}) { // For H2 support if (!Array.isArray(headers)) return headers @@ -39996,6 +40182,7 @@ module.exports = { isIterable, isAsyncIterable, isDestroyed, + headerNameToString, parseRawHeaders, parseHeaders, parseKeepAliveTimeout, @@ -40275,6 +40462,14 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(8253) const { File: UndiciFile } = __nccwpck_require__(3041) const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) +let random +try { + const crypto = __nccwpck_require__(7598) + random = (max) => crypto.randomInt(0, max) +} catch { + random = (max) => Math.floor(Math.random(max)) +} + let ReadableStream = globalThis.ReadableStream /** @type {globalThis['File']} */ @@ -40360,7 +40555,7 @@ function extractBody (object, keepalive = false) { // Set source to a copy of the bytes held by object. source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` + const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` const prefix = `--${boundary}\r\nContent-Disposition: form-data` /*! formdata-polyfill. MIT License. Jimmy Wärting */ @@ -42342,6 +42537,7 @@ const { isValidHeaderName, isValidHeaderValue } = __nccwpck_require__(5523) +const util = __nccwpck_require__(9023) const { webidl } = __nccwpck_require__(4222) const assert = __nccwpck_require__(2613) @@ -42895,6 +43091,9 @@ Object.defineProperties(Headers.prototype, { [Symbol.toStringTag]: { value: 'Headers', configurable: true + }, + [util.inspect.custom]: { + enumerable: false } }) @@ -44132,6 +44331,9 @@ function httpRedirectFetch (fetchParams, response) { // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name request.headersList.delete('authorization') + // https://fetch.spec.whatwg.org/#authentication-entries + request.headersList.delete('proxy-authorization', true) + // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. request.headersList.delete('cookie') request.headersList.delete('host') @@ -46640,14 +46842,18 @@ const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(3440 const assert = __nccwpck_require__(2613) const { isUint8Array } = __nccwpck_require__(8253) +let supportedHashes = [] + // https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable /** @type {import('crypto')|undefined} */ let crypto try { crypto = __nccwpck_require__(6982) + const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] + supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) +/* c8 ignore next 3 */ } catch { - } function responseURL (response) { @@ -47175,66 +47381,56 @@ function bytesMatch (bytes, metadataList) { return true } - // 3. If parsedMetadata is the empty set, return true. + // 3. If response is not eligible for integrity validation, return false. + // TODO + + // 4. If parsedMetadata is the empty set, return true. if (parsedMetadata.length === 0) { return true } - // 4. Let metadata be the result of getting the strongest + // 5. Let metadata be the result of getting the strongest // metadata from parsedMetadata. - const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo)) - // get the strongest algorithm - const strongest = list[0].algo - // get all entries that use the strongest algorithm; ignore weaker - const metadata = list.filter((item) => item.algo === strongest) + const strongest = getStrongestMetadata(parsedMetadata) + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) - // 5. For each item in metadata: + // 6. For each item in metadata: for (const item of metadata) { // 1. Let algorithm be the alg component of item. const algorithm = item.algo // 2. Let expectedValue be the val component of item. - let expectedValue = item.hash + const expectedValue = item.hash // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e // "be liberal with padding". This is annoying, and it's not even in the spec. - if (expectedValue.endsWith('==')) { - expectedValue = expectedValue.slice(0, -2) - } - // 3. Let actualValue be the result of applying algorithm to bytes. let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') - if (actualValue.endsWith('==')) { - actualValue = actualValue.slice(0, -2) + if (actualValue[actualValue.length - 1] === '=') { + if (actualValue[actualValue.length - 2] === '=') { + actualValue = actualValue.slice(0, -2) + } else { + actualValue = actualValue.slice(0, -1) + } } // 4. If actualValue is a case-sensitive match for expectedValue, // return true. - if (actualValue === expectedValue) { - return true - } - - let actualBase64URL = crypto.createHash(algorithm).update(bytes).digest('base64url') - - if (actualBase64URL.endsWith('==')) { - actualBase64URL = actualBase64URL.slice(0, -2) - } - - if (actualBase64URL === expectedValue) { + if (compareBase64Mixed(actualValue, expectedValue)) { return true } } - // 6. Return false. + // 7. Return false. return false } // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options // https://www.w3.org/TR/CSP2/#source-list-syntax // https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 -const parseHashWithOptions = /((?sha256|sha384|sha512)-(?[A-z0-9+/]{1}.*={0,2}))( +[\x21-\x7e]?)?/i +const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i /** * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata @@ -47248,8 +47444,6 @@ function parseMetadata (metadata) { // 2. Let empty be equal to true. let empty = true - const supportedHashes = crypto.getHashes() - // 3. For each token returned by splitting metadata on spaces: for (const token of metadata.split(' ')) { // 1. Set empty to false. @@ -47259,7 +47453,11 @@ function parseMetadata (metadata) { const parsedToken = parseHashWithOptions.exec(token) // 3. If token does not parse, continue to the next token. - if (parsedToken === null || parsedToken.groups === undefined) { + if ( + parsedToken === null || + parsedToken.groups === undefined || + parsedToken.groups.algo === undefined + ) { // Note: Chromium blocks the request at this point, but Firefox // gives a warning that an invalid integrity was given. The // correct behavior is to ignore these, and subsequently not @@ -47268,11 +47466,11 @@ function parseMetadata (metadata) { } // 4. Let algorithm be the hash-algo component of token. - const algorithm = parsedToken.groups.algo + const algorithm = parsedToken.groups.algo.toLowerCase() // 5. If algorithm is a hash function recognized by the user // agent, add the parsed token to result. - if (supportedHashes.includes(algorithm.toLowerCase())) { + if (supportedHashes.includes(algorithm)) { result.push(parsedToken.groups) } } @@ -47285,6 +47483,82 @@ function parseMetadata (metadata) { return result } +/** + * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList + */ +function getStrongestMetadata (metadataList) { + // Let algorithm be the algo component of the first item in metadataList. + // Can be sha256 + let algorithm = metadataList[0].algo + // If the algorithm is sha512, then it is the strongest + // and we can return immediately + if (algorithm[3] === '5') { + return algorithm + } + + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i] + // If the algorithm is sha512, then it is the strongest + // and we can break the loop immediately + if (metadata.algo[3] === '5') { + algorithm = 'sha512' + break + // If the algorithm is sha384, then a potential sha256 or sha384 is ignored + } else if (algorithm[3] === '3') { + continue + // algorithm is sha256, check if algorithm is sha384 and if so, set it as + // the strongest + } else if (metadata.algo[3] === '3') { + algorithm = 'sha384' + } + } + return algorithm +} + +function filterMetadataListByAlgorithm (metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList + } + + let pos = 0 + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i] + } + } + + metadataList.length = pos + + return metadataList +} + +/** + * Compares two base64 strings, allowing for base64url + * in the second string. + * +* @param {string} actualValue always base64 + * @param {string} expectedValue base64 or base64url + * @returns {boolean} + */ +function compareBase64Mixed (actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if ( + (actualValue[i] === '+' && expectedValue[i] === '-') || + (actualValue[i] === '/' && expectedValue[i] === '_') + ) { + continue + } + return false + } + } + + return true +} + // https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { // TODO @@ -47700,7 +47974,8 @@ module.exports = { urlHasHttpsScheme, urlIsHttpHttpsScheme, readAllBytes, - normalizeMethodRecord + normalizeMethodRecord, + parseMetadata } @@ -49787,12 +50062,17 @@ function parseLocation (statusCode, headers) { // https://tools.ietf.org/html/rfc7231#section-6.4.4 function shouldRemoveHeader (header, removeContent, unknownOrigin) { - return ( - (header.length === 4 && header.toString().toLowerCase() === 'host') || - (removeContent && header.toString().toLowerCase().indexOf('content-') === 0) || - (unknownOrigin && header.length === 13 && header.toString().toLowerCase() === 'authorization') || - (unknownOrigin && header.length === 6 && header.toString().toLowerCase() === 'cookie') - ) + if (header.length === 4) { + return util.headerNameToString(header) === 'host' + } + if (removeContent && util.headerNameToString(header).startsWith('content-')) { + return true + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util.headerNameToString(header) + return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' + } + return false } // https://tools.ietf.org/html/rfc7231#section-6.4 @@ -51990,6 +52270,20 @@ class Pool extends PoolBase { ? { ...options.interceptors } : undefined this[kFactory] = factory + + this.on('connectionError', (origin, targets, error) => { + // If a connection error occurs, we remove the client from the pool, + // and emit a connectionError event. They will not be re-used. + // Fixes https://github.com/nodejs/undici/issues/3895 + for (const target of targets) { + // Do not use kRemoveClient here, as it will close the client, + // but the client cannot be closed in this state. + const idx = this[kClients].indexOf(target) + if (idx !== -1) { + this[kClients].splice(idx, 1) + } + } + }) } [kGetDispatcher] () { @@ -59489,6 +59783,14 @@ module.exports = require("net"); /***/ }), +/***/ 7598: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:crypto"); + +/***/ }), + /***/ 8474: /***/ ((module) => { From 389794c9ad7c655656d1cb4116cbb94257b58b55 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 7 Jun 2025 12:11:17 +0200 Subject: [PATCH 23/80] Update packages to latest minor releases --- package-lock.json | 46 +++++++++++++++++++++++----------------------- package.json | 6 +++--- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index d892009..56e00cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^29.5.14", - "@types/node": "^20.17.47", + "@types/node": "^20.19.0", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -33,8 +33,8 @@ "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-github": "^4.10.2", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-jest": "^28.13.0", + "eslint-plugin-prettier": "^5.4.1", "jest": "^29.7.0", "jest-circus": "^29.7.0", "jest-junit": "^16.0.0", @@ -1574,9 +1574,9 @@ "license": "MIT" }, "node_modules/@pkgr/core": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", - "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", + "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", "dev": true, "license": "MIT", "engines": { @@ -1776,12 +1776,12 @@ } }, "node_modules/@types/node": { - "version": "20.17.47", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.47.tgz", - "integrity": "sha512-3dLX0Upo1v7RvUimvxLeXqwrfyKxUINk0EAM83swP2mlSUcwV73sZy8XhNz8bcZ3VbsfQyC/y6jRdL5tgCNpDQ==", + "version": "20.19.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.0.tgz", + "integrity": "sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==", "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/picomatch": { @@ -3963,9 +3963,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.11.0.tgz", - "integrity": "sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==", + "version": "28.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.13.0.tgz", + "integrity": "sha512-4AuBcFWOriOeEqy6s4Zup/dQ7E1EPTyyfDaMYmM2YP9xEWPWwK3yYifH1dzY6aHRvyx7y53qMSIyT5s+jrorsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4037,14 +4037,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", - "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz", + "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.0" + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -7702,9 +7702,9 @@ } }, "node_modules/synckit": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz", - "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", + "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", "dev": true, "license": "MIT", "dependencies": { @@ -8062,9 +8062,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/universal-user-agent": { diff --git a/package.json b/package.json index 8d738a0..e5f4a01 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^29.5.14", - "@types/node": "^20.17.47", + "@types/node": "^20.19.0", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -59,8 +59,8 @@ "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-github": "^4.10.2", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.11.0", - "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-jest": "^28.13.0", + "eslint-plugin-prettier": "^5.4.1", "jest": "^29.7.0", "jest-circus": "^29.7.0", "jest-junit": "^16.0.0", From b522d19cacf8e74ab2e4393a8b17866e9ca85683 Mon Sep 17 00:00:00 2001 From: Oles Galatsan Date: Tue, 20 May 2025 10:32:39 +0300 Subject: [PATCH 24/80] Return links to summary report --- __tests__/__outputs__/dart-json.md | 2 +- __tests__/__outputs__/dotnet-nunit.md | 2 +- __tests__/__outputs__/dotnet-trx.md | 2 +- .../fluent-validation-test-results.md | 2 +- __tests__/__outputs__/golang-json.md | 2 +- __tests__/__outputs__/jest-junit-eslint.md | 2 +- __tests__/__outputs__/jest-junit.md | 2 +- .../jest-react-component-test-results.md | 2 +- __tests__/__outputs__/jest-test-results.md | 2 +- __tests__/__outputs__/junit-with-message.md | 2 +- __tests__/__outputs__/mocha-json.md | 2 +- __tests__/__outputs__/mocha-test-results.md | 2 +- .../__outputs__/provider-test-results.md | 2 +- .../pulsar-test-results-no-merge.md | 2 +- __tests__/__outputs__/pulsar-test-results.md | 2 +- __tests__/__outputs__/rspec-json.md | 2 +- .../__outputs__/silent-notes-test-results.md | 2 +- __tests__/__outputs__/swift-xunit.md | 2 +- dist/index.js | 511 ++++-------------- src/report/get-report.ts | 9 +- 20 files changed, 130 insertions(+), 426 deletions(-) diff --git a/__tests__/__outputs__/dart-json.md b/__tests__/__outputs__/dart-json.md index 9805d20..2b7ec09 100644 --- a/__tests__/__outputs__/dart-json.md +++ b/__tests__/__outputs__/dart-json.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/dart-json.json|1 ✅|4 ❌|1 ⚪|4s| +|[fixtures/dart-json.json](#user-content-r0)|1 ✅|4 ❌|1 ⚪|4s| ## ❌ fixtures/dart-json.json **6** tests were completed in **4s** with **1** passed, **4** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/dotnet-nunit.md b/__tests__/__outputs__/dotnet-nunit.md index e33c66d..a0985f5 100644 --- a/__tests__/__outputs__/dotnet-nunit.md +++ b/__tests__/__outputs__/dotnet-nunit.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-3%20passed%2C%205%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/dotnet-nunit.xml|3 ✅|5 ❌|1 ⚪|230ms| +|[fixtures/dotnet-nunit.xml](#user-content-r0)|3 ✅|5 ❌|1 ⚪|230ms| ## ❌ fixtures/dotnet-nunit.xml **9** tests were completed in **230ms** with **3** passed, **5** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/dotnet-trx.md b/__tests__/__outputs__/dotnet-trx.md index eedab46..92f12c0 100644 --- a/__tests__/__outputs__/dotnet-trx.md +++ b/__tests__/__outputs__/dotnet-trx.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%205%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/dotnet-trx.trx|5 ✅|5 ❌|1 ⚪|1s| +|[fixtures/dotnet-trx.trx](#user-content-r0)|5 ✅|5 ❌|1 ⚪|1s| ## ❌ fixtures/dotnet-trx.trx **11** tests were completed in **1s** with **5** passed, **5** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/fluent-validation-test-results.md b/__tests__/__outputs__/fluent-validation-test-results.md index 9337a62..83d0503 100644 --- a/__tests__/__outputs__/fluent-validation-test-results.md +++ b/__tests__/__outputs__/fluent-validation-test-results.md @@ -3,7 +3,7 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/FluentValidation.Tests.trx|803 ✅||1 ⚪|4s| +|[fixtures/external/FluentValidation.Tests.trx](#user-content-r0)|803 ✅||1 ⚪|4s| ## ✅ fixtures/external/FluentValidation.Tests.trx **804** tests were completed in **4s** with **803** passed, **0** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/golang-json.md b/__tests__/__outputs__/golang-json.md index b3640d8..8b63704 100644 --- a/__tests__/__outputs__/golang-json.md +++ b/__tests__/__outputs__/golang-json.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%206%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/golang-json.json|5 ✅|6 ❌|1 ⚪|6s| +|[fixtures/golang-json.json](#user-content-r0)|5 ✅|6 ❌|1 ⚪|6s| ## ❌ fixtures/golang-json.json **12** tests were completed in **6s** with **5** passed, **6** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/jest-junit-eslint.md b/__tests__/__outputs__/jest-junit-eslint.md index d3ad9b9..5ebb57e 100644 --- a/__tests__/__outputs__/jest-junit-eslint.md +++ b/__tests__/__outputs__/jest-junit-eslint.md @@ -3,7 +3,7 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/jest-junit-eslint.xml|1 ✅|||0ms| +|[fixtures/jest-junit-eslint.xml](#user-content-r0)|1 ✅|||0ms| ## ✅ fixtures/jest-junit-eslint.xml **1** tests were completed in **0ms** with **1** passed, **0** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/jest-junit.md b/__tests__/__outputs__/jest-junit.md index ed5a174..951256f 100644 --- a/__tests__/__outputs__/jest-junit.md +++ b/__tests__/__outputs__/jest-junit.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/jest-junit.xml|1 ✅|4 ❌|1 ⚪|1s| +|[fixtures/jest-junit.xml](#user-content-r0)|1 ✅|4 ❌|1 ⚪|1s| ## ❌ fixtures/jest-junit.xml **6** tests were completed in **1s** with **1** passed, **4** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/jest-react-component-test-results.md b/__tests__/__outputs__/jest-react-component-test-results.md index d71db4c..1365818 100644 --- a/__tests__/__outputs__/jest-react-component-test-results.md +++ b/__tests__/__outputs__/jest-react-component-test-results.md @@ -3,7 +3,7 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/jest/jest-react-component-test-results.xml|1 ✅|||1000ms| +|[fixtures/external/jest/jest-react-component-test-results.xml](#user-content-r0)|1 ✅|||1000ms| ## ✅ fixtures/external/jest/jest-react-component-test-results.xml **1** tests were completed in **1000ms** with **1** passed, **0** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/jest-test-results.md b/__tests__/__outputs__/jest-test-results.md index 25dd567..cfbc169 100644 --- a/__tests__/__outputs__/jest-test-results.md +++ b/__tests__/__outputs__/jest-test-results.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-4207%20passed%2C%202%20failed%2C%2030%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/jest/jest-test-results.xml|4207 ✅|2 ❌|30 ⚪|166s| +|[fixtures/external/jest/jest-test-results.xml](#user-content-r0)|4207 ✅|2 ❌|30 ⚪|166s| ## ❌ fixtures/external/jest/jest-test-results.xml **4239** tests were completed in **166s** with **4207** passed, **2** failed and **30** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/junit-with-message.md b/__tests__/__outputs__/junit-with-message.md index 988d8fc..634a402 100644 --- a/__tests__/__outputs__/junit-with-message.md +++ b/__tests__/__outputs__/junit-with-message.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-1%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/junit-with-message.xml||1 ❌||1ms| +|[fixtures/junit-with-message.xml](#user-content-r0)||1 ❌||1ms| ## ❌ fixtures/junit-with-message.xml **1** tests were completed in **1ms** with **0** passed, **1** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/mocha-json.md b/__tests__/__outputs__/mocha-json.md index 50419e1..875f881 100644 --- a/__tests__/__outputs__/mocha-json.md +++ b/__tests__/__outputs__/mocha-json.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%204%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/mocha-json.json|1 ✅|4 ❌|1 ⚪|12ms| +|[fixtures/mocha-json.json](#user-content-r0)|1 ✅|4 ❌|1 ⚪|12ms| ## ❌ fixtures/mocha-json.json **6** tests were completed in **12ms** with **1** passed, **4** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/mocha-test-results.md b/__tests__/__outputs__/mocha-test-results.md index 8831d7b..4a6e2f6 100644 --- a/__tests__/__outputs__/mocha-test-results.md +++ b/__tests__/__outputs__/mocha-test-results.md @@ -3,7 +3,7 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/mocha/mocha-test-results.json|833 ✅||6 ⚪|6s| +|[fixtures/external/mocha/mocha-test-results.json](#user-content-r0)|833 ✅||6 ⚪|6s| ## ✅ fixtures/external/mocha/mocha-test-results.json **839** tests were completed in **6s** with **833** passed, **0** failed and **6** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/provider-test-results.md b/__tests__/__outputs__/provider-test-results.md index b2216ad..172f070 100644 --- a/__tests__/__outputs__/provider-test-results.md +++ b/__tests__/__outputs__/provider-test-results.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-268%20passed%2C%201%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/flutter/provider-test-results.json|268 ✅|1 ❌||0ms| +|[fixtures/external/flutter/provider-test-results.json](#user-content-r0)|268 ✅|1 ❌||0ms| ## ❌ fixtures/external/flutter/provider-test-results.json **269** tests were completed in **0ms** with **268** passed, **1** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/pulsar-test-results-no-merge.md b/__tests__/__outputs__/pulsar-test-results-no-merge.md index b1738a4..de5a9b6 100644 --- a/__tests__/__outputs__/pulsar-test-results-no-merge.md +++ b/__tests__/__outputs__/pulsar-test-results-no-merge.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-1%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/java/TEST-org.apache.pulsar.AddMissingPatchVersionTest.xml||1 ❌|1 ⚪|116ms| +|[fixtures/external/java/TEST-org.apache.pulsar.AddMissingPatchVersionTest.xml](#user-content-r0)||1 ❌|1 ⚪|116ms| ## ❌ fixtures/external/java/TEST-org.apache.pulsar.AddMissingPatchVersionTest.xml **2** tests were completed in **116ms** with **0** passed, **1** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/pulsar-test-results.md b/__tests__/__outputs__/pulsar-test-results.md index a9a5290..aaaa82e 100644 --- a/__tests__/__outputs__/pulsar-test-results.md +++ b/__tests__/__outputs__/pulsar-test-results.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-793%20passed%2C%201%20failed%2C%2014%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/java/pulsar-test-report.xml|793 ✅|1 ❌|14 ⚪|2127s| +|[fixtures/external/java/pulsar-test-report.xml](#user-content-r0)|793 ✅|1 ❌|14 ⚪|2127s| ## ❌ fixtures/external/java/pulsar-test-report.xml **808** tests were completed in **2127s** with **793** passed, **1** failed and **14** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/rspec-json.md b/__tests__/__outputs__/rspec-json.md index 7444608..d64cf44 100644 --- a/__tests__/__outputs__/rspec-json.md +++ b/__tests__/__outputs__/rspec-json.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%201%20failed%2C%201%20skipped-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/rspec-json.json|1 ✅|1 ❌|1 ⚪|0ms| +|[fixtures/rspec-json.json](#user-content-r0)|1 ✅|1 ❌|1 ⚪|0ms| ## ❌ fixtures/rspec-json.json **3** tests were completed in **0ms** with **1** passed, **1** failed and **1** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/silent-notes-test-results.md b/__tests__/__outputs__/silent-notes-test-results.md index 34f5bab..e3abc49 100644 --- a/__tests__/__outputs__/silent-notes-test-results.md +++ b/__tests__/__outputs__/silent-notes-test-results.md @@ -3,7 +3,7 @@ |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/external/SilentNotes.trx|67 ✅||12 ⚪|1s| +|[fixtures/external/SilentNotes.trx](#user-content-r0)|67 ✅||12 ⚪|1s| ## ✅ fixtures/external/SilentNotes.trx **79** tests were completed in **1s** with **67** passed, **0** failed and **12** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/__tests__/__outputs__/swift-xunit.md b/__tests__/__outputs__/swift-xunit.md index 6f9ed46..b001151 100644 --- a/__tests__/__outputs__/swift-xunit.md +++ b/__tests__/__outputs__/swift-xunit.md @@ -1,7 +1,7 @@ ![Tests failed](https://img.shields.io/badge/tests-2%20passed%2C%201%20failed-critical) |Report|Passed|Failed|Skipped|Time| |:---|---:|---:|---:|---:| -|fixtures/swift-xunit.xml|2 ✅|1 ❌||220ms| +|[fixtures/swift-xunit.xml](#user-content-r0)|2 ✅|1 ❌||220ms| ## ❌ fixtures/swift-xunit.xml **3** tests were completed in **220ms** with **2** passed, **1** failed and **0** skipped. |Test suite|Passed|Failed|Skipped|Time| diff --git a/dist/index.js b/dist/index.js index bf79df4..2c25940 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2034,14 +2034,17 @@ function getTestRunsReport(testRuns, options) { } if (testRuns.length > 0 || options.onlySummary) { const tableData = testRuns - .filter(tr => tr.passed > 0 || tr.failed > 0 || tr.skipped > 0) - .map(tr => { + .map((tr, originalIndex) => ({ tr, originalIndex })) + .filter(({ tr }) => tr.passed > 0 || tr.failed > 0 || tr.skipped > 0) + .map(({ tr, originalIndex }) => { const time = (0, markdown_utils_1.formatTime)(tr.time); const name = tr.path; + const addr = options.baseUrl + makeRunSlug(originalIndex, options).link; + const nameLink = (0, markdown_utils_1.link)(name, addr); const passed = tr.passed > 0 ? `${tr.passed} ${markdown_utils_1.Icon.success}` : ''; const failed = tr.failed > 0 ? `${tr.failed} ${markdown_utils_1.Icon.fail}` : ''; const skipped = tr.skipped > 0 ? `${tr.skipped} ${markdown_utils_1.Icon.skip}` : ''; - return [name, passed, failed, skipped, time]; + return [nameLink, passed, failed, skipped, time]; }); const resultsTable = (0, markdown_utils_1.table)(['Report', 'Passed', 'Failed', 'Skipped', 'Time'], [markdown_utils_1.Align.Left, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right, markdown_utils_1.Align.Right], ...tableData); sections.push(resultsTable); @@ -4568,7 +4571,6 @@ class Context { this.action = process.env.GITHUB_ACTION; this.actor = process.env.GITHUB_ACTOR; this.job = process.env.GITHUB_JOB; - this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10); this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; @@ -7154,11 +7156,11 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var index_exports = {}; -__export(index_exports, { +var dist_src_exports = {}; +__export(dist_src_exports, { Octokit: () => Octokit }); -module.exports = __toCommonJS(index_exports); +module.exports = __toCommonJS(dist_src_exports); var import_universal_user_agent = __nccwpck_require__(3843); var import_before_after_hook = __nccwpck_require__(2732); var import_request = __nccwpck_require__(8636); @@ -7166,7 +7168,7 @@ var import_graphql = __nccwpck_require__(7); var import_auth_token = __nccwpck_require__(7864); // pkg/dist-src/version.js -var VERSION = "5.2.1"; +var VERSION = "5.0.2"; // pkg/dist-src/index.js var noop = () => { @@ -7333,7 +7335,7 @@ module.exports = __toCommonJS(dist_src_exports); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "9.0.6"; +var VERSION = "9.0.4"; // pkg/dist-src/defaults.js var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; @@ -7438,9 +7440,9 @@ function addQueryParameters(url, parameters) { } // pkg/dist-src/util/extract-url-variable-names.js -var urlVariableRegex = /\{[^{}}]+\}/g; +var urlVariableRegex = /\{[^}]+\}/g; function removeNonChars(variableName) { - return variableName.replace(/(?:^\W+)|(?:(? { const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; return `application/vnd.github.${preview}-preview${format}`; @@ -7707,18 +7709,18 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var index_exports = {}; -__export(index_exports, { +var dist_src_exports = {}; +__export(dist_src_exports, { GraphqlResponseError: () => GraphqlResponseError, graphql: () => graphql2, withCustomRequest: () => withCustomRequest }); -module.exports = __toCommonJS(index_exports); +module.exports = __toCommonJS(dist_src_exports); var import_request3 = __nccwpck_require__(8636); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "7.1.1"; +var VERSION = "7.0.2"; // pkg/dist-src/with-defaults.js var import_request2 = __nccwpck_require__(8636); @@ -7766,7 +7768,8 @@ function graphql(request2, query, options) { ); } for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) + continue; return Promise.reject( new Error( `[@octokit/graphql] "${key}" cannot be used as variable name` @@ -7874,7 +7877,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "9.2.2"; +var VERSION = "9.1.5"; // pkg/dist-src/normalize-paginated-list-response.js function normalizePaginatedListResponse(response) { @@ -7922,7 +7925,7 @@ function iterator(octokit, route, parameters) { const response = await requestMethod({ method, url, headers }); const normalizedResponse = normalizePaginatedListResponse(response); url = ((normalizedResponse.headers.link || "").match( - /<([^<>]+)>;\s*rel="next"/ + /<([^>]+)>;\s*rel="next"/ ) || [])[1]; return { value: normalizedResponse }; } catch (error) { @@ -8035,8 +8038,6 @@ var paginatingEndpoints = [ "GET /orgs/{org}/members/{username}/codespaces", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", - "GET /orgs/{org}/organization-roles/{role_id}/teams", - "GET /orgs/{org}/organization-roles/{role_id}/users", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", @@ -8273,7 +8274,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "10.4.1"; +var VERSION = "10.2.0"; // pkg/dist-src/generated/endpoints.js var Endpoints = { @@ -8400,9 +8401,6 @@ var Endpoints = { "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" ], getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], - getCustomOidcSubClaimForRepo: [ - "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], getEnvironmentPublicKey: [ "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key" ], @@ -8555,9 +8553,6 @@ var Endpoints = { setCustomLabelsForSelfHostedRunnerForRepo: [ "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" ], - setCustomOidcSubClaimForRepo: [ - "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" - ], setGithubActionsDefaultWorkflowPermissionsOrganization: [ "PUT /orgs/{org}/actions/permissions/workflow" ], @@ -8627,7 +8622,6 @@ var Endpoints = { listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], markNotificationsAsRead: ["PUT /notifications"], markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], - markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], setThreadSubscription: [ @@ -8904,10 +8898,10 @@ var Endpoints = { updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] }, copilot: { - addCopilotSeatsForTeams: [ + addCopilotForBusinessSeatsForTeams: [ "POST /orgs/{org}/copilot/billing/selected_teams" ], - addCopilotSeatsForUsers: [ + addCopilotForBusinessSeatsForUsers: [ "POST /orgs/{org}/copilot/billing/selected_users" ], cancelCopilotSeatAssignmentForTeams: [ @@ -9220,24 +9214,10 @@ var Endpoints = { } ] }, - oidc: { - getOidcCustomSubTemplateForOrg: [ - "GET /orgs/{org}/actions/oidc/customization/sub" - ], - updateOidcCustomSubTemplateForOrg: [ - "PUT /orgs/{org}/actions/oidc/customization/sub" - ] - }, orgs: { addSecurityManagerTeam: [ "PUT /orgs/{org}/security-managers/teams/{team_slug}" ], - assignTeamToOrgRole: [ - "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - assignUserToOrgRole: [ - "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], blockUser: ["PUT /orgs/{org}/blocks/{username}"], cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], @@ -9246,7 +9226,6 @@ var Endpoints = { convertMemberToOutsideCollaborator: [ "PUT /orgs/{org}/outside_collaborators/{username}" ], - createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], createInvitation: ["POST /orgs/{org}/invitations"], createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], createOrUpdateCustomPropertiesValuesForRepos: [ @@ -9257,9 +9236,6 @@ var Endpoints = { ], createWebhook: ["POST /orgs/{org}/hooks"], delete: ["DELETE /orgs/{org}"], - deleteCustomOrganizationRole: [ - "DELETE /orgs/{org}/organization-roles/{role_id}" - ], deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], enableOrDisableSecurityProductOnAllOrgRepos: [ "POST /orgs/{org}/{security_product}/{enablement}" @@ -9271,7 +9247,6 @@ var Endpoints = { ], getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], - getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], getWebhookDelivery: [ @@ -9287,12 +9262,6 @@ var Endpoints = { listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], listMembers: ["GET /orgs/{org}/members"], listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], - listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], - listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], - listOrgRoles: ["GET /orgs/{org}/organization-roles"], - listOrganizationFineGrainedPermissions: [ - "GET /orgs/{org}/organization-fine-grained-permissions" - ], listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], listPatGrantRepositories: [ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" @@ -9307,9 +9276,6 @@ var Endpoints = { listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], listWebhooks: ["GET /orgs/{org}/hooks"], - patchCustomOrganizationRole: [ - "PATCH /orgs/{org}/organization-roles/{role_id}" - ], pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], redeliverWebhookDelivery: [ "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" @@ -9334,18 +9300,6 @@ var Endpoints = { reviewPatGrantRequestsInBulk: [ "POST /orgs/{org}/personal-access-token-requests" ], - revokeAllOrgRolesTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" - ], - revokeAllOrgRolesUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}" - ], - revokeOrgRoleTeam: [ - "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" - ], - revokeOrgRoleUser: [ - "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" - ], setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], setPublicMembershipForAuthenticatedUser: [ "PUT /orgs/{org}/public_members/{username}" @@ -9636,9 +9590,6 @@ var Endpoints = { {}, { mapToData: "users" } ], - cancelPagesDeployment: [ - "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" - ], checkAutomatedSecurityFixes: [ "GET /repos/{owner}/{repo}/automated-security-fixes" ], @@ -9674,15 +9625,12 @@ var Endpoints = { createForAuthenticatedUser: ["POST /user/repos"], createFork: ["POST /repos/{owner}/{repo}/forks"], createInOrg: ["POST /orgs/{org}/repos"], - createOrUpdateCustomPropertiesValues: [ - "PATCH /repos/{owner}/{repo}/properties/values" - ], createOrUpdateEnvironment: [ "PUT /repos/{owner}/{repo}/environments/{environment_name}" ], createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], createOrgRuleset: ["POST /orgs/{org}/rulesets"], - createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployment"], createPagesSite: ["POST /repos/{owner}/{repo}/pages"], createRelease: ["POST /repos/{owner}/{repo}/releases"], createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], @@ -9835,9 +9783,6 @@ var Endpoints = { getOrgRulesets: ["GET /orgs/{org}/rulesets"], getPages: ["GET /repos/{owner}/{repo}/pages"], getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], - getPagesDeployment: [ - "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" - ], getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], getPullRequestReviewProtection: [ @@ -10048,9 +9993,6 @@ var Endpoints = { ] }, securityAdvisories: { - createFork: [ - "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" - ], createPrivateVulnerabilityReport: [ "POST /repos/{owner}/{repo}/security-advisories/reports" ], @@ -10474,7 +10416,7 @@ var RequestError = class extends Error { if (options.request.headers.authorization) { requestCopy.headers = Object.assign({}, options.request.headers, { authorization: options.request.headers.authorization.replace( - /(?]+)>; rel="deprecation"/); + const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); const deprecationLink = matches && matches.pop(); log.warn( `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` @@ -10687,17 +10628,11 @@ async function getResponseData(response) { function toErrorMessage(data) { if (typeof data === "string") return data; - let suffix; - if ("documentation_url" in data) { - suffix = ` - ${data.documentation_url}`; - } else { - suffix = ""; - } if ("message" in data) { if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; + return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; } - return `${data.message}${suffix}`; + return data.message; } return `Unknown error: ${JSON.stringify(data)}`; } @@ -37748,7 +37683,7 @@ module.exports = { const { parseSetCookie } = __nccwpck_require__(8915) -const { stringify } = __nccwpck_require__(3834) +const { stringify, getHeadersList } = __nccwpck_require__(3834) const { webidl } = __nccwpck_require__(4222) const { Headers } = __nccwpck_require__(6349) @@ -37824,13 +37759,14 @@ function getSetCookies (headers) { webidl.brandCheck(headers, Headers, { strict: false }) - const cookies = headers.getSetCookie() + const cookies = getHeadersList(headers).cookies if (!cookies) { return [] } - return cookies.map((pair) => parseSetCookie(pair)) + // In older versions of undici, cookies is a list of name:value. + return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) } /** @@ -38258,15 +38194,14 @@ module.exports = { /***/ }), /***/ 3834: -/***/ ((module) => { +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; -/** - * @param {string} value - * @returns {boolean} - */ +const assert = __nccwpck_require__(2613) +const { kHeadersList } = __nccwpck_require__(6443) + function isCTLExcludingHtab (value) { if (value.length === 0) { return false @@ -38527,13 +38462,31 @@ function stringify (cookie) { return out.join('; ') } +let kHeadersListNode + +function getHeadersList (headers) { + if (headers[kHeadersList]) { + return headers[kHeadersList] + } + + if (!kHeadersListNode) { + kHeadersListNode = Object.getOwnPropertySymbols(headers).find( + (symbol) => symbol.description === 'headers list' + ) + + assert(kHeadersListNode, 'Headers cannot be parsed') + } + + const headersList = headers[kHeadersListNode] + assert(headersList) + + return headersList +} + module.exports = { isCTLExcludingHtab, - validateCookieName, - validateCookiePath, - validateCookieValue, - toIMFDate, - stringify + stringify, + getHeadersList } @@ -38734,132 +38687,6 @@ function onConnectTimeout (socket) { module.exports = buildConnector -/***/ }), - -/***/ 735: -/***/ ((module) => { - -"use strict"; - - -/** @type {Record} */ -const headerNameLowerCasedRecord = {} - -// https://developer.mozilla.org/docs/Web/HTTP/Headers -const wellknownHeaderNames = [ - 'Accept', - 'Accept-Encoding', - 'Accept-Language', - 'Accept-Ranges', - 'Access-Control-Allow-Credentials', - 'Access-Control-Allow-Headers', - 'Access-Control-Allow-Methods', - 'Access-Control-Allow-Origin', - 'Access-Control-Expose-Headers', - 'Access-Control-Max-Age', - 'Access-Control-Request-Headers', - 'Access-Control-Request-Method', - 'Age', - 'Allow', - 'Alt-Svc', - 'Alt-Used', - 'Authorization', - 'Cache-Control', - 'Clear-Site-Data', - 'Connection', - 'Content-Disposition', - 'Content-Encoding', - 'Content-Language', - 'Content-Length', - 'Content-Location', - 'Content-Range', - 'Content-Security-Policy', - 'Content-Security-Policy-Report-Only', - 'Content-Type', - 'Cookie', - 'Cross-Origin-Embedder-Policy', - 'Cross-Origin-Opener-Policy', - 'Cross-Origin-Resource-Policy', - 'Date', - 'Device-Memory', - 'Downlink', - 'ECT', - 'ETag', - 'Expect', - 'Expect-CT', - 'Expires', - 'Forwarded', - 'From', - 'Host', - 'If-Match', - 'If-Modified-Since', - 'If-None-Match', - 'If-Range', - 'If-Unmodified-Since', - 'Keep-Alive', - 'Last-Modified', - 'Link', - 'Location', - 'Max-Forwards', - 'Origin', - 'Permissions-Policy', - 'Pragma', - 'Proxy-Authenticate', - 'Proxy-Authorization', - 'RTT', - 'Range', - 'Referer', - 'Referrer-Policy', - 'Refresh', - 'Retry-After', - 'Sec-WebSocket-Accept', - 'Sec-WebSocket-Extensions', - 'Sec-WebSocket-Key', - 'Sec-WebSocket-Protocol', - 'Sec-WebSocket-Version', - 'Server', - 'Server-Timing', - 'Service-Worker-Allowed', - 'Service-Worker-Navigation-Preload', - 'Set-Cookie', - 'SourceMap', - 'Strict-Transport-Security', - 'Supports-Loading-Mode', - 'TE', - 'Timing-Allow-Origin', - 'Trailer', - 'Transfer-Encoding', - 'Upgrade', - 'Upgrade-Insecure-Requests', - 'User-Agent', - 'Vary', - 'Via', - 'WWW-Authenticate', - 'X-Content-Type-Options', - 'X-DNS-Prefetch-Control', - 'X-Frame-Options', - 'X-Permitted-Cross-Domain-Policies', - 'X-Powered-By', - 'X-Requested-With', - 'X-XSS-Protection' -] - -for (let i = 0; i < wellknownHeaderNames.length; ++i) { - const key = wellknownHeaderNames[i] - const lowerCasedKey = key.toLowerCase() - headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = - lowerCasedKey -} - -// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. -Object.setPrototypeOf(headerNameLowerCasedRecord, null) - -module.exports = { - wellknownHeaderNames, - headerNameLowerCasedRecord -} - - /***/ }), /***/ 8707: @@ -39692,7 +39519,6 @@ const { InvalidArgumentError } = __nccwpck_require__(8707) const { Blob } = __nccwpck_require__(181) const nodeUtil = __nccwpck_require__(9023) const { stringify } = __nccwpck_require__(3480) -const { headerNameLowerCasedRecord } = __nccwpck_require__(735) const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) @@ -39902,15 +39728,6 @@ function parseKeepAliveTimeout (val) { return m ? parseInt(m[1], 10) * 1000 : null } -/** - * Retrieves a header name and returns its lowercase value. - * @param {string | Buffer} value Header name - * @returns {string} - */ -function headerNameToString (value) { - return headerNameLowerCasedRecord[value] || value.toLowerCase() -} - function parseHeaders (headers, obj = {}) { // For H2 support if (!Array.isArray(headers)) return headers @@ -40182,7 +39999,6 @@ module.exports = { isIterable, isAsyncIterable, isDestroyed, - headerNameToString, parseRawHeaders, parseHeaders, parseKeepAliveTimeout, @@ -40462,14 +40278,6 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(8253) const { File: UndiciFile } = __nccwpck_require__(3041) const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) -let random -try { - const crypto = __nccwpck_require__(7598) - random = (max) => crypto.randomInt(0, max) -} catch { - random = (max) => Math.floor(Math.random(max)) -} - let ReadableStream = globalThis.ReadableStream /** @type {globalThis['File']} */ @@ -40555,7 +40363,7 @@ function extractBody (object, keepalive = false) { // Set source to a copy of the bytes held by object. source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` + const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` const prefix = `--${boundary}\r\nContent-Disposition: form-data` /*! formdata-polyfill. MIT License. Jimmy Wärting */ @@ -42537,7 +42345,6 @@ const { isValidHeaderName, isValidHeaderValue } = __nccwpck_require__(5523) -const util = __nccwpck_require__(9023) const { webidl } = __nccwpck_require__(4222) const assert = __nccwpck_require__(2613) @@ -43091,9 +42898,6 @@ Object.defineProperties(Headers.prototype, { [Symbol.toStringTag]: { value: 'Headers', configurable: true - }, - [util.inspect.custom]: { - enumerable: false } }) @@ -44331,9 +44135,6 @@ function httpRedirectFetch (fetchParams, response) { // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name request.headersList.delete('authorization') - // https://fetch.spec.whatwg.org/#authentication-entries - request.headersList.delete('proxy-authorization', true) - // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. request.headersList.delete('cookie') request.headersList.delete('host') @@ -46842,18 +46643,14 @@ const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(3440 const assert = __nccwpck_require__(2613) const { isUint8Array } = __nccwpck_require__(8253) -let supportedHashes = [] - // https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable /** @type {import('crypto')|undefined} */ let crypto try { crypto = __nccwpck_require__(6982) - const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] - supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) -/* c8 ignore next 3 */ } catch { + } function responseURL (response) { @@ -47381,56 +47178,66 @@ function bytesMatch (bytes, metadataList) { return true } - // 3. If response is not eligible for integrity validation, return false. - // TODO - - // 4. If parsedMetadata is the empty set, return true. + // 3. If parsedMetadata is the empty set, return true. if (parsedMetadata.length === 0) { return true } - // 5. Let metadata be the result of getting the strongest + // 4. Let metadata be the result of getting the strongest // metadata from parsedMetadata. - const strongest = getStrongestMetadata(parsedMetadata) - const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) + const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo)) + // get the strongest algorithm + const strongest = list[0].algo + // get all entries that use the strongest algorithm; ignore weaker + const metadata = list.filter((item) => item.algo === strongest) - // 6. For each item in metadata: + // 5. For each item in metadata: for (const item of metadata) { // 1. Let algorithm be the alg component of item. const algorithm = item.algo // 2. Let expectedValue be the val component of item. - const expectedValue = item.hash + let expectedValue = item.hash // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e // "be liberal with padding". This is annoying, and it's not even in the spec. + if (expectedValue.endsWith('==')) { + expectedValue = expectedValue.slice(0, -2) + } + // 3. Let actualValue be the result of applying algorithm to bytes. let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') - if (actualValue[actualValue.length - 1] === '=') { - if (actualValue[actualValue.length - 2] === '=') { - actualValue = actualValue.slice(0, -2) - } else { - actualValue = actualValue.slice(0, -1) - } + if (actualValue.endsWith('==')) { + actualValue = actualValue.slice(0, -2) } // 4. If actualValue is a case-sensitive match for expectedValue, // return true. - if (compareBase64Mixed(actualValue, expectedValue)) { + if (actualValue === expectedValue) { + return true + } + + let actualBase64URL = crypto.createHash(algorithm).update(bytes).digest('base64url') + + if (actualBase64URL.endsWith('==')) { + actualBase64URL = actualBase64URL.slice(0, -2) + } + + if (actualBase64URL === expectedValue) { return true } } - // 7. Return false. + // 6. Return false. return false } // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options // https://www.w3.org/TR/CSP2/#source-list-syntax // https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 -const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i +const parseHashWithOptions = /((?sha256|sha384|sha512)-(?[A-z0-9+/]{1}.*={0,2}))( +[\x21-\x7e]?)?/i /** * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata @@ -47444,6 +47251,8 @@ function parseMetadata (metadata) { // 2. Let empty be equal to true. let empty = true + const supportedHashes = crypto.getHashes() + // 3. For each token returned by splitting metadata on spaces: for (const token of metadata.split(' ')) { // 1. Set empty to false. @@ -47453,11 +47262,7 @@ function parseMetadata (metadata) { const parsedToken = parseHashWithOptions.exec(token) // 3. If token does not parse, continue to the next token. - if ( - parsedToken === null || - parsedToken.groups === undefined || - parsedToken.groups.algo === undefined - ) { + if (parsedToken === null || parsedToken.groups === undefined) { // Note: Chromium blocks the request at this point, but Firefox // gives a warning that an invalid integrity was given. The // correct behavior is to ignore these, and subsequently not @@ -47466,11 +47271,11 @@ function parseMetadata (metadata) { } // 4. Let algorithm be the hash-algo component of token. - const algorithm = parsedToken.groups.algo.toLowerCase() + const algorithm = parsedToken.groups.algo // 5. If algorithm is a hash function recognized by the user // agent, add the parsed token to result. - if (supportedHashes.includes(algorithm)) { + if (supportedHashes.includes(algorithm.toLowerCase())) { result.push(parsedToken.groups) } } @@ -47483,82 +47288,6 @@ function parseMetadata (metadata) { return result } -/** - * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList - */ -function getStrongestMetadata (metadataList) { - // Let algorithm be the algo component of the first item in metadataList. - // Can be sha256 - let algorithm = metadataList[0].algo - // If the algorithm is sha512, then it is the strongest - // and we can return immediately - if (algorithm[3] === '5') { - return algorithm - } - - for (let i = 1; i < metadataList.length; ++i) { - const metadata = metadataList[i] - // If the algorithm is sha512, then it is the strongest - // and we can break the loop immediately - if (metadata.algo[3] === '5') { - algorithm = 'sha512' - break - // If the algorithm is sha384, then a potential sha256 or sha384 is ignored - } else if (algorithm[3] === '3') { - continue - // algorithm is sha256, check if algorithm is sha384 and if so, set it as - // the strongest - } else if (metadata.algo[3] === '3') { - algorithm = 'sha384' - } - } - return algorithm -} - -function filterMetadataListByAlgorithm (metadataList, algorithm) { - if (metadataList.length === 1) { - return metadataList - } - - let pos = 0 - for (let i = 0; i < metadataList.length; ++i) { - if (metadataList[i].algo === algorithm) { - metadataList[pos++] = metadataList[i] - } - } - - metadataList.length = pos - - return metadataList -} - -/** - * Compares two base64 strings, allowing for base64url - * in the second string. - * -* @param {string} actualValue always base64 - * @param {string} expectedValue base64 or base64url - * @returns {boolean} - */ -function compareBase64Mixed (actualValue, expectedValue) { - if (actualValue.length !== expectedValue.length) { - return false - } - for (let i = 0; i < actualValue.length; ++i) { - if (actualValue[i] !== expectedValue[i]) { - if ( - (actualValue[i] === '+' && expectedValue[i] === '-') || - (actualValue[i] === '/' && expectedValue[i] === '_') - ) { - continue - } - return false - } - } - - return true -} - // https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { // TODO @@ -47974,8 +47703,7 @@ module.exports = { urlHasHttpsScheme, urlIsHttpHttpsScheme, readAllBytes, - normalizeMethodRecord, - parseMetadata + normalizeMethodRecord } @@ -50062,17 +49790,12 @@ function parseLocation (statusCode, headers) { // https://tools.ietf.org/html/rfc7231#section-6.4.4 function shouldRemoveHeader (header, removeContent, unknownOrigin) { - if (header.length === 4) { - return util.headerNameToString(header) === 'host' - } - if (removeContent && util.headerNameToString(header).startsWith('content-')) { - return true - } - if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { - const name = util.headerNameToString(header) - return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' - } - return false + return ( + (header.length === 4 && header.toString().toLowerCase() === 'host') || + (removeContent && header.toString().toLowerCase().indexOf('content-') === 0) || + (unknownOrigin && header.length === 13 && header.toString().toLowerCase() === 'authorization') || + (unknownOrigin && header.length === 6 && header.toString().toLowerCase() === 'cookie') + ) } // https://tools.ietf.org/html/rfc7231#section-6.4 @@ -52270,20 +51993,6 @@ class Pool extends PoolBase { ? { ...options.interceptors } : undefined this[kFactory] = factory - - this.on('connectionError', (origin, targets, error) => { - // If a connection error occurs, we remove the client from the pool, - // and emit a connectionError event. They will not be re-used. - // Fixes https://github.com/nodejs/undici/issues/3895 - for (const target of targets) { - // Do not use kRemoveClient here, as it will close the client, - // but the client cannot be closed in this state. - const idx = this[kClients].indexOf(target) - if (idx !== -1) { - this[kClients].splice(idx, 1) - } - } - }) } [kGetDispatcher] () { @@ -59783,14 +59492,6 @@ module.exports = require("net"); /***/ }), -/***/ 7598: -/***/ ((module) => { - -"use strict"; -module.exports = require("node:crypto"); - -/***/ }), - /***/ 8474: /***/ ((module) => { diff --git a/src/report/get-report.ts b/src/report/get-report.ts index a3385e9..24465e3 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -159,14 +159,17 @@ function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): s if (testRuns.length > 0 || options.onlySummary) { const tableData = testRuns - .filter(tr => tr.passed > 0 || tr.failed > 0 || tr.skipped > 0) - .map(tr => { + .map((tr, originalIndex) => ({tr, originalIndex})) + .filter(({tr}) => tr.passed > 0 || tr.failed > 0 || tr.skipped > 0) + .map(({tr, originalIndex}) => { const time = formatTime(tr.time) const name = tr.path + const addr = options.baseUrl + makeRunSlug(originalIndex, options).link + const nameLink = link(name, addr) const passed = tr.passed > 0 ? `${tr.passed} ${Icon.success}` : '' const failed = tr.failed > 0 ? `${tr.failed} ${Icon.fail}` : '' const skipped = tr.skipped > 0 ? `${tr.skipped} ${Icon.skip}` : '' - return [name, passed, failed, skipped, time] + return [nameLink, passed, failed, skipped, time] }) const resultsTable = table( From 223c6cd55bfb05d16974dbff0da7a7458c5aeb6a Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 8 Jun 2025 13:09:53 +0200 Subject: [PATCH 25/80] Compile dist code --- dist/index.js | 502 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 402 insertions(+), 100 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2c25940..d1162f4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4571,6 +4571,7 @@ class Context { this.action = process.env.GITHUB_ACTION; this.actor = process.env.GITHUB_ACTOR; this.job = process.env.GITHUB_JOB; + this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10); this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; @@ -7156,11 +7157,11 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var dist_src_exports = {}; -__export(dist_src_exports, { +var index_exports = {}; +__export(index_exports, { Octokit: () => Octokit }); -module.exports = __toCommonJS(dist_src_exports); +module.exports = __toCommonJS(index_exports); var import_universal_user_agent = __nccwpck_require__(3843); var import_before_after_hook = __nccwpck_require__(2732); var import_request = __nccwpck_require__(8636); @@ -7168,7 +7169,7 @@ var import_graphql = __nccwpck_require__(7); var import_auth_token = __nccwpck_require__(7864); // pkg/dist-src/version.js -var VERSION = "5.0.2"; +var VERSION = "5.2.1"; // pkg/dist-src/index.js var noop = () => { @@ -7335,7 +7336,7 @@ module.exports = __toCommonJS(dist_src_exports); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "9.0.4"; +var VERSION = "9.0.6"; // pkg/dist-src/defaults.js var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; @@ -7440,9 +7441,9 @@ function addQueryParameters(url, parameters) { } // pkg/dist-src/util/extract-url-variable-names.js -var urlVariableRegex = /\{[^}]+\}/g; +var urlVariableRegex = /\{[^{}}]+\}/g; function removeNonChars(variableName) { - return variableName.replace(/^\W+|\W+$/g, "").split(/,/); + return variableName.replace(/(?:^\W+)|(?:(? { const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; return `application/vnd.github.${preview}-preview${format}`; @@ -7709,18 +7710,18 @@ var __copyProps = (to, from, except, desc) => { var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // pkg/dist-src/index.js -var dist_src_exports = {}; -__export(dist_src_exports, { +var index_exports = {}; +__export(index_exports, { GraphqlResponseError: () => GraphqlResponseError, graphql: () => graphql2, withCustomRequest: () => withCustomRequest }); -module.exports = __toCommonJS(dist_src_exports); +module.exports = __toCommonJS(index_exports); var import_request3 = __nccwpck_require__(8636); var import_universal_user_agent = __nccwpck_require__(3843); // pkg/dist-src/version.js -var VERSION = "7.0.2"; +var VERSION = "7.1.1"; // pkg/dist-src/with-defaults.js var import_request2 = __nccwpck_require__(8636); @@ -7768,8 +7769,7 @@ function graphql(request2, query, options) { ); } for (const key in options) { - if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) - continue; + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; return Promise.reject( new Error( `[@octokit/graphql] "${key}" cannot be used as variable name` @@ -7877,7 +7877,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "9.1.5"; +var VERSION = "9.2.2"; // pkg/dist-src/normalize-paginated-list-response.js function normalizePaginatedListResponse(response) { @@ -7925,7 +7925,7 @@ function iterator(octokit, route, parameters) { const response = await requestMethod({ method, url, headers }); const normalizedResponse = normalizePaginatedListResponse(response); url = ((normalizedResponse.headers.link || "").match( - /<([^>]+)>;\s*rel="next"/ + /<([^<>]+)>;\s*rel="next"/ ) || [])[1]; return { value: normalizedResponse }; } catch (error) { @@ -8038,6 +8038,8 @@ var paginatingEndpoints = [ "GET /orgs/{org}/members/{username}/codespaces", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", + "GET /orgs/{org}/organization-roles/{role_id}/teams", + "GET /orgs/{org}/organization-roles/{role_id}/users", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", @@ -8274,7 +8276,7 @@ __export(dist_src_exports, { module.exports = __toCommonJS(dist_src_exports); // pkg/dist-src/version.js -var VERSION = "10.2.0"; +var VERSION = "10.4.1"; // pkg/dist-src/generated/endpoints.js var Endpoints = { @@ -8401,6 +8403,9 @@ var Endpoints = { "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" ], getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + getCustomOidcSubClaimForRepo: [ + "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], getEnvironmentPublicKey: [ "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key" ], @@ -8553,6 +8558,9 @@ var Endpoints = { setCustomLabelsForSelfHostedRunnerForRepo: [ "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" ], + setCustomOidcSubClaimForRepo: [ + "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], setGithubActionsDefaultWorkflowPermissionsOrganization: [ "PUT /orgs/{org}/actions/permissions/workflow" ], @@ -8622,6 +8630,7 @@ var Endpoints = { listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], markNotificationsAsRead: ["PUT /notifications"], markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], + markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], setThreadSubscription: [ @@ -8898,10 +8907,10 @@ var Endpoints = { updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] }, copilot: { - addCopilotForBusinessSeatsForTeams: [ + addCopilotSeatsForTeams: [ "POST /orgs/{org}/copilot/billing/selected_teams" ], - addCopilotForBusinessSeatsForUsers: [ + addCopilotSeatsForUsers: [ "POST /orgs/{org}/copilot/billing/selected_users" ], cancelCopilotSeatAssignmentForTeams: [ @@ -9214,10 +9223,24 @@ var Endpoints = { } ] }, + oidc: { + getOidcCustomSubTemplateForOrg: [ + "GET /orgs/{org}/actions/oidc/customization/sub" + ], + updateOidcCustomSubTemplateForOrg: [ + "PUT /orgs/{org}/actions/oidc/customization/sub" + ] + }, orgs: { addSecurityManagerTeam: [ "PUT /orgs/{org}/security-managers/teams/{team_slug}" ], + assignTeamToOrgRole: [ + "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + assignUserToOrgRole: [ + "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], blockUser: ["PUT /orgs/{org}/blocks/{username}"], cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], @@ -9226,6 +9249,7 @@ var Endpoints = { convertMemberToOutsideCollaborator: [ "PUT /orgs/{org}/outside_collaborators/{username}" ], + createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], createInvitation: ["POST /orgs/{org}/invitations"], createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], createOrUpdateCustomPropertiesValuesForRepos: [ @@ -9236,6 +9260,9 @@ var Endpoints = { ], createWebhook: ["POST /orgs/{org}/hooks"], delete: ["DELETE /orgs/{org}"], + deleteCustomOrganizationRole: [ + "DELETE /orgs/{org}/organization-roles/{role_id}" + ], deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], enableOrDisableSecurityProductOnAllOrgRepos: [ "POST /orgs/{org}/{security_product}/{enablement}" @@ -9247,6 +9274,7 @@ var Endpoints = { ], getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], + getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], getWebhookDelivery: [ @@ -9262,6 +9290,12 @@ var Endpoints = { listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], listMembers: ["GET /orgs/{org}/members"], listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], + listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], + listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], + listOrgRoles: ["GET /orgs/{org}/organization-roles"], + listOrganizationFineGrainedPermissions: [ + "GET /orgs/{org}/organization-fine-grained-permissions" + ], listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], listPatGrantRepositories: [ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" @@ -9276,6 +9310,9 @@ var Endpoints = { listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], listWebhooks: ["GET /orgs/{org}/hooks"], + patchCustomOrganizationRole: [ + "PATCH /orgs/{org}/organization-roles/{role_id}" + ], pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], redeliverWebhookDelivery: [ "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" @@ -9300,6 +9337,18 @@ var Endpoints = { reviewPatGrantRequestsInBulk: [ "POST /orgs/{org}/personal-access-token-requests" ], + revokeAllOrgRolesTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" + ], + revokeAllOrgRolesUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}" + ], + revokeOrgRoleTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + revokeOrgRoleUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], setPublicMembershipForAuthenticatedUser: [ "PUT /orgs/{org}/public_members/{username}" @@ -9590,6 +9639,9 @@ var Endpoints = { {}, { mapToData: "users" } ], + cancelPagesDeployment: [ + "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" + ], checkAutomatedSecurityFixes: [ "GET /repos/{owner}/{repo}/automated-security-fixes" ], @@ -9625,12 +9677,15 @@ var Endpoints = { createForAuthenticatedUser: ["POST /user/repos"], createFork: ["POST /repos/{owner}/{repo}/forks"], createInOrg: ["POST /orgs/{org}/repos"], + createOrUpdateCustomPropertiesValues: [ + "PATCH /repos/{owner}/{repo}/properties/values" + ], createOrUpdateEnvironment: [ "PUT /repos/{owner}/{repo}/environments/{environment_name}" ], createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], createOrgRuleset: ["POST /orgs/{org}/rulesets"], - createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployment"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], createPagesSite: ["POST /repos/{owner}/{repo}/pages"], createRelease: ["POST /repos/{owner}/{repo}/releases"], createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], @@ -9783,6 +9838,9 @@ var Endpoints = { getOrgRulesets: ["GET /orgs/{org}/rulesets"], getPages: ["GET /repos/{owner}/{repo}/pages"], getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], + getPagesDeployment: [ + "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" + ], getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], getPullRequestReviewProtection: [ @@ -9993,6 +10051,9 @@ var Endpoints = { ] }, securityAdvisories: { + createFork: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" + ], createPrivateVulnerabilityReport: [ "POST /repos/{owner}/{repo}/security-advisories/reports" ], @@ -10416,7 +10477,7 @@ var RequestError = class extends Error { if (options.request.headers.authorization) { requestCopy.headers = Object.assign({}, options.request.headers, { authorization: options.request.headers.authorization.replace( - / .*$/, + /(?]+)>; rel="deprecation"/); + const matches = headers.link && headers.link.match(/<([^<>]+)>; rel="deprecation"/); const deprecationLink = matches && matches.pop(); log.warn( `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` @@ -10628,11 +10690,17 @@ async function getResponseData(response) { function toErrorMessage(data) { if (typeof data === "string") return data; + let suffix; + if ("documentation_url" in data) { + suffix = ` - ${data.documentation_url}`; + } else { + suffix = ""; + } if ("message" in data) { if (Array.isArray(data.errors)) { - return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; + return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; } - return data.message; + return `${data.message}${suffix}`; } return `Unknown error: ${JSON.stringify(data)}`; } @@ -37683,7 +37751,7 @@ module.exports = { const { parseSetCookie } = __nccwpck_require__(8915) -const { stringify, getHeadersList } = __nccwpck_require__(3834) +const { stringify } = __nccwpck_require__(3834) const { webidl } = __nccwpck_require__(4222) const { Headers } = __nccwpck_require__(6349) @@ -37759,14 +37827,13 @@ function getSetCookies (headers) { webidl.brandCheck(headers, Headers, { strict: false }) - const cookies = getHeadersList(headers).cookies + const cookies = headers.getSetCookie() if (!cookies) { return [] } - // In older versions of undici, cookies is a list of name:value. - return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) + return cookies.map((pair) => parseSetCookie(pair)) } /** @@ -38194,14 +38261,15 @@ module.exports = { /***/ }), /***/ 3834: -/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { +/***/ ((module) => { "use strict"; -const assert = __nccwpck_require__(2613) -const { kHeadersList } = __nccwpck_require__(6443) - +/** + * @param {string} value + * @returns {boolean} + */ function isCTLExcludingHtab (value) { if (value.length === 0) { return false @@ -38462,31 +38530,13 @@ function stringify (cookie) { return out.join('; ') } -let kHeadersListNode - -function getHeadersList (headers) { - if (headers[kHeadersList]) { - return headers[kHeadersList] - } - - if (!kHeadersListNode) { - kHeadersListNode = Object.getOwnPropertySymbols(headers).find( - (symbol) => symbol.description === 'headers list' - ) - - assert(kHeadersListNode, 'Headers cannot be parsed') - } - - const headersList = headers[kHeadersListNode] - assert(headersList) - - return headersList -} - module.exports = { isCTLExcludingHtab, - stringify, - getHeadersList + validateCookieName, + validateCookiePath, + validateCookieValue, + toIMFDate, + stringify } @@ -38687,6 +38737,132 @@ function onConnectTimeout (socket) { module.exports = buildConnector +/***/ }), + +/***/ 735: +/***/ ((module) => { + +"use strict"; + + +/** @type {Record} */ +const headerNameLowerCasedRecord = {} + +// https://developer.mozilla.org/docs/Web/HTTP/Headers +const wellknownHeaderNames = [ + 'Accept', + 'Accept-Encoding', + 'Accept-Language', + 'Accept-Ranges', + 'Access-Control-Allow-Credentials', + 'Access-Control-Allow-Headers', + 'Access-Control-Allow-Methods', + 'Access-Control-Allow-Origin', + 'Access-Control-Expose-Headers', + 'Access-Control-Max-Age', + 'Access-Control-Request-Headers', + 'Access-Control-Request-Method', + 'Age', + 'Allow', + 'Alt-Svc', + 'Alt-Used', + 'Authorization', + 'Cache-Control', + 'Clear-Site-Data', + 'Connection', + 'Content-Disposition', + 'Content-Encoding', + 'Content-Language', + 'Content-Length', + 'Content-Location', + 'Content-Range', + 'Content-Security-Policy', + 'Content-Security-Policy-Report-Only', + 'Content-Type', + 'Cookie', + 'Cross-Origin-Embedder-Policy', + 'Cross-Origin-Opener-Policy', + 'Cross-Origin-Resource-Policy', + 'Date', + 'Device-Memory', + 'Downlink', + 'ECT', + 'ETag', + 'Expect', + 'Expect-CT', + 'Expires', + 'Forwarded', + 'From', + 'Host', + 'If-Match', + 'If-Modified-Since', + 'If-None-Match', + 'If-Range', + 'If-Unmodified-Since', + 'Keep-Alive', + 'Last-Modified', + 'Link', + 'Location', + 'Max-Forwards', + 'Origin', + 'Permissions-Policy', + 'Pragma', + 'Proxy-Authenticate', + 'Proxy-Authorization', + 'RTT', + 'Range', + 'Referer', + 'Referrer-Policy', + 'Refresh', + 'Retry-After', + 'Sec-WebSocket-Accept', + 'Sec-WebSocket-Extensions', + 'Sec-WebSocket-Key', + 'Sec-WebSocket-Protocol', + 'Sec-WebSocket-Version', + 'Server', + 'Server-Timing', + 'Service-Worker-Allowed', + 'Service-Worker-Navigation-Preload', + 'Set-Cookie', + 'SourceMap', + 'Strict-Transport-Security', + 'Supports-Loading-Mode', + 'TE', + 'Timing-Allow-Origin', + 'Trailer', + 'Transfer-Encoding', + 'Upgrade', + 'Upgrade-Insecure-Requests', + 'User-Agent', + 'Vary', + 'Via', + 'WWW-Authenticate', + 'X-Content-Type-Options', + 'X-DNS-Prefetch-Control', + 'X-Frame-Options', + 'X-Permitted-Cross-Domain-Policies', + 'X-Powered-By', + 'X-Requested-With', + 'X-XSS-Protection' +] + +for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i] + const lowerCasedKey = key.toLowerCase() + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = + lowerCasedKey +} + +// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. +Object.setPrototypeOf(headerNameLowerCasedRecord, null) + +module.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord +} + + /***/ }), /***/ 8707: @@ -39519,6 +39695,7 @@ const { InvalidArgumentError } = __nccwpck_require__(8707) const { Blob } = __nccwpck_require__(181) const nodeUtil = __nccwpck_require__(9023) const { stringify } = __nccwpck_require__(3480) +const { headerNameLowerCasedRecord } = __nccwpck_require__(735) const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) @@ -39728,6 +39905,15 @@ function parseKeepAliveTimeout (val) { return m ? parseInt(m[1], 10) * 1000 : null } +/** + * Retrieves a header name and returns its lowercase value. + * @param {string | Buffer} value Header name + * @returns {string} + */ +function headerNameToString (value) { + return headerNameLowerCasedRecord[value] || value.toLowerCase() +} + function parseHeaders (headers, obj = {}) { // For H2 support if (!Array.isArray(headers)) return headers @@ -39999,6 +40185,7 @@ module.exports = { isIterable, isAsyncIterable, isDestroyed, + headerNameToString, parseRawHeaders, parseHeaders, parseKeepAliveTimeout, @@ -40278,6 +40465,14 @@ const { isUint8Array, isArrayBuffer } = __nccwpck_require__(8253) const { File: UndiciFile } = __nccwpck_require__(3041) const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(4322) +let random +try { + const crypto = __nccwpck_require__(7598) + random = (max) => crypto.randomInt(0, max) +} catch { + random = (max) => Math.floor(Math.random(max)) +} + let ReadableStream = globalThis.ReadableStream /** @type {globalThis['File']} */ @@ -40363,7 +40558,7 @@ function extractBody (object, keepalive = false) { // Set source to a copy of the bytes held by object. source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) } else if (util.isFormDataLike(object)) { - const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` + const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}` const prefix = `--${boundary}\r\nContent-Disposition: form-data` /*! formdata-polyfill. MIT License. Jimmy Wärting */ @@ -42345,6 +42540,7 @@ const { isValidHeaderName, isValidHeaderValue } = __nccwpck_require__(5523) +const util = __nccwpck_require__(9023) const { webidl } = __nccwpck_require__(4222) const assert = __nccwpck_require__(2613) @@ -42898,6 +43094,9 @@ Object.defineProperties(Headers.prototype, { [Symbol.toStringTag]: { value: 'Headers', configurable: true + }, + [util.inspect.custom]: { + enumerable: false } }) @@ -44135,6 +44334,9 @@ function httpRedirectFetch (fetchParams, response) { // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name request.headersList.delete('authorization') + // https://fetch.spec.whatwg.org/#authentication-entries + request.headersList.delete('proxy-authorization', true) + // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. request.headersList.delete('cookie') request.headersList.delete('host') @@ -46643,14 +46845,18 @@ const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(3440 const assert = __nccwpck_require__(2613) const { isUint8Array } = __nccwpck_require__(8253) +let supportedHashes = [] + // https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable /** @type {import('crypto')|undefined} */ let crypto try { crypto = __nccwpck_require__(6982) + const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] + supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) +/* c8 ignore next 3 */ } catch { - } function responseURL (response) { @@ -47178,66 +47384,56 @@ function bytesMatch (bytes, metadataList) { return true } - // 3. If parsedMetadata is the empty set, return true. + // 3. If response is not eligible for integrity validation, return false. + // TODO + + // 4. If parsedMetadata is the empty set, return true. if (parsedMetadata.length === 0) { return true } - // 4. Let metadata be the result of getting the strongest + // 5. Let metadata be the result of getting the strongest // metadata from parsedMetadata. - const list = parsedMetadata.sort((c, d) => d.algo.localeCompare(c.algo)) - // get the strongest algorithm - const strongest = list[0].algo - // get all entries that use the strongest algorithm; ignore weaker - const metadata = list.filter((item) => item.algo === strongest) + const strongest = getStrongestMetadata(parsedMetadata) + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) - // 5. For each item in metadata: + // 6. For each item in metadata: for (const item of metadata) { // 1. Let algorithm be the alg component of item. const algorithm = item.algo // 2. Let expectedValue be the val component of item. - let expectedValue = item.hash + const expectedValue = item.hash // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e // "be liberal with padding". This is annoying, and it's not even in the spec. - if (expectedValue.endsWith('==')) { - expectedValue = expectedValue.slice(0, -2) - } - // 3. Let actualValue be the result of applying algorithm to bytes. let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') - if (actualValue.endsWith('==')) { - actualValue = actualValue.slice(0, -2) + if (actualValue[actualValue.length - 1] === '=') { + if (actualValue[actualValue.length - 2] === '=') { + actualValue = actualValue.slice(0, -2) + } else { + actualValue = actualValue.slice(0, -1) + } } // 4. If actualValue is a case-sensitive match for expectedValue, // return true. - if (actualValue === expectedValue) { - return true - } - - let actualBase64URL = crypto.createHash(algorithm).update(bytes).digest('base64url') - - if (actualBase64URL.endsWith('==')) { - actualBase64URL = actualBase64URL.slice(0, -2) - } - - if (actualBase64URL === expectedValue) { + if (compareBase64Mixed(actualValue, expectedValue)) { return true } } - // 6. Return false. + // 7. Return false. return false } // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options // https://www.w3.org/TR/CSP2/#source-list-syntax // https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 -const parseHashWithOptions = /((?sha256|sha384|sha512)-(?[A-z0-9+/]{1}.*={0,2}))( +[\x21-\x7e]?)?/i +const parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i /** * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata @@ -47251,8 +47447,6 @@ function parseMetadata (metadata) { // 2. Let empty be equal to true. let empty = true - const supportedHashes = crypto.getHashes() - // 3. For each token returned by splitting metadata on spaces: for (const token of metadata.split(' ')) { // 1. Set empty to false. @@ -47262,7 +47456,11 @@ function parseMetadata (metadata) { const parsedToken = parseHashWithOptions.exec(token) // 3. If token does not parse, continue to the next token. - if (parsedToken === null || parsedToken.groups === undefined) { + if ( + parsedToken === null || + parsedToken.groups === undefined || + parsedToken.groups.algo === undefined + ) { // Note: Chromium blocks the request at this point, but Firefox // gives a warning that an invalid integrity was given. The // correct behavior is to ignore these, and subsequently not @@ -47271,11 +47469,11 @@ function parseMetadata (metadata) { } // 4. Let algorithm be the hash-algo component of token. - const algorithm = parsedToken.groups.algo + const algorithm = parsedToken.groups.algo.toLowerCase() // 5. If algorithm is a hash function recognized by the user // agent, add the parsed token to result. - if (supportedHashes.includes(algorithm.toLowerCase())) { + if (supportedHashes.includes(algorithm)) { result.push(parsedToken.groups) } } @@ -47288,6 +47486,82 @@ function parseMetadata (metadata) { return result } +/** + * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList + */ +function getStrongestMetadata (metadataList) { + // Let algorithm be the algo component of the first item in metadataList. + // Can be sha256 + let algorithm = metadataList[0].algo + // If the algorithm is sha512, then it is the strongest + // and we can return immediately + if (algorithm[3] === '5') { + return algorithm + } + + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i] + // If the algorithm is sha512, then it is the strongest + // and we can break the loop immediately + if (metadata.algo[3] === '5') { + algorithm = 'sha512' + break + // If the algorithm is sha384, then a potential sha256 or sha384 is ignored + } else if (algorithm[3] === '3') { + continue + // algorithm is sha256, check if algorithm is sha384 and if so, set it as + // the strongest + } else if (metadata.algo[3] === '3') { + algorithm = 'sha384' + } + } + return algorithm +} + +function filterMetadataListByAlgorithm (metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList + } + + let pos = 0 + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i] + } + } + + metadataList.length = pos + + return metadataList +} + +/** + * Compares two base64 strings, allowing for base64url + * in the second string. + * +* @param {string} actualValue always base64 + * @param {string} expectedValue base64 or base64url + * @returns {boolean} + */ +function compareBase64Mixed (actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if ( + (actualValue[i] === '+' && expectedValue[i] === '-') || + (actualValue[i] === '/' && expectedValue[i] === '_') + ) { + continue + } + return false + } + } + + return true +} + // https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { // TODO @@ -47703,7 +47977,8 @@ module.exports = { urlHasHttpsScheme, urlIsHttpHttpsScheme, readAllBytes, - normalizeMethodRecord + normalizeMethodRecord, + parseMetadata } @@ -49790,12 +50065,17 @@ function parseLocation (statusCode, headers) { // https://tools.ietf.org/html/rfc7231#section-6.4.4 function shouldRemoveHeader (header, removeContent, unknownOrigin) { - return ( - (header.length === 4 && header.toString().toLowerCase() === 'host') || - (removeContent && header.toString().toLowerCase().indexOf('content-') === 0) || - (unknownOrigin && header.length === 13 && header.toString().toLowerCase() === 'authorization') || - (unknownOrigin && header.length === 6 && header.toString().toLowerCase() === 'cookie') - ) + if (header.length === 4) { + return util.headerNameToString(header) === 'host' + } + if (removeContent && util.headerNameToString(header).startsWith('content-')) { + return true + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util.headerNameToString(header) + return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' + } + return false } // https://tools.ietf.org/html/rfc7231#section-6.4 @@ -51993,6 +52273,20 @@ class Pool extends PoolBase { ? { ...options.interceptors } : undefined this[kFactory] = factory + + this.on('connectionError', (origin, targets, error) => { + // If a connection error occurs, we remove the client from the pool, + // and emit a connectionError event. They will not be re-used. + // Fixes https://github.com/nodejs/undici/issues/3895 + for (const target of targets) { + // Do not use kRemoveClient here, as it will close the client, + // but the client cannot be closed in this state. + const idx = this[kClients].indexOf(target) + if (idx !== -1) { + this[kClients].splice(idx, 1) + } + } + }) } [kGetDispatcher] () { @@ -59492,6 +59786,14 @@ module.exports = require("net"); /***/ }), +/***/ 7598: +/***/ ((module) => { + +"use strict"; +module.exports = require("node:crypto"); + +/***/ }), + /***/ 8474: /***/ ((module) => { From be2b9750952e8f0faf8bd5ba7a727eb76594f807 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 7 Jun 2025 13:35:38 +0200 Subject: [PATCH 26/80] Use typed `WorkflowRunEvent` when parsing `workflow_run` payload Issue #603 --- src/utils/github-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/github-utils.ts b/src/utils/github-utils.ts index 19fe921..9362cb4 100644 --- a/src/utils/github-utils.ts +++ b/src/utils/github-utils.ts @@ -2,7 +2,7 @@ import {createWriteStream} from 'fs' import * as core from '@actions/core' import * as github from '@actions/github' import {GitHub} from '@actions/github/lib/utils' -import type {PullRequest} from '@octokit/webhooks-types' +import type {PullRequest, WorkflowRunEvent} from '@octokit/webhooks-types' import * as stream from 'stream' import {promisify} from 'util' import got from 'got' @@ -11,7 +11,7 @@ const asyncStream = promisify(stream.pipeline) export function getCheckRunContext(): {sha: string; runId: number} { if (github.context.eventName === 'workflow_run') { core.info('Action was triggered by workflow_run: using SHA and RUN_ID from triggering workflow') - const event = github.context.payload + const event = github.context.payload as WorkflowRunEvent if (!event.workflow_run) { throw new Error("Event of type 'workflow_run' is missing 'workflow_run' field") } From 6126f49c2c9390a3ce4f240455cec86aecac763c Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 7 Jun 2025 13:40:06 +0200 Subject: [PATCH 27/80] Use types arguments in the `downloadStream` event handlers Issues #603 --- dist/index.js | 6 +++--- src/utils/github-utils.ts | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/dist/index.js b/dist/index.js index d1162f4..6596a6f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2439,11 +2439,11 @@ async function downloadArtifact(octokit, artifactId, fileName, token) { }; const downloadStream = got_1.default.stream(req.url, { headers }); const fileWriterStream = (0, fs_1.createWriteStream)(fileName); - downloadStream.on('redirect', response => { + downloadStream.on('redirect', (response) => { core.info(`Downloading ${response.headers.location}`); }); - downloadStream.on('downloadProgress', ({ transferred }) => { - core.info(`Progress: ${transferred} B`); + downloadStream.on('downloadProgress', (progress) => { + core.info(`Progress: ${progress.transferred} B`); }); await asyncStream(downloadStream, fileWriterStream); } diff --git a/src/utils/github-utils.ts b/src/utils/github-utils.ts index 9362cb4..326067c 100644 --- a/src/utils/github-utils.ts +++ b/src/utils/github-utils.ts @@ -3,9 +3,10 @@ import * as core from '@actions/core' import * as github from '@actions/github' import {GitHub} from '@actions/github/lib/utils' import type {PullRequest, WorkflowRunEvent} from '@octokit/webhooks-types' +import {IncomingMessage} from 'http' import * as stream from 'stream' import {promisify} from 'util' -import got from 'got' +import got, {Progress} from 'got' const asyncStream = promisify(stream.pipeline) export function getCheckRunContext(): {sha: string; runId: number} { @@ -54,11 +55,11 @@ export async function downloadArtifact( const downloadStream = got.stream(req.url, {headers}) const fileWriterStream = createWriteStream(fileName) - downloadStream.on('redirect', response => { + downloadStream.on('redirect', (response: IncomingMessage) => { core.info(`Downloading ${response.headers.location}`) }) - downloadStream.on('downloadProgress', ({transferred}) => { - core.info(`Progress: ${transferred} B`) + downloadStream.on('downloadProgress', (progress: Progress) => { + core.info(`Progress: ${progress.transferred} B`) }) await asyncStream(downloadStream, fileWriterStream) From 016f16f7b858b93113a2bff46bfca544d9983099 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 8 Jun 2025 13:56:11 +0200 Subject: [PATCH 28/80] Do not lint markdown files in the `__tests_` folder --- package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/package.json b/package.json index e5f4a01..5705920 100644 --- a/package.json +++ b/package.json @@ -81,5 +81,10 @@ }, "engines": { "node": ">=20" + }, + "markdownlint-cli2": { + "ignores": [ + "__tests__/**/*" + ] } } From 981f52cdc26f57a2bf6b5c4237902bdff857cf22 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 8 Jun 2025 14:00:50 +0200 Subject: [PATCH 29/80] Configure permissive markdown linting rules --- .markdownlint.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .markdownlint.json diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..3f71d87 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,13 @@ +{ + "blanks-around-headings": false, + "blanks-around-lists": false, + "blanks-around-tables": false, + "blanks-around-fences": false, + "no-bare-urls": false, + "line-length": false, + "ul-style": false, + "no-inline-html": false, + "no-multiple-blanks": { + "maximum": 3 + } +} From c4b9a11207f60fea52740549cf7cabc6511ebc54 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 8 Jun 2025 14:05:26 +0200 Subject: [PATCH 30/80] Generate alternative text for images showing `test-reporter` generated content Text was generated by Copilot with GPT-4.1 model. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff030f2..9371f3d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This [Github Action](https://github.com/features/actions) displays test results ✔️ Provides final `conclusion` and counts of `passed`, `failed` and `skipped` tests as output parameters **How it looks:** -|![](assets/fluent-validation-report.png)|![](assets/provider-error-summary.png)|![](assets/provider-error-details.png)|![](assets/mocha-groups.png)| +|![Test results summary showing FluentValidation test run with all tests passed, including details such as test file names, number of passed, failed, and skipped tests, and execution times. The interface is dark-themed and displays a green badge indicating 3527 passed and 4 skipped tests.](assets/fluent-validation-report.png)|![Provider error summary panel listing failed tests with error messages, file paths, and line numbers. The summary uses a dark background and highlights errors in red for quick identification.](assets/provider-error-summary.png)|![Provider error details panel showing a specific test failure with a detailed error message, stack trace, and code annotation. The environment is consistent with GitHub Actions UI, focusing on clarity and accessibility.](assets/provider-error-details.png)|![Mocha test groups report displaying grouped test results with counts of passed, failed, and skipped tests. The table format and color-coded badges help users quickly assess test suite health.](assets/mocha-groups.png)| |:--:|:--:|:--:|:--:| **Supported languages / frameworks:** From 3a1ec876a9133f28aa4290b48c2b437bead18da3 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 8 Jun 2025 14:18:39 +0200 Subject: [PATCH 31/80] Improve alternative test of images showing `test-reporter` generated content --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9371f3d..c307ff3 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This [Github Action](https://github.com/features/actions) displays test results ✔️ Provides final `conclusion` and counts of `passed`, `failed` and `skipped` tests as output parameters **How it looks:** -|![Test results summary showing FluentValidation test run with all tests passed, including details such as test file names, number of passed, failed, and skipped tests, and execution times. The interface is dark-themed and displays a green badge indicating 3527 passed and 4 skipped tests.](assets/fluent-validation-report.png)|![Provider error summary panel listing failed tests with error messages, file paths, and line numbers. The summary uses a dark background and highlights errors in red for quick identification.](assets/provider-error-summary.png)|![Provider error details panel showing a specific test failure with a detailed error message, stack trace, and code annotation. The environment is consistent with GitHub Actions UI, focusing on clarity and accessibility.](assets/provider-error-details.png)|![Mocha test groups report displaying grouped test results with counts of passed, failed, and skipped tests. The table format and color-coded badges help users quickly assess test suite health.](assets/mocha-groups.png)| +|![Summary showing test run with all tests passed, including details such as test file names, number of passed, failed, and skipped tests, and execution times. The interface is dark-themed and displays a green badge indicating 3527 passed and 4 skipped tests.](assets/fluent-validation-report.png)|![Summary showing test run with a failed unit test. The summary uses a dark background and highlights errors in red for quick identification.](assets/provider-error-summary.png)|![GitHub Actions annotation showing details of a failed unit test with a detailed error message, stack trace, and code annotation.](assets/provider-error-details.png)|![Test cases written in Mocha framework with a list of expectations for each test case. The table format and color-coded badges help users quickly assess test suite health.](assets/mocha-groups.png)| |:--:|:--:|:--:|:--:| **Supported languages / frameworks:** From 2312e637f3db706642321073d8a19fc229a1280e Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 6 Mar 2022 19:00:25 +0100 Subject: [PATCH 32/80] List only failed tests Fixes issue #142 --- .../__outputs__/dotnet-trx-only-failed.md | 28 ++++ .../__snapshots__/dotnet-trx.test.ts.snap | 129 ++++++++++++++++++ __tests__/dotnet-trx.test.ts | 28 +++- src/report/get-report.ts | 3 + 4 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 __tests__/__outputs__/dotnet-trx-only-failed.md diff --git a/__tests__/__outputs__/dotnet-trx-only-failed.md b/__tests__/__outputs__/dotnet-trx-only-failed.md new file mode 100644 index 0000000..826fb24 --- /dev/null +++ b/__tests__/__outputs__/dotnet-trx-only-failed.md @@ -0,0 +1,28 @@ +![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%205%20failed%2C%201%20skipped-critical) +|Report|Passed|Failed|Skipped|Time| +|:---|---:|---:|---:|---:| +|[fixtures/dotnet-trx.trx](#user-content-r0)|5 ✅|5 ❌|1 ⚪|1s| +## ❌ fixtures/dotnet-trx.trx +**11** tests were completed in **1s** with **5** passed, **5** failed and **1** skipped. +|Test suite|Passed|Failed|Skipped|Time| +|:---|---:|---:|---:|---:| +|[DotnetTests.XUnitTests.CalculatorTests](#user-content-r0s0)|5 ✅|5 ❌|1 ⚪|118ms| +### ❌ DotnetTests.XUnitTests.CalculatorTests +``` +❌ Exception_In_TargetTest + System.DivideByZeroException : Attempted to divide by zero. +❌ Exception_In_Test + System.Exception : Test +❌ Failing_Test + Assert.Equal() Failure + Expected: 3 + Actual: 2 +❌ Is_Even_Number(i: 3) + Assert.True() Failure + Expected: True + Actual: False +❌ Should be even number(i: 3) + Assert.True() Failure + Expected: True + Actual: False +``` \ No newline at end of file diff --git a/__tests__/__snapshots__/dotnet-trx.test.ts.snap b/__tests__/__snapshots__/dotnet-trx.test.ts.snap index 1ca07eb..04d535b 100644 --- a/__tests__/__snapshots__/dotnet-trx.test.ts.snap +++ b/__tests__/__snapshots__/dotnet-trx.test.ts.snap @@ -1,5 +1,134 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`dotnet-trx tests matches report snapshot (only failed tests) 1`] = ` +TestRunResult { + "path": "fixtures/dotnet-trx.trx", + "suites": [ + TestSuiteResult { + "groups": [ + TestGroupResult { + "name": null, + "tests": [ + TestCaseResult { + "error": undefined, + "name": "Custom Name", + "result": "success", + "time": 0.1371, + }, + TestCaseResult { + "error": { + "details": "System.DivideByZeroException : Attempted to divide by zero. + at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.Unit\\Calculator.cs:line 9 + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 33", + "line": 9, + "message": "System.DivideByZeroException : Attempted to divide by zero.", + "path": "DotnetTests.Unit/Calculator.cs", + }, + "name": "Exception_In_TargetTest", + "result": "failed", + "time": 0.8377, + }, + TestCaseResult { + "error": { + "details": "System.Exception : Test + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 39", + "line": 39, + "message": "System.Exception : Test", + "path": "DotnetTests.XUnitTests/CalculatorTests.cs", + }, + "name": "Exception_In_Test", + "result": "failed", + "time": 2.5175, + }, + TestCaseResult { + "error": { + "details": "Assert.Equal() Failure +Expected: 3 +Actual: 2 + at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 27", + "line": 27, + "message": "Assert.Equal() Failure +Expected: 3 +Actual: 2", + "path": "DotnetTests.XUnitTests/CalculatorTests.cs", + }, + "name": "Failing_Test", + "result": "failed", + "time": 3.8697, + }, + TestCaseResult { + "error": undefined, + "name": "Is_Even_Number(i: 2)", + "result": "success", + "time": 0.0078, + }, + TestCaseResult { + "error": { + "details": "Assert.True() Failure +Expected: True +Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 59", + "line": 59, + "message": "Assert.True() Failure +Expected: True +Actual: False", + "path": "DotnetTests.XUnitTests/CalculatorTests.cs", + }, + "name": "Is_Even_Number(i: 3)", + "result": "failed", + "time": 0.41409999999999997, + }, + TestCaseResult { + "error": undefined, + "name": "Passing_Test", + "result": "success", + "time": 0.1365, + }, + TestCaseResult { + "error": undefined, + "name": "Should be even number(i: 2)", + "result": "success", + "time": 0.0097, + }, + TestCaseResult { + "error": { + "details": "Assert.True() Failure +Expected: True +Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 i) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 67", + "line": 67, + "message": "Assert.True() Failure +Expected: True +Actual: False", + "path": "DotnetTests.XUnitTests/CalculatorTests.cs", + }, + "name": "Should be even number(i: 3)", + "result": "failed", + "time": 0.6537000000000001, + }, + TestCaseResult { + "error": undefined, + "name": "Skipped_Test", + "result": "skipped", + "time": 1, + }, + TestCaseResult { + "error": undefined, + "name": "Timeout_Test", + "result": "success", + "time": 108.42580000000001, + }, + ], + }, + ], + "name": "DotnetTests.XUnitTests.CalculatorTests", + "totalTime": undefined, + }, + ], + "totalTime": 1116, +} +`; + exports[`dotnet-trx tests matches report snapshot 1`] = ` TestRunResult { "path": "fixtures/dotnet-trx.trx", diff --git a/__tests__/dotnet-trx.test.ts b/__tests__/dotnet-trx.test.ts index e7f83ee..ede52b0 100644 --- a/__tests__/dotnet-trx.test.ts +++ b/__tests__/dotnet-trx.test.ts @@ -3,7 +3,7 @@ import * as path from 'path' import {DotnetTrxParser} from '../src/parsers/dotnet-trx/dotnet-trx-parser' import {ParseOptions} from '../src/test-parser' -import {DEFAULT_OPTIONS, getReport} from '../src/report/get-report' +import {DEFAULT_OPTIONS, getReport, ReportOptions} from '../src/report/get-report' import {normalizeFilePath} from '../src/utils/path-utils' describe('dotnet-trx tests', () => { @@ -60,6 +60,32 @@ describe('dotnet-trx tests', () => { fs.writeFileSync(outputPath, report) }) + it('matches report snapshot (only failed tests)', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') + const outputPath = path.join(__dirname, '__outputs__', 'dotnet-trx-only-failed.md') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: ['DotnetTests.Unit/Calculator.cs', 'DotnetTests.XUnitTests/CalculatorTests.cs'] + //workDir: 'C:/Users/Michal/Workspace/dorny/test-check/reports/dotnet/' + } + + const parser = new DotnetTrxParser(opts) + const result = await parser.parse(filePath, fileContent) + expect(result).toMatchSnapshot() + + const reportOptions: ReportOptions = { + ...DEFAULT_OPTIONS, + listSuites: 'all', + listTests: 'failed' + } + const report = getReport([result], reportOptions) + fs.mkdirSync(path.dirname(outputPath), {recursive: true}) + fs.writeFileSync(outputPath, report) + }) + it('report from FluentValidation test results matches snapshot', async () => { const fixturePath = path.join(__dirname, 'fixtures', 'external', 'FluentValidation.Tests.trx') const outputPath = path.join(__dirname, '__outputs__', 'fluent-validation-test-results.md') diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 24465e3..5ea44fe 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -263,6 +263,9 @@ function getTestsReport(ts: TestSuiteResult, runIndex: number, suiteIndex: numbe } const space = grp.name ? ' ' : '' for (const tc of grp.tests) { + if (options.listTests === 'failed' && tc.result !== 'failed') { + continue + } const result = getResultIcon(tc.result) sections.push(`${space}${result} ${tc.name}`) if (tc.error) { From 6adcc0c72ad8b85fe3047f7daa73069ba287b91b Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 8 Jun 2025 16:44:36 +0200 Subject: [PATCH 33/80] Compile dist code --- dist/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dist/index.js b/dist/index.js index d1162f4..3a62d7e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2115,6 +2115,9 @@ function getTestsReport(ts, runIndex, suiteIndex, options) { } const space = grp.name ? ' ' : ''; for (const tc of grp.tests) { + if (options.listTests === 'failed' && tc.result !== 'failed') { + continue; + } const result = getResultIcon(tc.result); sections.push(`${space}${result} ${tc.name}`); if (tc.error) { From ae8bd195f89cbb8683554b426696e19daac272e3 Mon Sep 17 00:00:00 2001 From: dboriichuk Date: Wed, 18 Jun 2025 14:09:49 +0300 Subject: [PATCH 34/80] Add stack tracke to summary --- .../__outputs__/dotnet-trx-only-failed.md | 6 ++++ __tests__/__outputs__/dotnet-trx.md | 6 ++++ .../__snapshots__/dotnet-trx.test.ts.snap | 32 +++++++++++++------ dist/index.js | 4 +-- src/parsers/dotnet-trx/dotnet-trx-parser.ts | 4 +-- 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/__tests__/__outputs__/dotnet-trx-only-failed.md b/__tests__/__outputs__/dotnet-trx-only-failed.md index 826fb24..5eeaec5 100644 --- a/__tests__/__outputs__/dotnet-trx-only-failed.md +++ b/__tests__/__outputs__/dotnet-trx-only-failed.md @@ -11,18 +11,24 @@ ``` ❌ Exception_In_TargetTest System.DivideByZeroException : Attempted to divide by zero. + at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.Unit\Calculator.cs:line 9 + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 33 ❌ Exception_In_Test System.Exception : Test + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 39 ❌ Failing_Test Assert.Equal() Failure Expected: 3 Actual: 2 + at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 27 ❌ Is_Even_Number(i: 3) Assert.True() Failure Expected: True Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 59 ❌ Should be even number(i: 3) Assert.True() Failure Expected: True Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 i) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 67 ``` \ No newline at end of file diff --git a/__tests__/__outputs__/dotnet-trx.md b/__tests__/__outputs__/dotnet-trx.md index 92f12c0..40bcaf2 100644 --- a/__tests__/__outputs__/dotnet-trx.md +++ b/__tests__/__outputs__/dotnet-trx.md @@ -12,23 +12,29 @@ ✅ Custom Name ❌ Exception_In_TargetTest System.DivideByZeroException : Attempted to divide by zero. + at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.Unit\Calculator.cs:line 9 + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 33 ❌ Exception_In_Test System.Exception : Test + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 39 ❌ Failing_Test Assert.Equal() Failure Expected: 3 Actual: 2 + at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 27 ✅ Is_Even_Number(i: 2) ❌ Is_Even_Number(i: 3) Assert.True() Failure Expected: True Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 59 ✅ Passing_Test ✅ Should be even number(i: 2) ❌ Should be even number(i: 3) Assert.True() Failure Expected: True Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 i) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 67 ⚪ Skipped_Test ✅ Timeout_Test ``` \ No newline at end of file diff --git a/__tests__/__snapshots__/dotnet-trx.test.ts.snap b/__tests__/__snapshots__/dotnet-trx.test.ts.snap index 04d535b..f4053ec 100644 --- a/__tests__/__snapshots__/dotnet-trx.test.ts.snap +++ b/__tests__/__snapshots__/dotnet-trx.test.ts.snap @@ -21,7 +21,9 @@ TestRunResult { at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.Unit\\Calculator.cs:line 9 at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 33", "line": 9, - "message": "System.DivideByZeroException : Attempted to divide by zero.", + "message": "System.DivideByZeroException : Attempted to divide by zero. + at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.Unit\\Calculator.cs:line 9 + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 33", "path": "DotnetTests.Unit/Calculator.cs", }, "name": "Exception_In_TargetTest", @@ -33,7 +35,8 @@ TestRunResult { "details": "System.Exception : Test at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 39", "line": 39, - "message": "System.Exception : Test", + "message": "System.Exception : Test + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 39", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Exception_In_Test", @@ -49,7 +52,8 @@ Actual: 2 "line": 27, "message": "Assert.Equal() Failure Expected: 3 -Actual: 2", +Actual: 2 + at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 27", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Failing_Test", @@ -71,7 +75,8 @@ Actual: False "line": 59, "message": "Assert.True() Failure Expected: True -Actual: False", +Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 59", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Is_Even_Number(i: 3)", @@ -99,7 +104,8 @@ Actual: False "line": 67, "message": "Assert.True() Failure Expected: True -Actual: False", +Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 i) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 67", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Should be even number(i: 3)", @@ -150,7 +156,9 @@ TestRunResult { at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.Unit\\Calculator.cs:line 9 at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 33", "line": 9, - "message": "System.DivideByZeroException : Attempted to divide by zero.", + "message": "System.DivideByZeroException : Attempted to divide by zero. + at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.Unit\\Calculator.cs:line 9 + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 33", "path": "DotnetTests.Unit/Calculator.cs", }, "name": "Exception_In_TargetTest", @@ -162,7 +170,8 @@ TestRunResult { "details": "System.Exception : Test at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 39", "line": 39, - "message": "System.Exception : Test", + "message": "System.Exception : Test + at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 39", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Exception_In_Test", @@ -178,7 +187,8 @@ Actual: 2 "line": 27, "message": "Assert.Equal() Failure Expected: 3 -Actual: 2", +Actual: 2 + at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 27", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Failing_Test", @@ -200,7 +210,8 @@ Actual: False "line": 59, "message": "Assert.True() Failure Expected: True -Actual: False", +Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 59", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Is_Even_Number(i: 3)", @@ -228,7 +239,8 @@ Actual: False "line": 67, "message": "Assert.True() Failure Expected: True -Actual: False", +Actual: False + at DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 i) in C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTests.XUnitTests\\CalculatorTests.cs:line 67", "path": "DotnetTests.XUnitTests/CalculatorTests.cs", }, "name": "Should be even number(i: 3)", diff --git a/dist/index.js b/dist/index.js index a4a5b4d..b7ca089 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1025,8 +1025,8 @@ class DotnetTrxParser { error.StackTrace.length === 0) { return undefined; } - const message = test.error.Message[0]; const stackTrace = test.error.StackTrace[0]; + const message = `${test.error.Message[0]}\n${stackTrace}`; let path; let line; const src = this.exceptionThrowSource(stackTrace); @@ -1038,7 +1038,7 @@ class DotnetTrxParser { path, line, message, - details: `${message}\n${stackTrace}` + details: `${message}` }; } exceptionThrowSource(stackTrace) { diff --git a/src/parsers/dotnet-trx/dotnet-trx-parser.ts b/src/parsers/dotnet-trx/dotnet-trx-parser.ts index 3b7acc4..826d27c 100644 --- a/src/parsers/dotnet-trx/dotnet-trx-parser.ts +++ b/src/parsers/dotnet-trx/dotnet-trx-parser.ts @@ -146,8 +146,8 @@ export class DotnetTrxParser implements TestParser { return undefined } - const message = test.error.Message[0] const stackTrace = test.error.StackTrace[0] + const message = `${test.error.Message[0]}\n${stackTrace}` let path let line @@ -161,7 +161,7 @@ export class DotnetTrxParser implements TestParser { path, line, message, - details: `${message}\n${stackTrace}` + details: `${message}` } } From d1504ea554cb5fc2d13ab85d4a5085ce809b0041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81dric=20Luthi?= Date: Sun, 22 Jun 2025 16:18:52 +0200 Subject: [PATCH 35/80] Add test on a trx report where the className attribute of TestMethod is missing This reproduces issue #556 --- .../__snapshots__/dotnet-trx.test.ts.snap | 4 +- __tests__/dotnet-trx.test.ts | 11 ++-- __tests__/fixtures/dotnet-xunitv3.trx | 60 +++++++++++++++++++ package.json | 1 + .../CalculatorTests.cs | 4 +- .../DotnetTests.NUnitV3Tests.csproj | 9 ++- .../DotnetTests.Unit/DotnetTests.Unit.csproj | 1 + .../DotnetTests.XUnitTests.csproj | 12 ++-- .../DotnetTests.XUnitV3Tests.csproj | 15 +++++ .../DotnetTests.XUnitV3Tests/FixtureTests.cs | 27 +++++++++ reports/dotnet/DotnetTests.sln | 7 +++ 11 files changed, 131 insertions(+), 20 deletions(-) create mode 100644 __tests__/fixtures/dotnet-xunitv3.trx create mode 100644 reports/dotnet/DotnetTests.XUnitV3Tests/DotnetTests.XUnitV3Tests.csproj create mode 100644 reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs diff --git a/__tests__/__snapshots__/dotnet-trx.test.ts.snap b/__tests__/__snapshots__/dotnet-trx.test.ts.snap index f4053ec..46c8601 100644 --- a/__tests__/__snapshots__/dotnet-trx.test.ts.snap +++ b/__tests__/__snapshots__/dotnet-trx.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`dotnet-trx tests matches report snapshot (only failed tests) 1`] = ` +exports[`dotnet-trx tests matches dotnet-trx report snapshot 1`] = ` TestRunResult { "path": "fixtures/dotnet-trx.trx", "suites": [ @@ -135,7 +135,7 @@ Actual: False } `; -exports[`dotnet-trx tests matches report snapshot 1`] = ` +exports[`dotnet-trx tests matches report snapshot (only failed tests) 1`] = ` TestRunResult { "path": "fixtures/dotnet-trx.trx", "suites": [ diff --git a/__tests__/dotnet-trx.test.ts b/__tests__/dotnet-trx.test.ts index ede52b0..6ec363e 100644 --- a/__tests__/dotnet-trx.test.ts +++ b/__tests__/dotnet-trx.test.ts @@ -39,15 +39,18 @@ describe('dotnet-trx tests', () => { expect(result.result).toBe('success') }) - it('matches report snapshot', async () => { - const fixturePath = path.join(__dirname, 'fixtures', 'dotnet-trx.trx') - const outputPath = path.join(__dirname, '__outputs__', 'dotnet-trx.md') + it.each([ + ['dotnet-trx'], + ['dotnet-xunitv3'] + ])('matches %s report snapshot', async (reportName) => { + const fixturePath = path.join(__dirname, 'fixtures', `${reportName}.trx`) + const outputPath = path.join(__dirname, '__outputs__', `${reportName}.md`) const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) const opts: ParseOptions = { parseErrors: true, - trackedFiles: ['DotnetTests.Unit/Calculator.cs', 'DotnetTests.XUnitTests/CalculatorTests.cs'] + trackedFiles: ['DotnetTests.Unit/Calculator.cs', 'DotnetTests.XUnitTests/CalculatorTests.cs', 'DotnetTests.XUnitV3Tests/FixtureTests.cs'] //workDir: 'C:/Users/Michal/Workspace/dorny/test-check/reports/dotnet/' } diff --git a/__tests__/fixtures/dotnet-xunitv3.trx b/__tests__/fixtures/dotnet-xunitv3.trx new file mode 100644 index 0000000..6bd9c25 --- /dev/null +++ b/__tests__/fixtures/dotnet-xunitv3.trx @@ -0,0 +1,60 @@ + + + + + + + + + + + Assert.Null() Failure: Value is not null +Expected: null +Actual: Fixture { } + at DotnetTests.XUnitV3Tests.FixtureTests.Failing_Test() in /_/reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs:line 25 + at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) + at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Exit code indicates failure: '2'. Please refer to https://aka.ms/testingplatform/exitcodes for more information. + + + + \ No newline at end of file diff --git a/package.json b/package.json index 5705920..19c1674 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "all": "npm run build && npm run format && npm run lint && npm run package && npm test", "dart-fixture": "cd \"reports/dart\" && dart test --file-reporter=\"json:../../__tests__/fixtures/dart-json.json\"", "dotnet-fixture": "dotnet test reports/dotnet/DotnetTests.XUnitTests --logger \"trx;LogFileName=../../../../__tests__/fixtures/dotnet-trx.trx\"", + "dotnet-xunitv3-fixture": "dotnet run --project reports/dotnet/DotnetTests.XUnitV3Tests/DotnetTests.XUnitV3Tests.csproj --report-trx --report-trx-filename dotnet-xunitv3.trx --results-directory __tests__/fixtures/", "dotnet-nunit-fixture": "nunit.exe reports/dotnet/DotnetTests.NUnitV3Tests/bin/Debug/netcoreapp3.1/DotnetTests.NUnitV3Tests.dll --result=__tests__/fixtures/dotnet-nunit.xml", "dotnet-nunit-legacy-fixture": "nunit-console.exe reports/dotnet-nunit-legacy/NUnitLegacy.sln --result=__tests__/fixtures/dotnet-nunit-legacy.xml", "golang-json-fixture": "go test -v -json -timeout 5s ./reports/go | tee __tests__/fixtures/golang-json.json", diff --git a/reports/dotnet/DotnetTests.NUnitV3Tests/CalculatorTests.cs b/reports/dotnet/DotnetTests.NUnitV3Tests/CalculatorTests.cs index 9452ae9..a61e000 100644 --- a/reports/dotnet/DotnetTests.NUnitV3Tests/CalculatorTests.cs +++ b/reports/dotnet/DotnetTests.NUnitV3Tests/CalculatorTests.cs @@ -40,7 +40,7 @@ namespace DotnetTests.XUnitTests } [Test] - [Timeout(1)] + [CancelAfter(1)] public void Timeout_Test() { Thread.Sleep(100); @@ -58,7 +58,7 @@ namespace DotnetTests.XUnitTests [TestCase(3)] public void Is_Even_Number(int i) { - Assert.True(i % 2 == 0); + Assert.That(i % 2 == 0); } } } diff --git a/reports/dotnet/DotnetTests.NUnitV3Tests/DotnetTests.NUnitV3Tests.csproj b/reports/dotnet/DotnetTests.NUnitV3Tests/DotnetTests.NUnitV3Tests.csproj index 932ff5b..c72f99f 100644 --- a/reports/dotnet/DotnetTests.NUnitV3Tests/DotnetTests.NUnitV3Tests.csproj +++ b/reports/dotnet/DotnetTests.NUnitV3Tests/DotnetTests.NUnitV3Tests.csproj @@ -1,14 +1,13 @@ - netcoreapp3.1 - - false + net8.0 + true - - + + diff --git a/reports/dotnet/DotnetTests.Unit/DotnetTests.Unit.csproj b/reports/dotnet/DotnetTests.Unit/DotnetTests.Unit.csproj index 9f5c4f4..07a1cc7 100644 --- a/reports/dotnet/DotnetTests.Unit/DotnetTests.Unit.csproj +++ b/reports/dotnet/DotnetTests.Unit/DotnetTests.Unit.csproj @@ -2,6 +2,7 @@ netstandard2.0 + true diff --git a/reports/dotnet/DotnetTests.XUnitTests/DotnetTests.XUnitTests.csproj b/reports/dotnet/DotnetTests.XUnitTests/DotnetTests.XUnitTests.csproj index 22cfd8e..c41d64e 100644 --- a/reports/dotnet/DotnetTests.XUnitTests/DotnetTests.XUnitTests.csproj +++ b/reports/dotnet/DotnetTests.XUnitTests/DotnetTests.XUnitTests.csproj @@ -1,16 +1,14 @@ - netcoreapp3.1 - - false + net8.0 + true - - - - + + + diff --git a/reports/dotnet/DotnetTests.XUnitV3Tests/DotnetTests.XUnitV3Tests.csproj b/reports/dotnet/DotnetTests.XUnitV3Tests/DotnetTests.XUnitV3Tests.csproj new file mode 100644 index 0000000..4536685 --- /dev/null +++ b/reports/dotnet/DotnetTests.XUnitV3Tests/DotnetTests.XUnitV3Tests.csproj @@ -0,0 +1,15 @@ + + + + net8.0 + exe + true + true + + + + + + + + diff --git a/reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs b/reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs new file mode 100644 index 0000000..737ab8c --- /dev/null +++ b/reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs @@ -0,0 +1,27 @@ +using System; +using Xunit; + +namespace DotnetTests.XUnitV3Tests; + +public sealed class Fixture : IDisposable +{ + public void Dispose() + { + throw new InvalidOperationException("Failure during fixture disposal"); + } +} + +public class FixtureTests(Fixture fixture) : IClassFixture +{ + [Fact] + public void Passing_Test() + { + Assert.NotNull(fixture); + } + + [Fact] + public void Failing_Test() + { + Assert.Null(fixture); + } +} diff --git a/reports/dotnet/DotnetTests.sln b/reports/dotnet/DotnetTests.sln index 7c5ff87..9635170 100644 --- a/reports/dotnet/DotnetTests.sln +++ b/reports/dotnet/DotnetTests.sln @@ -11,6 +11,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetTests.XUnitTests", "D EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotnetTests.NUnitV3Tests", "DotnetTests.NUnitV3Tests\DotnetTests.NUnitV3Tests.csproj", "{81023ED7-56CB-47E9-86C5-9125A0873C55}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotnetTests.XUnitV3Tests", "DotnetTests.XUnitV3Tests\DotnetTests.XUnitV3Tests.csproj", "{D35E65DC-62EF-4612-9FF3-66F5600BFB74}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -29,6 +31,10 @@ Global {81023ED7-56CB-47E9-86C5-9125A0873C55}.Debug|Any CPU.Build.0 = Debug|Any CPU {81023ED7-56CB-47E9-86C5-9125A0873C55}.Release|Any CPU.ActiveCfg = Release|Any CPU {81023ED7-56CB-47E9-86C5-9125A0873C55}.Release|Any CPU.Build.0 = Release|Any CPU + {D35E65DC-62EF-4612-9FF3-66F5600BFB74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D35E65DC-62EF-4612-9FF3-66F5600BFB74}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D35E65DC-62EF-4612-9FF3-66F5600BFB74}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D35E65DC-62EF-4612-9FF3-66F5600BFB74}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -36,6 +42,7 @@ Global GlobalSection(NestedProjects) = preSolution {F8607EDB-D25D-47AA-8132-38ACA242E845} = {BCAC3B31-ADB1-4221-9D5B-182EE868648C} {81023ED7-56CB-47E9-86C5-9125A0873C55} = {BCAC3B31-ADB1-4221-9D5B-182EE868648C} + {D35E65DC-62EF-4612-9FF3-66F5600BFB74} = {BCAC3B31-ADB1-4221-9D5B-182EE868648C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6ED5543C-74AA-4B21-8050-943550F3F66E} From 4128d36b9238297063f2ac18b871b325d5fd22a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ce=CC=81dric=20Luthi?= Date: Sun, 22 Jun 2025 16:22:35 +0200 Subject: [PATCH 36/80] Use "Unclassified" when no class name is available Fixes #556 --- __tests__/__outputs__/dotnet-xunitv3.md | 26 +++++++ .../__snapshots__/dotnet-trx.test.ts.snap | 70 +++++++++++++++++++ dist/index.js | 2 +- src/parsers/dotnet-trx/dotnet-trx-parser.ts | 2 +- 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 __tests__/__outputs__/dotnet-xunitv3.md diff --git a/__tests__/__outputs__/dotnet-xunitv3.md b/__tests__/__outputs__/dotnet-xunitv3.md new file mode 100644 index 0000000..f27f9e2 --- /dev/null +++ b/__tests__/__outputs__/dotnet-xunitv3.md @@ -0,0 +1,26 @@ +![Tests failed](https://img.shields.io/badge/tests-1%20passed%2C%203%20failed-critical) +|Report|Passed|Failed|Skipped|Time| +|:---|---:|---:|---:|---:| +|[fixtures/dotnet-xunitv3.trx](#user-content-r0)|1 ✅|3 ❌||267ms| +## ❌ fixtures/dotnet-xunitv3.trx +**4** tests were completed in **267ms** with **1** passed, **3** failed and **0** skipped. +|Test suite|Passed|Failed|Skipped|Time| +|:---|---:|---:|---:|---:| +|[DotnetTests.XUnitV3Tests.FixtureTests](#user-content-r0s0)|1 ✅|1 ❌||18ms| +|[Unclassified](#user-content-r0s1)||2 ❌||0ms| +### ❌ DotnetTests.XUnitV3Tests.FixtureTests +``` +❌ Failing_Test + Assert.Null() Failure: Value is not null + Expected: null + Actual: Fixture { } + at DotnetTests.XUnitV3Tests.FixtureTests.Failing_Test() in /_/reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs:line 25 + at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) + at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr) +✅ Passing_Test +``` +### ❌ Unclassified +``` +❌ [Test Class Cleanup Failure (DotnetTests.XUnitV3Tests.FixtureTests.Failing_Test)] +❌ [Test Class Cleanup Failure (DotnetTests.XUnitV3Tests.FixtureTests.Passing_Test)] +``` \ No newline at end of file diff --git a/__tests__/__snapshots__/dotnet-trx.test.ts.snap b/__tests__/__snapshots__/dotnet-trx.test.ts.snap index 46c8601..f432162 100644 --- a/__tests__/__snapshots__/dotnet-trx.test.ts.snap +++ b/__tests__/__snapshots__/dotnet-trx.test.ts.snap @@ -135,6 +135,76 @@ Actual: False } `; +exports[`dotnet-trx tests matches dotnet-xunitv3 report snapshot 1`] = ` +TestRunResult { + "path": "fixtures/dotnet-xunitv3.trx", + "suites": [ + TestSuiteResult { + "groups": [ + TestGroupResult { + "name": null, + "tests": [ + TestCaseResult { + "error": { + "details": "Assert.Null() Failure: Value is not null +Expected: null +Actual: Fixture { } + at DotnetTests.XUnitV3Tests.FixtureTests.Failing_Test() in /_/reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs:line 25 + at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) + at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)", + "line": 25, + "message": "Assert.Null() Failure: Value is not null +Expected: null +Actual: Fixture { } + at DotnetTests.XUnitV3Tests.FixtureTests.Failing_Test() in /_/reports/dotnet/DotnetTests.XUnitV3Tests/FixtureTests.cs:line 25 + at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) + at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)", + "path": "DotnetTests.XUnitV3Tests/FixtureTests.cs", + }, + "name": "Failing_Test", + "result": "failed", + "time": 17.0545, + }, + TestCaseResult { + "error": undefined, + "name": "Passing_Test", + "result": "success", + "time": 0.8786, + }, + ], + }, + ], + "name": "DotnetTests.XUnitV3Tests.FixtureTests", + "totalTime": undefined, + }, + TestSuiteResult { + "groups": [ + TestGroupResult { + "name": null, + "tests": [ + TestCaseResult { + "error": undefined, + "name": "[Test Class Cleanup Failure (DotnetTests.XUnitV3Tests.FixtureTests.Failing_Test)]", + "result": "failed", + "time": 0, + }, + TestCaseResult { + "error": undefined, + "name": "[Test Class Cleanup Failure (DotnetTests.XUnitV3Tests.FixtureTests.Passing_Test)]", + "result": "failed", + "time": 0, + }, + ], + }, + ], + "name": "Unclassified", + "totalTime": undefined, + }, + ], + "totalTime": 267, +} +`; + exports[`dotnet-trx tests matches report snapshot (only failed tests) 1`] = ` TestRunResult { "path": "fixtures/dotnet-trx.trx", diff --git a/dist/index.js b/dist/index.js index b7ca089..a5ea165 100644 --- a/dist/index.js +++ b/dist/index.js @@ -974,7 +974,7 @@ class DotnetTrxParser { })); const testClasses = {}; for (const r of unitTestsResults) { - const className = r.test.TestMethod[0].$.className; + const className = r.test.TestMethod[0].$.className ?? "Unclassified"; let tc = testClasses[className]; if (tc === undefined) { tc = new TestClass(className); diff --git a/src/parsers/dotnet-trx/dotnet-trx-parser.ts b/src/parsers/dotnet-trx/dotnet-trx-parser.ts index 826d27c..48a383f 100644 --- a/src/parsers/dotnet-trx/dotnet-trx-parser.ts +++ b/src/parsers/dotnet-trx/dotnet-trx-parser.ts @@ -81,7 +81,7 @@ export class DotnetTrxParser implements TestParser { const testClasses: {[name: string]: TestClass} = {} for (const r of unitTestsResults) { - const className = r.test.TestMethod[0].$.className + const className = r.test.TestMethod[0].$.className ?? "Unclassified" let tc = testClasses[className] if (tc === undefined) { tc = new TestClass(className) From 71814ae0cd1e72a667256973612b6fb974c4276c Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 28 Jun 2025 11:32:23 +0200 Subject: [PATCH 37/80] Update development dependencies --- package-lock.json | 198 +++++++++++++++++++++++++++------------------- package.json | 12 +-- 2 files changed, 124 insertions(+), 86 deletions(-) diff --git a/package-lock.json b/package-lock.json index 56e00cd..3e84ce5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^29.5.14", - "@types/node": "^20.19.0", + "@types/node": "^20.19.2", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -32,15 +32,15 @@ "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-github": "^4.10.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.13.0", - "eslint-plugin-prettier": "^5.4.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^28.14.0", + "eslint-plugin-prettier": "^5.5.1", "jest": "^29.7.0", "jest-circus": "^29.7.0", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", - "prettier": "^3.5.3", - "ts-jest": "^29.3.4", + "prettier": "^3.6.2", + "ts-jest": "^29.4.0", "typescript": "^5.8.3" }, "engines": { @@ -1776,9 +1776,9 @@ } }, "node_modules/@types/node": { - "version": "20.19.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.0.tgz", - "integrity": "sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -2460,18 +2460,20 @@ } }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2491,18 +2493,19 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2512,15 +2515,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2530,15 +2534,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3485,9 +3490,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { @@ -3495,18 +3500,18 @@ "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -3518,21 +3523,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -3541,7 +3549,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -3776,9 +3784,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -3899,30 +3907,30 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -3963,9 +3971,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.13.0.tgz", - "integrity": "sha512-4AuBcFWOriOeEqy6s4Zup/dQ7E1EPTyyfDaMYmM2YP9xEWPWwK3yYifH1dzY6aHRvyx7y53qMSIyT5s+jrorsQ==", + "version": "28.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.14.0.tgz", + "integrity": "sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4037,9 +4045,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz", - "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.1.tgz", + "integrity": "sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==", "dev": true, "license": "MIT", "dependencies": { @@ -5194,6 +5202,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6917,9 +6938,9 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -7533,6 +7554,20 @@ "node": ">=8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -7794,16 +7829,15 @@ } }, "node_modules/ts-jest": { - "version": "29.3.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz", - "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==", + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", + "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", @@ -7819,10 +7853,11 @@ }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { @@ -7840,6 +7875,9 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, diff --git a/package.json b/package.json index 5705920..9a3214e 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^29.5.14", - "@types/node": "^20.19.0", + "@types/node": "^20.19.2", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -58,15 +58,15 @@ "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-github": "^4.10.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.13.0", - "eslint-plugin-prettier": "^5.4.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^28.14.0", + "eslint-plugin-prettier": "^5.5.1", "jest": "^29.7.0", "jest-circus": "^29.7.0", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", - "prettier": "^3.5.3", - "ts-jest": "^29.3.4", + "prettier": "^3.6.2", + "ts-jest": "^29.4.0", "typescript": "^5.8.3" }, "jest-junit": { From eea8b67eb1fe9a0b1e45b603065ff41056ea5d2c Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 29 Jun 2025 16:22:07 +0200 Subject: [PATCH 38/80] Refactor variable names Fixes error `no-shadow`: Disallow variable declarations from shadowing variables declared in the outer scope. --- src/parsers/dotnet-nunit/dotnet-nunit-parser.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parsers/dotnet-nunit/dotnet-nunit-parser.ts b/src/parsers/dotnet-nunit/dotnet-nunit-parser.ts index 4bc27f1..2204e01 100644 --- a/src/parsers/dotnet-nunit/dotnet-nunit-parser.ts +++ b/src/parsers/dotnet-nunit/dotnet-nunit-parser.ts @@ -77,13 +77,13 @@ export class DotnetNunitParser implements TestParser { .join('.') const groupName = suitesWithoutTheories[suitesWithoutTheories.length - 1].$.name - let existingSuite = result.find(existingSuite => existingSuite.name === suiteName) + let existingSuite = result.find(suite => suite.name === suiteName) if (existingSuite === undefined) { existingSuite = new TestSuiteResult(suiteName, []) result.push(existingSuite) } - let existingGroup = existingSuite.groups.find(existingGroup => existingGroup.name === groupName) + let existingGroup = existingSuite.groups.find(group => group.name === groupName) if (existingGroup === undefined) { existingGroup = new TestGroupResult(groupName, []) existingSuite.groups.push(existingGroup) From 1c33c4c823634844b675515545e011e361702e03 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 29 Jun 2025 16:26:12 +0200 Subject: [PATCH 39/80] Rebuild `dist/` code --- dist/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index b7ca089..e129f44 100644 --- a/dist/index.js +++ b/dist/index.js @@ -837,12 +837,12 @@ class DotnetNunitParser { .map(suite => suite.$.name) .join('.'); const groupName = suitesWithoutTheories[suitesWithoutTheories.length - 1].$.name; - let existingSuite = result.find(existingSuite => existingSuite.name === suiteName); + let existingSuite = result.find(suite => suite.name === suiteName); if (existingSuite === undefined) { existingSuite = new test_results_1.TestSuiteResult(suiteName, []); result.push(existingSuite); } - let existingGroup = existingSuite.groups.find(existingGroup => existingGroup.name === groupName); + let existingGroup = existingSuite.groups.find(group => group.name === groupName); if (existingGroup === undefined) { existingGroup = new test_results_1.TestGroupResult(groupName, []); existingSuite.groups.push(existingGroup); From 4d84da17a1a4e3c1a2e98a12c9f25d673856b0f7 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sun, 29 Jun 2025 16:55:36 +0200 Subject: [PATCH 40/80] Upgrade `jest` to v30 --- __tests__/utils/parse-utils.test.ts | 2 +- package-lock.json | 4886 +++++++++++++++++++++------ package.json | 3 +- 3 files changed, 3855 insertions(+), 1036 deletions(-) diff --git a/__tests__/utils/parse-utils.test.ts b/__tests__/utils/parse-utils.test.ts index 83689ef..0f02867 100644 --- a/__tests__/utils/parse-utils.test.ts +++ b/__tests__/utils/parse-utils.test.ts @@ -32,6 +32,6 @@ describe('parseNetDuration', () => { }) it('throws when string has invalid format', () => { - expect(() => parseNetDuration('12:34:56 not a duration')).toThrowError(/^Invalid format/) + expect(() => parseNetDuration('12:34:56 not a duration')).toThrow(/^Invalid format/) }) }) diff --git a/package-lock.json b/package-lock.json index 3e84ce5..1f7fdb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,8 +35,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.1", - "jest": "^29.7.0", - "jest-circus": "^29.7.0", + "jest": "^30.0.3", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", @@ -117,114 +116,47 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.7.tgz", + "integrity": "sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", - "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.7.tgz", + "integrity": "sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.6", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.27.7", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.7", + "@babel/types": "^7.27.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -249,29 +181,32 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -284,67 +219,35 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -354,169 +257,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "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==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", - "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", - "@babel/types": "^7.23.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.7.tgz", + "integrity": "sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.7" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -529,6 +331,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -541,6 +344,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -553,6 +357,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -560,11 +365,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -577,6 +415,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -585,12 +424,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "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==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -604,6 +444,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -616,6 +457,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -628,6 +470,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -640,6 +483,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -652,6 +496,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -664,6 +509,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -671,11 +517,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -687,12 +550,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "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==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -714,33 +578,32 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.7.tgz", + "integrity": "sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.5", + "@babel/parser": "^7.27.7", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -753,19 +616,20 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.7.tgz", + "integrity": "sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -775,7 +639,8 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@emnapi/core": { "version": "1.4.3", @@ -919,11 +784,108 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -940,6 +902,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -949,6 +912,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -962,6 +926,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -975,6 +940,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -987,6 +953,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -1002,6 +969,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -1014,6 +982,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1028,59 +997,183 @@ } }, "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.2.tgz", + "integrity": "sha512-krGElPU0FipAqpVZ/BRZOy0MZh/ARdJ0Nj+PiH1ykFY1+VpBlYNLjdjVA5CFKxnKR6PFqFutO4Z7cdK9BlGiDA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/types": "30.0.1", "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", + "chalk": "^4.1.2", + "jest-message-util": "30.0.2", + "jest-util": "30.0.2", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/console/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/console/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/console/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.3.tgz", + "integrity": "sha512-Mgs1N+NSHD3Fusl7bOq1jyxv1JDAUwjy+0DhVR93Q6xcBP9/bAQ+oZhXb5TTnP5sQzAHgb7ROCKQ2SnovtxYtg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/console": "30.0.2", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.0.2", + "@jest/test-result": "30.0.2", + "@jest/transform": "30.0.2", + "@jest/types": "30.0.1", "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.0.2", + "jest-config": "30.0.3", + "jest-haste-map": "30.0.2", + "jest-message-util": "30.0.2", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.2", + "jest-resolve-dependencies": "30.0.3", + "jest-runner": "30.0.3", + "jest-runtime": "30.0.3", + "jest-snapshot": "30.0.3", + "jest-util": "30.0.2", + "jest-validate": "30.0.2", + "jest-watcher": "30.0.2", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1091,32 +1184,205 @@ } } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@jest/core/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", "dev": true, + "license": "MIT", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.2.tgz", + "integrity": "sha512-hRLhZRJNxBiOhxIKSq2UkrlhMt3/zVFQOAi5lvS8T9I03+kxsbflwHJEF+eXEYXCrRGRhHwECT7CDk6DyngsRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.0.2", + "@jest/types": "30.0.1", + "@types/node": "*", + "jest-mock": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/expect": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.3.tgz", + "integrity": "sha512-73BVLqfCeWjYWPEQoYjiRZ4xuQRhQZU0WdgvbyXGRHItKQqg5e6mt2y1kVhzLSuZpmUnccZHbGynoaL7IcLU3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "30.0.3", + "jest-snapshot": "30.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { @@ -1131,71 +1397,443 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@jest/expect/node_modules/@jest/expect-utils": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.3.tgz", + "integrity": "sha512-SMtBvf2sfX2agcT0dA9pXwcUrKvOSDqBY4e4iRfT+Hya33XzV35YVg+98YQFErVGA/VR1Gto5Y2+A6G9LSQ3Yg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "@jest/get-type": "30.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect/node_modules/expect": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.3.tgz", + "integrity": "sha512-HXg6NvK35/cSYZCUKAtmlgCFyqKM4frEPbzrav5hRqb0GMz0E0lS5hfzYjSaiaE5ysnp/qI2aeZkeyeIAOeXzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.0.3", + "@jest/get-type": "30.0.1", + "jest-matcher-utils": "30.0.3", + "jest-message-util": "30.0.2", + "jest-mock": "30.0.2", + "jest-util": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-diff": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.3.tgz", + "integrity": "sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "pretty-format": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-matcher-utils": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.3.tgz", + "integrity": "sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "jest-diff": "30.0.3", + "pretty-format": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.2.tgz", + "integrity": "sha512-jfx0Xg7l0gmphTY9UKm5RtH12BlLYj/2Plj6wXjVW5Era4FZKfXeIvwC67WX+4q8UCFxYS20IgnMcFBcEU0DtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.0.2", + "jest-mock": "30.0.2", + "jest-util": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", + "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.3.tgz", + "integrity": "sha512-fIduqNyYpMeeSr5iEAiMn15KxCzvrmxl7X7VwLDRGj7t5CoHtbF+7K3EvKk32mOUIJ4kIvFRlaixClMH2h/Vaw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "@jest/environment": "30.0.2", + "@jest/expect": "30.0.3", + "@jest/types": "30.0.1", + "jest-mock": "30.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.2.tgz", + "integrity": "sha512-l4QzS/oKf57F8WtPZK+vvF4Io6ukplc6XgNFu4Hd/QxaLEO9f+8dSFzUua62Oe0HKlCUjKHpltKErAgDiMJKsA==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", + "@jest/console": "30.0.2", + "@jest/test-result": "30.0.2", + "@jest/transform": "30.0.2", + "@jest/types": "30.0.1", + "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", + "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", + "jest-message-util": "30.0.2", + "jest-util": "30.0.2", + "jest-worker": "30.0.2", "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", + "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1206,6 +1844,185 @@ } } }, + "node_modules/@jest/reporters/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@jest/reporters/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -1218,74 +2035,245 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "node_modules/@jest/snapshot-utils": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.1.tgz", + "integrity": "sha512-6Dpv7vdtoRiISEFwYF8/c7LIvqXD7xDXtLPNzC2xqAfBznKip0MQM+rkseKwUPUpv2PJ7KW/YsnwWXrIL2xF+A==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@jest/types": "30.0.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.2.tgz", + "integrity": "sha512-KKMuBKkkZYP/GfHMhI+cH2/P3+taMZS3qnqqiPC1UXZTJskkCS+YU/ILCtw5anw1+YsTulDHFpDo70mmCedW8w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@jest/console": "30.0.2", + "@jest/types": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "node_modules/@jest/test-result/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/test-sequencer": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.2.tgz", + "integrity": "sha512-fbyU5HPka0rkalZ3MXVvq0hwZY8dx3Y6SCqR64zRmh+xXlDeFl0IdL4l9e7vp4gxEXTYHbwLFA1D+WW5CucaSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.0.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.2", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.2.tgz", + "integrity": "sha512-kJIuhLMTxRF7sc0gPzPtCDib/V9KwW3I2U25b+lYCYMVqHHSrcZopS8J8H+znx9yixuFv+Iozl8raLt/4MoxrA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", + "@babel/core": "^7.27.4", + "@jest/types": "30.0.1", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.0", + "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.2", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.2", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "write-file-atomic": "^5.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/types": { @@ -1306,14 +2294,15 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -1329,10 +2318,11 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1344,19 +2334,20 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz", - "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", "dev": true, "license": "MIT", "optional": true, @@ -1573,6 +2564,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pkgr/core": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", @@ -1611,21 +2613,23 @@ } }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@sinonjs/commons": "^3.0.1" } }, "node_modules/@szmarczak/http-timer": { @@ -1665,6 +2669,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1674,10 +2679,11 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -1687,16 +2693,18 @@ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } @@ -1712,15 +2720,6 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", @@ -1815,10 +2814,11 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -2049,15 +3049,44 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.2.tgz", + "integrity": "sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.2.tgz", + "integrity": "sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.2.tgz", - "integrity": "sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.2.tgz", + "integrity": "sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==", "cpu": [ "arm64" ], @@ -2069,9 +3098,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.2.tgz", - "integrity": "sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.2.tgz", + "integrity": "sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==", "cpu": [ "x64" ], @@ -2083,9 +3112,9 @@ ] }, "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.2.tgz", - "integrity": "sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.2.tgz", + "integrity": "sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==", "cpu": [ "x64" ], @@ -2097,9 +3126,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.2.tgz", - "integrity": "sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.2.tgz", + "integrity": "sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==", "cpu": [ "arm" ], @@ -2111,9 +3140,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.2.tgz", - "integrity": "sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.2.tgz", + "integrity": "sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==", "cpu": [ "arm" ], @@ -2125,9 +3154,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.2.tgz", - "integrity": "sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.2.tgz", + "integrity": "sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==", "cpu": [ "arm64" ], @@ -2139,9 +3168,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.2.tgz", - "integrity": "sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.2.tgz", + "integrity": "sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==", "cpu": [ "arm64" ], @@ -2153,9 +3182,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.2.tgz", - "integrity": "sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.2.tgz", + "integrity": "sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==", "cpu": [ "ppc64" ], @@ -2167,9 +3196,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.2.tgz", - "integrity": "sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.2.tgz", + "integrity": "sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==", "cpu": [ "riscv64" ], @@ -2181,9 +3210,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.2.tgz", - "integrity": "sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.2.tgz", + "integrity": "sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==", "cpu": [ "riscv64" ], @@ -2195,9 +3224,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.2.tgz", - "integrity": "sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.2.tgz", + "integrity": "sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==", "cpu": [ "s390x" ], @@ -2209,9 +3238,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.2.tgz", - "integrity": "sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.2.tgz", + "integrity": "sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==", "cpu": [ "x64" ], @@ -2223,9 +3252,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.2.tgz", - "integrity": "sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.2.tgz", + "integrity": "sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==", "cpu": [ "x64" ], @@ -2237,9 +3266,9 @@ ] }, "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.2.tgz", - "integrity": "sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.2.tgz", + "integrity": "sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==", "cpu": [ "wasm32" ], @@ -2247,16 +3276,16 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.9" + "@napi-rs/wasm-runtime": "^0.2.11" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.2.tgz", - "integrity": "sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.2.tgz", + "integrity": "sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==", "cpu": [ "arm64" ], @@ -2268,9 +3297,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.2.tgz", - "integrity": "sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.2.tgz", + "integrity": "sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==", "cpu": [ "ia32" ], @@ -2282,9 +3311,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.2.tgz", - "integrity": "sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.2.tgz", + "integrity": "sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==", "cpu": [ "x64" ], @@ -2356,6 +3385,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2371,6 +3401,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -2632,119 +3663,101 @@ } }, "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.2.tgz", + "integrity": "sha512-A5kqR1/EUTidM2YC2YMEUDP2+19ppgOwK0IAd9Swc3q2KqFb5f9PtRUXVeZcngu0z5mDMyZ9zH2huJZSOMLiTQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "@jest/transform": "30.0.2", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.0", + "babel-preset-jest": "30.0.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.8.0" + "@babel/core": "^7.11.0" } }, "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", + "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=12" } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", + "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "@types/babel__core": "^7.20.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", + "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", "dev": true, + "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "babel-plugin-jest-hoist": "30.0.1", + "babel-preset-current-node-syntax": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.11.0" } }, "node_modules/balanced-match": { @@ -2782,9 +3795,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -2800,11 +3813,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -2838,7 +3852,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cacheable-lookup": { "version": "5.0.4", @@ -2943,14 +3958,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001726", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", + "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", "dev": true, "funding": [ { @@ -2965,7 +3981,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", @@ -2988,6 +4005,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3008,16 +4026,18 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz", + "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3043,6 +4063,7 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -3052,7 +4073,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", @@ -3084,32 +4106,12 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3223,10 +4225,11 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -3247,6 +4250,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3314,6 +4318,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3367,6 +4372,13 @@ "node": ">= 0.4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -3384,16 +4396,18 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.611", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.611.tgz", - "integrity": "sha512-ZtRpDxrjHapOwxtv+nuth5ByB8clyn8crVynmRNGO3wG3LOp8RTcyZDqwaI6Ng6y8FCK2hVZmJoqwCskKbNMaw==", - "dev": true + "version": "1.5.177", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.177.tgz", + "integrity": "sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3485,6 +4499,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -3639,10 +4654,11 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4143,6 +5159,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4207,6 +5224,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -4225,11 +5243,12 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -4442,6 +5461,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4516,6 +5565,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -4550,6 +5600,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -4573,6 +5624,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4854,7 +5906,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-cache-semantics": { "version": "4.1.1", @@ -4878,6 +5931,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -4908,10 +5962,11 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -4988,7 +6043,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", @@ -5146,6 +6202,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5155,6 +6212,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5303,6 +6361,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5430,14 +6489,15 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -5450,6 +6510,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -5460,24 +6521,26 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "istanbul-lib-coverage": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -5486,6 +6549,22 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", @@ -5506,21 +6585,22 @@ } }, "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.3.tgz", + "integrity": "sha512-Uy8xfeE/WpT2ZLGDXQmaYNzw2v8NUKuYeKGtkS6sDxwsdQihdgYCXaKIYnph1h95DN5H35ubFDm0dfmsQnjn4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" + "@jest/core": "30.0.3", + "@jest/types": "30.0.1", + "import-local": "^3.2.0", + "jest-cli": "30.0.3" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -5532,73 +6612,302 @@ } }, "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.2.tgz", + "integrity": "sha512-Ius/iRST9FKfJI+I+kpiDh8JuUlAISnRszF9ixZDIqJF17FckH5sOzKC8a0wd0+D+8em5ADRHA5V5MnfeDk2WA==", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", + "execa": "^5.1.1", + "jest-util": "30.0.2", "p-limit": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-changed-files/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.3.tgz", + "integrity": "sha512-rD9qq2V28OASJHJWDRVdhoBdRs6k3u3EmBzDYcyuMby8XCO3Ll1uq9kyqM41ZcC4fMiPulMVh3qMw0cBvDbnyg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/environment": "30.0.2", + "@jest/expect": "30.0.3", + "@jest/test-result": "30.0.2", + "@jest/types": "30.0.1", "@types/node": "*", - "chalk": "^4.0.0", + "chalk": "^4.1.2", "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.0.2", + "jest-matcher-utils": "30.0.3", + "jest-message-util": "30.0.2", + "jest-runtime": "30.0.3", + "jest-snapshot": "30.0.3", + "jest-util": "30.0.2", "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", + "pretty-format": "30.0.2", + "pure-rand": "^7.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "stack-utils": "^2.0.6" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.3.tgz", + "integrity": "sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "pretty-format": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.3.tgz", + "integrity": "sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "jest-diff": "30.0.3", + "pretty-format": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.3.tgz", + "integrity": "sha512-UWDSj0ayhumEAxpYRlqQLrssEi29kdQ+kddP94AuHhZknrE+mT0cR0J+zMHKFe9XPfX3dKQOc2TfWki3WhFTsA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" + "@jest/core": "30.0.3", + "@jest/test-result": "30.0.2", + "@jest/types": "30.0.1", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.0.3", + "jest-util": "30.0.2", + "jest-validate": "30.0.2", + "yargs": "^17.7.2" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -5609,51 +6918,289 @@ } } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/jest-cli/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-cli/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-config": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.3.tgz", + "integrity": "sha512-j0L4oRCtJwNyZktXIqwzEiDVQXBbQ4dqXuLD/TZdn++hXIcIfZmjHgrViEy5s/+j4HvITmAXbexVZpQ/jnr0bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.0.1", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.0.2", + "@jest/types": "30.0.1", + "babel-jest": "30.0.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.0.3", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.2", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.2", + "jest-runner": "30.0.3", + "jest-util": "30.0.2", + "jest-validate": "30.0.2", + "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", + "pretty-format": "30.0.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "@types/node": "*", + "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "esbuild-register": { + "optional": true + }, "ts-node": { "optional": true } } }, + "node_modules/jest-config/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-config/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-config/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -5670,48 +7217,226 @@ } }, "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", + "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", "dev": true, + "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "detect-newline": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.2.tgz", + "integrity": "sha512-ZFRsTpe5FUWFQ9cWTMguCaiA6kkW5whccPy9JjD1ezxh+mJeqmz8naL8Fl/oSbNJv3rgB0x87WBIkA5CObIUZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.1", + "chalk": "^4.1.2", + "jest-util": "30.0.2", + "pretty-format": "30.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.2.tgz", + "integrity": "sha512-XsGtZ0H+a70RsxAQkKuIh0D3ZlASXdZdhpOSBq9WRPq6lhe0IoQHGW0w9ZUaPiZQ/CpkIdprvlfV1QcXcvIQLQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/environment": "30.0.2", + "@jest/fake-timers": "30.0.2", + "@jest/types": "30.0.1", "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "jest-mock": "30.0.2", + "jest-util": "30.0.2", + "jest-validate": "30.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-environment-node/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-get-type": { @@ -5724,28 +7449,101 @@ } }, "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.2.tgz", + "integrity": "sha512-telJBKpNLeCb4MaX+I5k496556Y2FiKR/QLZc0+MGBYl4k3OO0472drlV2LUe7c1Glng5HuAu+5GLYp//GpdOQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", + "@jest/types": "30.0.1", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.0.2", + "jest-worker": "30.0.2", + "micromatch": "^4.0.8", "walker": "^1.0.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "optionalDependencies": { - "fsevents": "^2.3.2" + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-haste-map/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-haste-map/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-junit": { @@ -5764,16 +7562,65 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.2.tgz", + "integrity": "sha512-U66sRrAYdALq+2qtKffBLDWsQ/XoNNs2Lcr83sc9lvE/hEpNafJlq2lXCPUBMNqamMECNxSIekLfe69qg4KMIQ==", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@jest/get-type": "30.0.1", + "pretty-format": "30.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { @@ -5812,17 +7659,91 @@ } }, "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz", + "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/types": "30.0.1", "@types/node": "*", - "jest-util": "^29.7.0" + "jest-util": "30.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-mock/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-pnp-resolver": { @@ -5830,6 +7751,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5843,141 +7765,707 @@ } }, "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.2.tgz", + "integrity": "sha512-q/XT0XQvRemykZsvRopbG6FQUT6/ra+XV6rPijyjT6D0msOyCvR2A5PlWZLd+fH0U8XWKZfDiAgrUNDNX2BkCw==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.2", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.0.2", + "jest-validate": "30.0.2", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.3.tgz", + "integrity": "sha512-FlL6u7LiHbF0Oe27k7DHYMq2T2aNpPhxnNo75F7lEtu4A6sSw+TKkNNUGNcVckdFoL0RCWREJsC1HsKDwKRZzQ==", "dev": true, + "license": "MIT", "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.3.tgz", + "integrity": "sha512-CxYBzu9WStOBBXAKkLXGoUtNOWsiS1RRmUQb6SsdUdTcqVncOau7m8AJ4cW3Mz+YL1O9pOGPSYLyvl8HBdFmkQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/console": "30.0.2", + "@jest/environment": "30.0.2", + "@jest/test-result": "30.0.2", + "@jest/transform": "30.0.2", + "@jest/types": "30.0.1", "@types/node": "*", - "chalk": "^4.0.0", + "chalk": "^4.1.2", "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.0.1", + "jest-environment-node": "30.0.2", + "jest-haste-map": "30.0.2", + "jest-leak-detector": "30.0.2", + "jest-message-util": "30.0.2", + "jest-resolve": "30.0.2", + "jest-runtime": "30.0.3", + "jest-util": "30.0.2", + "jest-watcher": "30.0.2", + "jest-worker": "30.0.2", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.3.tgz", + "integrity": "sha512-Xjosq0C48G9XEQOtmgrjXJwPaUPaq3sPJwHDRaiC+5wi4ZWxO6Lx6jNkizK/0JmTulVNuxP8iYwt77LGnfg3/w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/environment": "30.0.2", + "@jest/fake-timers": "30.0.2", + "@jest/globals": "30.0.3", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.0.2", + "@jest/transform": "30.0.2", + "@jest/types": "30.0.1", "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.0.2", + "jest-message-util": "30.0.2", + "jest-mock": "30.0.2", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.0.2", + "jest-snapshot": "30.0.3", + "jest-util": "30.0.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/jest-runtime/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.3.tgz", + "integrity": "sha512-F05JCohd3OA1N9+5aEPXA6I0qOfZDGIx0zTq5Z4yMBg2i1p5ELfBusjYAWwTkC12c7dHcbyth4QAfQbS7cRjow==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.0.3", + "@jest/get-type": "30.0.1", + "@jest/snapshot-utils": "30.0.1", + "@jest/transform": "30.0.2", + "@jest/types": "30.0.1", + "babel-preset-current-node-syntax": "^1.1.0", + "chalk": "^4.1.2", + "expect": "30.0.3", + "graceful-fs": "^4.2.11", + "jest-diff": "30.0.3", + "jest-matcher-utils": "30.0.3", + "jest-message-util": "30.0.2", + "jest-util": "30.0.2", + "pretty-format": "30.0.2", + "semver": "^7.7.2", + "synckit": "^0.11.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/expect-utils": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.3.tgz", + "integrity": "sha512-SMtBvf2sfX2agcT0dA9pXwcUrKvOSDqBY4e4iRfT+Hya33XzV35YVg+98YQFErVGA/VR1Gto5Y2+A6G9LSQ3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/expect": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.3.tgz", + "integrity": "sha512-HXg6NvK35/cSYZCUKAtmlgCFyqKM4frEPbzrav5hRqb0GMz0E0lS5hfzYjSaiaE5ysnp/qI2aeZkeyeIAOeXzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.0.3", + "@jest/get-type": "30.0.1", + "jest-matcher-utils": "30.0.3", + "jest-message-util": "30.0.2", + "jest-mock": "30.0.2", + "jest-util": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.3.tgz", + "integrity": "sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "pretty-format": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.3.tgz", + "integrity": "sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.0.1", + "chalk": "^4.1.2", + "jest-diff": "30.0.3", + "pretty-format": "30.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-message-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-util": { @@ -6010,20 +8498,73 @@ } }, "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.2.tgz", + "integrity": "sha512-noOvul+SFER4RIvNAwGn6nmV2fXqBq67j+hKGHKGFCmK4ks/Iy1FSrqQNBLGKlu4ZZIRL6Kg1U72N1nxuRCrGQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", + "@jest/get-type": "30.0.1", + "@jest/types": "30.0.1", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "pretty-format": "30.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-validate/node_modules/camelcase": { @@ -6031,6 +8572,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6038,38 +8580,202 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" + "@jest/schemas": "30.0.1", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-watcher": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.2.tgz", + "integrity": "sha512-vYO5+E7jJuF+XmONr6CrbXdlYrgvZqtkn6pdkgjt/dU64UAdc0v1cAVaAeWtAfUUMScxNmnUjKPUMdCpNVASwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.0.2", + "@jest/types": "30.0.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.0.2", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.2.tgz", + "integrity": "sha512-RN1eQmx7qSLFA+o9pfJKlqViwL5wt+OL3Vff/A+/cPsmuw7NPwfgl33AP+/agRmHzPOFgXviRycR9kYwlcRQXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", - "jest-util": "^29.7.0", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.0.2", "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "supports-color": "^8.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/jest-util": { + "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-worker/node_modules/supports-color": { @@ -6077,6 +8783,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6087,11 +8794,51 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jest/node_modules/@jest/schemas": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest/node_modules/@jest/types": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest/node_modules/@sinclair/typebox": { + "version": "0.34.37", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true, + "license": "MIT" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -6106,15 +8853,16 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -6126,7 +8874,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -6175,15 +8924,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", @@ -6204,6 +8944,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6225,7 +8966,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", @@ -6291,6 +9033,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -6300,6 +9043,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -6378,6 +9122,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6469,10 +9214,11 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -6499,6 +9245,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -6629,6 +9376,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -6717,10 +9465,18 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6738,6 +9494,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -6829,10 +9586,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.2", @@ -6846,10 +9604,11 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -6859,6 +9618,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -6871,6 +9631,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -6884,6 +9645,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -6896,6 +9658,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -6911,6 +9674,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -6991,19 +9755,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7023,9 +9774,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", "dev": true, "funding": [ { @@ -7036,7 +9787,8 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -7069,10 +9821,11 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", @@ -7129,6 +9882,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7160,6 +9914,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -7172,6 +9927,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7195,15 +9951,6 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", @@ -7486,12 +10233,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -7506,6 +10247,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7515,6 +10257,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -7524,7 +10267,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stable-hash": { "version": "0.0.5", @@ -7573,6 +10317,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -7586,6 +10331,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7595,11 +10341,35 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string.prototype.trim": { "version": "1.2.10", @@ -7672,11 +10442,26 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7686,6 +10471,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7757,6 +10543,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -7795,15 +10582,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7960,6 +10738,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -8112,42 +10891,44 @@ "license": "ISC" }, "node_modules/unrs-resolver": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.2.tgz", - "integrity": "sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.2.tgz", + "integrity": "sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "napi-postinstall": "^0.2.2" + "napi-postinstall": "^0.2.4" }, "funding": { - "url": "https://github.com/sponsors/JounQin" + "url": "https://opencollective.com/unrs-resolver" }, "optionalDependencies": { - "@unrs/resolver-binding-darwin-arm64": "1.7.2", - "@unrs/resolver-binding-darwin-x64": "1.7.2", - "@unrs/resolver-binding-freebsd-x64": "1.7.2", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.2", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.2", - "@unrs/resolver-binding-linux-arm64-gnu": "1.7.2", - "@unrs/resolver-binding-linux-arm64-musl": "1.7.2", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.2", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.2", - "@unrs/resolver-binding-linux-riscv64-musl": "1.7.2", - "@unrs/resolver-binding-linux-s390x-gnu": "1.7.2", - "@unrs/resolver-binding-linux-x64-gnu": "1.7.2", - "@unrs/resolver-binding-linux-x64-musl": "1.7.2", - "@unrs/resolver-binding-wasm32-wasi": "1.7.2", - "@unrs/resolver-binding-win32-arm64-msvc": "1.7.2", - "@unrs/resolver-binding-win32-ia32-msvc": "1.7.2", - "@unrs/resolver-binding-win32-x64-msvc": "1.7.2" + "@unrs/resolver-binding-android-arm-eabi": "1.9.2", + "@unrs/resolver-binding-android-arm64": "1.9.2", + "@unrs/resolver-binding-darwin-arm64": "1.9.2", + "@unrs/resolver-binding-darwin-x64": "1.9.2", + "@unrs/resolver-binding-freebsd-x64": "1.9.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.9.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.9.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.9.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.9.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.9.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.9.2", + "@unrs/resolver-binding-linux-x64-musl": "1.9.2", + "@unrs/resolver-binding-wasm32-wasi": "1.9.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.9.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.9.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.9.2" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -8163,9 +10944,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -8193,10 +10975,11 @@ } }, "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -8324,6 +11107,26 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8342,16 +11145,30 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/xml": { @@ -8385,6 +11202,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -8393,13 +11211,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", diff --git a/package.json b/package.json index 9a3214e..ff0b519 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.1", - "jest": "^29.7.0", - "jest-circus": "^29.7.0", + "jest": "^30.0.3", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", From 07e5c648b53deef1c7d2078caeb9621193732e43 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 9 Jul 2025 13:22:10 +0200 Subject: [PATCH 41/80] Define the `report-title` attribute in action definition Fixes missing attribute from PR #568 --- action.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/action.yml b/action.yml index ec4772f..7777d56 100644 --- a/action.yml +++ b/action.yml @@ -68,6 +68,10 @@ inputs: working-directory: description: Relative path under $GITHUB_WORKSPACE where the repository was checked out required: false + report-title: + description: Title for the test report summary + required: false + default: '' only-summary: description: | Allows you to generate only the summary. From 9c4a54379fadb5c4979c64d903c873aba5d6c3ac Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 9 Jul 2025 14:16:56 +0200 Subject: [PATCH 42/80] Upgrade `jest` to v30 Update `jest` package to v30.0.4 --- package-lock.json | 433 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 218 insertions(+), 217 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1f7fdb0..9a01a84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.1", - "jest": "^30.0.3", + "jest": "^30.0.4", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", @@ -997,9 +997,9 @@ } }, "node_modules/@jest/console": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.2.tgz", - "integrity": "sha512-krGElPU0FipAqpVZ/BRZOy0MZh/ARdJ0Nj+PiH1ykFY1+VpBlYNLjdjVA5CFKxnKR6PFqFutO4Z7cdK9BlGiDA==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.4.tgz", + "integrity": "sha512-tMLCDvBJBwPqMm4OAiuKm2uF5y5Qe26KgcMn+nrDSWpEW+eeFmqA0iO4zJfL16GP7gE3bUUQ3hIuUJ22AqVRnw==", "dev": true, "license": "MIT", "dependencies": { @@ -1067,9 +1067,9 @@ } }, "node_modules/@jest/console/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -1137,17 +1137,17 @@ } }, "node_modules/@jest/core": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.3.tgz", - "integrity": "sha512-Mgs1N+NSHD3Fusl7bOq1jyxv1JDAUwjy+0DhVR93Q6xcBP9/bAQ+oZhXb5TTnP5sQzAHgb7ROCKQ2SnovtxYtg==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.4.tgz", + "integrity": "sha512-MWScSO9GuU5/HoWjpXAOBs6F/iobvK1XlioelgOM9St7S0Z5WTI9kjCQLPeo4eQRRYusyLW25/J7J5lbFkrYXw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.2", + "@jest/console": "30.0.4", "@jest/pattern": "30.0.1", - "@jest/reporters": "30.0.2", - "@jest/test-result": "30.0.2", - "@jest/transform": "30.0.2", + "@jest/reporters": "30.0.4", + "@jest/test-result": "30.0.4", + "@jest/transform": "30.0.4", "@jest/types": "30.0.1", "@types/node": "*", "ansi-escapes": "^4.3.2", @@ -1156,18 +1156,18 @@ "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-changed-files": "30.0.2", - "jest-config": "30.0.3", + "jest-config": "30.0.4", "jest-haste-map": "30.0.2", "jest-message-util": "30.0.2", "jest-regex-util": "30.0.1", "jest-resolve": "30.0.2", - "jest-resolve-dependencies": "30.0.3", - "jest-runner": "30.0.3", - "jest-runtime": "30.0.3", - "jest-snapshot": "30.0.3", + "jest-resolve-dependencies": "30.0.4", + "jest-runner": "30.0.4", + "jest-runtime": "30.0.4", + "jest-snapshot": "30.0.4", "jest-util": "30.0.2", "jest-validate": "30.0.2", - "jest-watcher": "30.0.2", + "jest-watcher": "30.0.4", "micromatch": "^4.0.8", "pretty-format": "30.0.2", "slash": "^3.0.0" @@ -1237,9 +1237,9 @@ } }, "node_modules/@jest/core/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -1317,13 +1317,13 @@ } }, "node_modules/@jest/environment": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.2.tgz", - "integrity": "sha512-hRLhZRJNxBiOhxIKSq2UkrlhMt3/zVFQOAi5lvS8T9I03+kxsbflwHJEF+eXEYXCrRGRhHwECT7CDk6DyngsRA==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.4.tgz", + "integrity": "sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.0.2", + "@jest/fake-timers": "30.0.4", "@jest/types": "30.0.1", "@types/node": "*", "jest-mock": "30.0.2" @@ -1372,14 +1372,14 @@ "license": "MIT" }, "node_modules/@jest/expect": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.3.tgz", - "integrity": "sha512-73BVLqfCeWjYWPEQoYjiRZ4xuQRhQZU0WdgvbyXGRHItKQqg5e6mt2y1kVhzLSuZpmUnccZHbGynoaL7IcLU3A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.4.tgz", + "integrity": "sha512-Z/DL7t67LBHSX4UzDyeYKqOxE/n7lbrrgEwWM3dGiH5Dgn35nk+YtgzKudmfIrBI8DRRrKYY5BCo3317HZV1Fw==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.0.3", - "jest-snapshot": "30.0.3" + "expect": "30.0.4", + "jest-snapshot": "30.0.4" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1398,9 +1398,9 @@ } }, "node_modules/@jest/expect/node_modules/@jest/expect-utils": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.3.tgz", - "integrity": "sha512-SMtBvf2sfX2agcT0dA9pXwcUrKvOSDqBY4e4iRfT+Hya33XzV35YVg+98YQFErVGA/VR1Gto5Y2+A6G9LSQ3Yg==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz", + "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==", "dev": true, "license": "MIT", "dependencies": { @@ -1463,9 +1463,9 @@ } }, "node_modules/@jest/expect/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -1479,15 +1479,15 @@ } }, "node_modules/@jest/expect/node_modules/expect": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.3.tgz", - "integrity": "sha512-HXg6NvK35/cSYZCUKAtmlgCFyqKM4frEPbzrav5hRqb0GMz0E0lS5hfzYjSaiaE5ysnp/qI2aeZkeyeIAOeXzQ==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", + "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.0.3", + "@jest/expect-utils": "30.0.4", "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.3", + "jest-matcher-utils": "30.0.4", "jest-message-util": "30.0.2", "jest-mock": "30.0.2", "jest-util": "30.0.2" @@ -1497,9 +1497,9 @@ } }, "node_modules/@jest/expect/node_modules/jest-diff": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.3.tgz", - "integrity": "sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", + "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", "dev": true, "license": "MIT", "dependencies": { @@ -1513,15 +1513,15 @@ } }, "node_modules/@jest/expect/node_modules/jest-matcher-utils": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.3.tgz", - "integrity": "sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", + "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", - "jest-diff": "30.0.3", + "jest-diff": "30.0.4", "pretty-format": "30.0.2" }, "engines": { @@ -1583,9 +1583,9 @@ } }, "node_modules/@jest/fake-timers": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.2.tgz", - "integrity": "sha512-jfx0Xg7l0gmphTY9UKm5RtH12BlLYj/2Plj6wXjVW5Era4FZKfXeIvwC67WX+4q8UCFxYS20IgnMcFBcEU0DtA==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.4.tgz", + "integrity": "sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==", "dev": true, "license": "MIT", "dependencies": { @@ -1653,9 +1653,9 @@ } }, "node_modules/@jest/fake-timers/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -1733,14 +1733,14 @@ } }, "node_modules/@jest/globals": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.3.tgz", - "integrity": "sha512-fIduqNyYpMeeSr5iEAiMn15KxCzvrmxl7X7VwLDRGj7t5CoHtbF+7K3EvKk32mOUIJ4kIvFRlaixClMH2h/Vaw==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.4.tgz", + "integrity": "sha512-avyZuxEHF2EUhFF6NEWVdxkRRV6iXXcIES66DLhuLlU7lXhtFG/ySq/a8SRZmEJSsLkNAFX6z6mm8KWyXe9OEA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.2", - "@jest/expect": "30.0.3", + "@jest/environment": "30.0.4", + "@jest/expect": "30.0.4", "@jest/types": "30.0.1", "jest-mock": "30.0.2" }, @@ -1802,16 +1802,16 @@ } }, "node_modules/@jest/reporters": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.2.tgz", - "integrity": "sha512-l4QzS/oKf57F8WtPZK+vvF4Io6ukplc6XgNFu4Hd/QxaLEO9f+8dSFzUua62Oe0HKlCUjKHpltKErAgDiMJKsA==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.4.tgz", + "integrity": "sha512-6ycNmP0JSJEEys1FbIzHtjl9BP0tOZ/KN6iMeAKrdvGmUsa1qfRdlQRUDKJ4P84hJ3xHw1yTqJt4fvPNHhyE+g==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.0.2", - "@jest/test-result": "30.0.2", - "@jest/transform": "30.0.2", + "@jest/console": "30.0.4", + "@jest/test-result": "30.0.4", + "@jest/transform": "30.0.4", "@jest/types": "30.0.1", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", @@ -1907,9 +1907,9 @@ } }, "node_modules/@jest/reporters/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -2036,9 +2036,9 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.1.tgz", - "integrity": "sha512-6Dpv7vdtoRiISEFwYF8/c7LIvqXD7xDXtLPNzC2xqAfBznKip0MQM+rkseKwUPUpv2PJ7KW/YsnwWXrIL2xF+A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.4.tgz", + "integrity": "sha512-BEpX8M/Y5lG7MI3fmiO+xCnacOrVsnbqVrcDZIT8aSGkKV1w2WwvRQxSWw5SIS8ozg7+h8tSj5EO1Riqqxcdag==", "dev": true, "license": "MIT", "dependencies": { @@ -2106,13 +2106,13 @@ } }, "node_modules/@jest/test-result": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.2.tgz", - "integrity": "sha512-KKMuBKkkZYP/GfHMhI+cH2/P3+taMZS3qnqqiPC1UXZTJskkCS+YU/ILCtw5anw1+YsTulDHFpDo70mmCedW8w==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.4.tgz", + "integrity": "sha512-Mfpv8kjyKTHqsuu9YugB6z1gcdB3TSSOaKlehtVaiNlClMkEHY+5ZqCY2CrEE3ntpBMlstX/ShDAf84HKWsyIw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.2", + "@jest/console": "30.0.4", "@jest/types": "30.0.1", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" @@ -2161,13 +2161,13 @@ "license": "MIT" }, "node_modules/@jest/test-sequencer": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.2.tgz", - "integrity": "sha512-fbyU5HPka0rkalZ3MXVvq0hwZY8dx3Y6SCqR64zRmh+xXlDeFl0IdL4l9e7vp4gxEXTYHbwLFA1D+WW5CucaSw==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.4.tgz", + "integrity": "sha512-bj6ePmqi4uxAE8EHE0Slmk5uBYd9Vd/PcVt06CsBxzH4bbA8nGsI1YbXl/NH+eii4XRtyrRx+Cikub0x8H4vDg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.2", + "@jest/test-result": "30.0.4", "graceful-fs": "^4.2.11", "jest-haste-map": "30.0.2", "slash": "^3.0.0" @@ -2177,9 +2177,9 @@ } }, "node_modules/@jest/transform": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.2.tgz", - "integrity": "sha512-kJIuhLMTxRF7sc0gPzPtCDib/V9KwW3I2U25b+lYCYMVqHHSrcZopS8J8H+znx9yixuFv+Iozl8raLt/4MoxrA==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.4.tgz", + "integrity": "sha512-atvy4hRph/UxdCIBp+UB2jhEA/jJiUeGZ7QPgBi9jUUKNgi3WEoMXGNG7zbbELG2+88PMabUNCDchmqgJy3ELg==", "dev": true, "license": "MIT", "dependencies": { @@ -3663,13 +3663,13 @@ } }, "node_modules/babel-jest": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.2.tgz", - "integrity": "sha512-A5kqR1/EUTidM2YC2YMEUDP2+19ppgOwK0IAd9Swc3q2KqFb5f9PtRUXVeZcngu0z5mDMyZ9zH2huJZSOMLiTQ==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.4.tgz", + "integrity": "sha512-UjG2j7sAOqsp2Xua1mS/e+ekddkSu3wpf4nZUSvXNHuVWdaOUXQ77+uyjJLDE9i0atm5x4kds8K9yb5lRsRtcA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.0.2", + "@jest/transform": "30.0.4", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.0", "babel-preset-jest": "30.0.1", @@ -6585,16 +6585,16 @@ } }, "node_modules/jest": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.3.tgz", - "integrity": "sha512-Uy8xfeE/WpT2ZLGDXQmaYNzw2v8NUKuYeKGtkS6sDxwsdQihdgYCXaKIYnph1h95DN5H35ubFDm0dfmsQnjn4Q==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.4.tgz", + "integrity": "sha512-9QE0RS4WwTj/TtTC4h/eFVmFAhGNVerSB9XpJh8sqaXlP73ILcPcZ7JWjjEtJJe2m8QyBLKKfPQuK+3F+Xij/g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.3", + "@jest/core": "30.0.4", "@jest/types": "30.0.1", "import-local": "^3.2.0", - "jest-cli": "30.0.3" + "jest-cli": "30.0.4" }, "bin": { "jest": "bin/jest.js" @@ -6666,9 +6666,9 @@ "license": "MIT" }, "node_modules/jest-changed-files/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -6700,15 +6700,15 @@ } }, "node_modules/jest-circus": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.3.tgz", - "integrity": "sha512-rD9qq2V28OASJHJWDRVdhoBdRs6k3u3EmBzDYcyuMby8XCO3Ll1uq9kyqM41ZcC4fMiPulMVh3qMw0cBvDbnyg==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.4.tgz", + "integrity": "sha512-o6UNVfbXbmzjYgmVPtSQrr5xFZCtkDZGdTlptYvGFSN80RuOOlTe73djvMrs+QAuSERZWcHBNIOMH+OEqvjWuw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.2", - "@jest/expect": "30.0.3", - "@jest/test-result": "30.0.2", + "@jest/environment": "30.0.4", + "@jest/expect": "30.0.4", + "@jest/test-result": "30.0.4", "@jest/types": "30.0.1", "@types/node": "*", "chalk": "^4.1.2", @@ -6716,10 +6716,10 @@ "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", "jest-each": "30.0.2", - "jest-matcher-utils": "30.0.3", + "jest-matcher-utils": "30.0.4", "jest-message-util": "30.0.2", - "jest-runtime": "30.0.3", - "jest-snapshot": "30.0.3", + "jest-runtime": "30.0.4", + "jest-snapshot": "30.0.4", "jest-util": "30.0.2", "p-limit": "^3.1.0", "pretty-format": "30.0.2", @@ -6784,9 +6784,9 @@ } }, "node_modules/jest-circus/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -6800,9 +6800,9 @@ } }, "node_modules/jest-circus/node_modules/jest-diff": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.3.tgz", - "integrity": "sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", + "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", "dev": true, "license": "MIT", "dependencies": { @@ -6816,15 +6816,15 @@ } }, "node_modules/jest-circus/node_modules/jest-matcher-utils": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.3.tgz", - "integrity": "sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", + "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", - "jest-diff": "30.0.3", + "jest-diff": "30.0.4", "pretty-format": "30.0.2" }, "engines": { @@ -6886,19 +6886,19 @@ } }, "node_modules/jest-cli": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.3.tgz", - "integrity": "sha512-UWDSj0ayhumEAxpYRlqQLrssEi29kdQ+kddP94AuHhZknrE+mT0cR0J+zMHKFe9XPfX3dKQOc2TfWki3WhFTsA==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.4.tgz", + "integrity": "sha512-3dOrP3zqCWBkjoVG1zjYJpD9143N9GUCbwaF2pFF5brnIgRLHmKcCIw+83BvF1LxggfMWBA0gxkn6RuQVuRhIQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.3", - "@jest/test-result": "30.0.2", + "@jest/core": "30.0.4", + "@jest/test-result": "30.0.4", "@jest/types": "30.0.1", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.0.3", + "jest-config": "30.0.4", "jest-util": "30.0.2", "jest-validate": "30.0.2", "yargs": "^17.7.2" @@ -6958,9 +6958,9 @@ "license": "MIT" }, "node_modules/jest-cli/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -6992,29 +6992,29 @@ } }, "node_modules/jest-config": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.3.tgz", - "integrity": "sha512-j0L4oRCtJwNyZktXIqwzEiDVQXBbQ4dqXuLD/TZdn++hXIcIfZmjHgrViEy5s/+j4HvITmAXbexVZpQ/jnr0bg==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.4.tgz", + "integrity": "sha512-3dzbO6sh34thAGEjJIW0fgT0GA0EVlkski6ZzMcbW6dzhenylXAE/Mj2MI4HonroWbkKc6wU6bLVQ8dvBSZ9lA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.0.1", "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.0.2", + "@jest/test-sequencer": "30.0.4", "@jest/types": "30.0.1", - "babel-jest": "30.0.2", + "babel-jest": "30.0.4", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-circus": "30.0.3", + "jest-circus": "30.0.4", "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.2", + "jest-environment-node": "30.0.4", "jest-regex-util": "30.0.1", "jest-resolve": "30.0.2", - "jest-runner": "30.0.3", + "jest-runner": "30.0.4", "jest-util": "30.0.2", "jest-validate": "30.0.2", "micromatch": "^4.0.8", @@ -7106,9 +7106,9 @@ } }, "node_modules/jest-config/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -7299,9 +7299,9 @@ } }, "node_modules/jest-each/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -7348,14 +7348,14 @@ } }, "node_modules/jest-environment-node": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.2.tgz", - "integrity": "sha512-XsGtZ0H+a70RsxAQkKuIh0D3ZlASXdZdhpOSBq9WRPq6lhe0IoQHGW0w9ZUaPiZQ/CpkIdprvlfV1QcXcvIQLQ==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.4.tgz", + "integrity": "sha512-p+rLEzC2eThXqiNh9GHHTC0OW5Ca4ZfcURp7scPjYBcmgpR9HG6750716GuUipYf2AcThU3k20B31USuiaaIEg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.2", - "@jest/fake-timers": "30.0.2", + "@jest/environment": "30.0.4", + "@jest/fake-timers": "30.0.4", "@jest/types": "30.0.1", "@types/node": "*", "jest-mock": "30.0.2", @@ -7406,9 +7406,9 @@ "license": "MIT" }, "node_modules/jest-environment-node/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -7713,9 +7713,9 @@ "license": "MIT" }, "node_modules/jest-mock/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -7795,14 +7795,14 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.3.tgz", - "integrity": "sha512-FlL6u7LiHbF0Oe27k7DHYMq2T2aNpPhxnNo75F7lEtu4A6sSw+TKkNNUGNcVckdFoL0RCWREJsC1HsKDwKRZzQ==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.4.tgz", + "integrity": "sha512-EQBYow19B/hKr4gUTn+l8Z+YLlP2X0IoPyp0UydOtrcPbIOYzJ8LKdFd+yrbwztPQvmlBFUwGPPEzHH1bAvFAw==", "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", - "jest-snapshot": "30.0.3" + "jest-snapshot": "30.0.4" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -7848,9 +7848,9 @@ "license": "MIT" }, "node_modules/jest-resolve/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -7882,16 +7882,16 @@ } }, "node_modules/jest-runner": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.3.tgz", - "integrity": "sha512-CxYBzu9WStOBBXAKkLXGoUtNOWsiS1RRmUQb6SsdUdTcqVncOau7m8AJ4cW3Mz+YL1O9pOGPSYLyvl8HBdFmkQ==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.4.tgz", + "integrity": "sha512-mxY0vTAEsowJwvFJo5pVivbCpuu6dgdXRmt3v3MXjBxFly7/lTk3Td0PaMyGOeNQUFmSuGEsGYqhbn7PA9OekQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.2", - "@jest/environment": "30.0.2", - "@jest/test-result": "30.0.2", - "@jest/transform": "30.0.2", + "@jest/console": "30.0.4", + "@jest/environment": "30.0.4", + "@jest/test-result": "30.0.4", + "@jest/transform": "30.0.4", "@jest/types": "30.0.1", "@types/node": "*", "chalk": "^4.1.2", @@ -7899,14 +7899,14 @@ "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.2", + "jest-environment-node": "30.0.4", "jest-haste-map": "30.0.2", "jest-leak-detector": "30.0.2", "jest-message-util": "30.0.2", "jest-resolve": "30.0.2", - "jest-runtime": "30.0.3", + "jest-runtime": "30.0.4", "jest-util": "30.0.2", - "jest-watcher": "30.0.2", + "jest-watcher": "30.0.4", "jest-worker": "30.0.2", "p-limit": "^3.1.0", "source-map-support": "0.5.13" @@ -7968,9 +7968,9 @@ } }, "node_modules/jest-runner/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -8038,18 +8038,18 @@ } }, "node_modules/jest-runtime": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.3.tgz", - "integrity": "sha512-Xjosq0C48G9XEQOtmgrjXJwPaUPaq3sPJwHDRaiC+5wi4ZWxO6Lx6jNkizK/0JmTulVNuxP8iYwt77LGnfg3/w==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.4.tgz", + "integrity": "sha512-tUQrZ8+IzoZYIHoPDQEB4jZoPyzBjLjq7sk0KVyd5UPRjRDOsN7o6UlvaGF8ddpGsjznl9PW+KRgWqCNO+Hn7w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.2", - "@jest/fake-timers": "30.0.2", - "@jest/globals": "30.0.3", + "@jest/environment": "30.0.4", + "@jest/fake-timers": "30.0.4", + "@jest/globals": "30.0.4", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.0.2", - "@jest/transform": "30.0.2", + "@jest/test-result": "30.0.4", + "@jest/transform": "30.0.4", "@jest/types": "30.0.1", "@types/node": "*", "chalk": "^4.1.2", @@ -8062,7 +8062,7 @@ "jest-mock": "30.0.2", "jest-regex-util": "30.0.1", "jest-resolve": "30.0.2", - "jest-snapshot": "30.0.3", + "jest-snapshot": "30.0.4", "jest-util": "30.0.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" @@ -8134,9 +8134,9 @@ } }, "node_modules/jest-runtime/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -8251,9 +8251,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.3.tgz", - "integrity": "sha512-F05JCohd3OA1N9+5aEPXA6I0qOfZDGIx0zTq5Z4yMBg2i1p5ELfBusjYAWwTkC12c7dHcbyth4QAfQbS7cRjow==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.4.tgz", + "integrity": "sha512-S/8hmSkeUib8WRUq9pWEb5zMfsOjiYWDWzFzKnjX7eDyKKgimsu9hcmsUEg8a7dPAw8s/FacxsXquq71pDgPjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8262,17 +8262,17 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.0.3", + "@jest/expect-utils": "30.0.4", "@jest/get-type": "30.0.1", - "@jest/snapshot-utils": "30.0.1", - "@jest/transform": "30.0.2", + "@jest/snapshot-utils": "30.0.4", + "@jest/transform": "30.0.4", "@jest/types": "30.0.1", "babel-preset-current-node-syntax": "^1.1.0", "chalk": "^4.1.2", - "expect": "30.0.3", + "expect": "30.0.4", "graceful-fs": "^4.2.11", - "jest-diff": "30.0.3", - "jest-matcher-utils": "30.0.3", + "jest-diff": "30.0.4", + "jest-matcher-utils": "30.0.4", "jest-message-util": "30.0.2", "jest-util": "30.0.2", "pretty-format": "30.0.2", @@ -8284,9 +8284,9 @@ } }, "node_modules/jest-snapshot/node_modules/@jest/expect-utils": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.3.tgz", - "integrity": "sha512-SMtBvf2sfX2agcT0dA9pXwcUrKvOSDqBY4e4iRfT+Hya33XzV35YVg+98YQFErVGA/VR1Gto5Y2+A6G9LSQ3Yg==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz", + "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==", "dev": true, "license": "MIT", "dependencies": { @@ -8349,9 +8349,9 @@ } }, "node_modules/jest-snapshot/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -8365,15 +8365,15 @@ } }, "node_modules/jest-snapshot/node_modules/expect": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.3.tgz", - "integrity": "sha512-HXg6NvK35/cSYZCUKAtmlgCFyqKM4frEPbzrav5hRqb0GMz0E0lS5hfzYjSaiaE5ysnp/qI2aeZkeyeIAOeXzQ==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", + "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.0.3", + "@jest/expect-utils": "30.0.4", "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.3", + "jest-matcher-utils": "30.0.4", "jest-message-util": "30.0.2", "jest-mock": "30.0.2", "jest-util": "30.0.2" @@ -8383,9 +8383,9 @@ } }, "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.3.tgz", - "integrity": "sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", + "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", "dev": true, "license": "MIT", "dependencies": { @@ -8399,15 +8399,15 @@ } }, "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.3.tgz", - "integrity": "sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", + "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", - "jest-diff": "30.0.3", + "jest-diff": "30.0.4", "pretty-format": "30.0.2" }, "engines": { @@ -8596,13 +8596,13 @@ } }, "node_modules/jest-watcher": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.2.tgz", - "integrity": "sha512-vYO5+E7jJuF+XmONr6CrbXdlYrgvZqtkn6pdkgjt/dU64UAdc0v1cAVaAeWtAfUUMScxNmnUjKPUMdCpNVASwg==", + "version": "30.0.4", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.4.tgz", + "integrity": "sha512-YESbdHDs7aQOCSSKffG8jXqOKFqw4q4YqR+wHYpR5GWEQioGvL0BfbcjvKIvPEM0XGfsfJrka7jJz3Cc3gI4VQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.2", + "@jest/test-result": "30.0.4", "@jest/types": "30.0.1", "@types/node": "*", "ansi-escapes": "^4.3.2", @@ -8655,9 +8655,9 @@ "license": "MIT" }, "node_modules/jest-watcher/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -10231,7 +10231,8 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", diff --git a/package.json b/package.json index ff0b519..f4845dc 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.1", - "jest": "^30.0.3", + "jest": "^30.0.4", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", From be36461fba51cdf91727fbbd526514b22b3818ed Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 9 Jul 2025 16:00:06 +0200 Subject: [PATCH 43/80] Fix code formatting in the `dotnet-trx.tests.ts` file --- __tests__/dotnet-trx.test.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/__tests__/dotnet-trx.test.ts b/__tests__/dotnet-trx.test.ts index 6ec363e..a7aead6 100644 --- a/__tests__/dotnet-trx.test.ts +++ b/__tests__/dotnet-trx.test.ts @@ -39,10 +39,7 @@ describe('dotnet-trx tests', () => { expect(result.result).toBe('success') }) - it.each([ - ['dotnet-trx'], - ['dotnet-xunitv3'] - ])('matches %s report snapshot', async (reportName) => { + it.each([['dotnet-trx'], ['dotnet-xunitv3']])('matches %s report snapshot', async reportName => { const fixturePath = path.join(__dirname, 'fixtures', `${reportName}.trx`) const outputPath = path.join(__dirname, '__outputs__', `${reportName}.md`) const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) @@ -50,7 +47,11 @@ describe('dotnet-trx tests', () => { const opts: ParseOptions = { parseErrors: true, - trackedFiles: ['DotnetTests.Unit/Calculator.cs', 'DotnetTests.XUnitTests/CalculatorTests.cs', 'DotnetTests.XUnitV3Tests/FixtureTests.cs'] + trackedFiles: [ + 'DotnetTests.Unit/Calculator.cs', + 'DotnetTests.XUnitTests/CalculatorTests.cs', + 'DotnetTests.XUnitV3Tests/FixtureTests.cs' + ] //workDir: 'C:/Users/Michal/Workspace/dorny/test-check/reports/dotnet/' } From e8e27361afb5e7def8b7938009be0726e1bbbf16 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 9 Jul 2025 16:15:51 +0200 Subject: [PATCH 44/80] test-reporter release v2.1.1 --- CHANGELOG.md | 12 ++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d47e76e..8489364 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 2.1.1 +* Fix error when a TestMethod element does not have a className attribute in a trx file https://github.com/dorny/test-reporter/pull/623 +* Add stack trace from trx to summary https://github.com/dorny/test-reporter/pull/615 +* List only failed tests https://github.com/dorny/test-reporter/pull/606 +* Add type definitions to `github-utils.ts` https://github.com/dorny/test-reporter/pull/604 +* Avoid split on undefined https://github.com/dorny/test-reporter/pull/258 +* Return links to summary report https://github.com/dorny/test-reporter/pull/588 +* Add step summary short summary https://github.com/dorny/test-reporter/pull/589 +* Fix for empty TRX TestDefinitions https://github.com/dorny/test-reporter/pull/582 +* Increase step summary limit to 1MiB https://github.com/dorny/test-reporter/pull/581 +* Fix input description for list options https://github.com/dorny/test-reporter/pull/572 + ## 2.1.0 * Feature: Add summary title https://github.com/dorny/test-reporter/pull/568 * Feature: Add Golang test parser https://github.com/dorny/test-reporter/pull/571 diff --git a/package-lock.json b/package-lock.json index 3e84ce5..0f3760b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "test-reporter", - "version": "2.1.0", + "version": "2.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "test-reporter", - "version": "2.1.0", + "version": "2.1.1", "license": "MIT", "dependencies": { "@actions/core": "^1.11.1", diff --git a/package.json b/package.json index 9a3214e..fe0a087 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "test-reporter", - "version": "2.1.0", + "version": "2.1.1", "private": true, "description": "Presents test results from popular testing frameworks as Github check run", "main": "lib/main.js", From f686ce916a64e4f9f90b6cf5ae835e6c747ca69a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Jul 2025 23:43:00 +0000 Subject: [PATCH 45/80] Bump typescript from 5.8.3 to 5.9.2 Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.3 to 5.9.2. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.3...v5.9.2) --- updated-dependencies: - dependency-name: typescript dependency-version: 5.9.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72f87cf..d0bccec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "js-yaml": "^4.1.0", "prettier": "^3.6.2", "ts-jest": "^29.4.0", - "typescript": "^5.8.3" + "typescript": "^5.9.2" }, "engines": { "node": ">=20" @@ -10835,9 +10835,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index bb4720b..1d092d3 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "js-yaml": "^4.1.0", "prettier": "^3.6.2", "ts-jest": "^29.4.0", - "typescript": "^5.8.3" + "typescript": "^5.9.2" }, "jest-junit": { "suiteName": "jest tests", From 9642942c974ceae28304522ede4235325c6f47fa Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Fri, 12 Sep 2025 13:00:09 +0200 Subject: [PATCH 46/80] Upgrade `@types/jest` to match the `jest` v30 used as main dependency --- package-lock.json | 778 +++++++++------------------------------------- package.json | 2 +- 2 files changed, 155 insertions(+), 625 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0bccec..35d6f23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "devDependencies": { "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", - "@types/jest": "^29.5.14", + "@types/jest": "^30.0.0", "@types/node": "^20.19.2", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", @@ -1046,13 +1046,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/console/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -1066,22 +1059,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/console/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/console/node_modules/jest-message-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", @@ -1216,13 +1193,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/core/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -1236,22 +1206,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/core/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core/node_modules/jest-message-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", @@ -1364,13 +1318,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/environment/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/expect": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.4.tgz", @@ -1386,15 +1333,26 @@ } }, "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.1.2.tgz", + "integrity": "sha512-HXy1qT/bfdjCv7iC336ExbqqYtZvljrV8odNdso7dWK9bSeHtLlvwWWC3YSybSPL03Gg5rug6WLCZAZFH72m0A==", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" + "@jest/get-type": "30.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect/node_modules/@jest/expect-utils": { @@ -1442,13 +1400,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/expect/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/expect/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -1462,22 +1413,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/expect/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/expect/node_modules/expect": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", @@ -1632,13 +1567,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/fake-timers/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -1652,22 +1580,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/fake-timers/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/fake-timers/node_modules/jest-message-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", @@ -1780,13 +1692,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/globals/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/pattern": { "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", @@ -1876,13 +1781,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/reporters/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -1906,22 +1804,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@jest/reporters/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/reporters/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -2024,15 +1906,16 @@ } }, "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, + "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/snapshot-utils": { @@ -2083,13 +1966,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/snapshot-utils/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/source-map": { "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", @@ -2153,13 +2029,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/test-result/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/test-sequencer": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.4.tgz", @@ -2235,29 +2104,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/transform/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/transform/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -2277,20 +2123,22 @@ } }, "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", + "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jridgewell/gen-mapping": { @@ -2596,10 +2444,11 @@ "license": "MIT" }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", @@ -2750,14 +2599,14 @@ } }, "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "expect": "^30.0.0", + "pretty-format": "^30.0.0" } }, "node_modules/@types/json5": { @@ -4011,9 +3860,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -4021,6 +3870,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -4323,15 +4173,6 @@ "node": ">=8" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5254,19 +5095,46 @@ } }, "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.1.2.tgz", + "integrity": "sha512-xvHszRavo28ejws8FpemjhwswGj4w/BetHIL8cU49u4sGyXDw2+p3YbeDbj6xzlxi6kWTjIRSTJ+9sNXPnF0Zg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "@jest/expect-utils": "30.1.2", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect/node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect/node_modules/jest-mock": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", + "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@types/node": "*", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/fast-deep-equal": { @@ -6658,29 +6526,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-changed-files/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-changed-files/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-changed-files/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -6763,13 +6608,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-circus/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -6783,22 +6621,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-circus/node_modules/jest-diff": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", @@ -6950,29 +6772,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-cli/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-cli/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-cli/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -7075,13 +6874,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-config/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -7105,22 +6897,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/jest-config/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-config/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -7202,18 +6978,29 @@ } }, "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.2.tgz", + "integrity": "sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-diff/node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { @@ -7278,13 +7065,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-each/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -7298,22 +7078,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-each/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -7398,29 +7162,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-environment-node/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-node/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-environment-node/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -7439,15 +7180,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/jest-haste-map": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.2.tgz", @@ -7505,29 +7237,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-haste-map/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-haste-map/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-haste-map/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -7588,13 +7297,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-leak-detector/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-leak-detector/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -7624,38 +7326,50 @@ } }, "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz", + "integrity": "sha512-7ai16hy4rSbDjvPTuUhuV8nyPBd6EX34HkBsBcBX2lENCuAQ0qKCPb/+lt8OSWUa9WWmGYLy41PrEzkwRwoGZQ==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.1.2", + "pretty-format": "30.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.1.0.tgz", + "integrity": "sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.0.5", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.0.5", "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "stack-utils": "^2.0.6" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-mock": { @@ -7705,29 +7419,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-mock/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-mock/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-mock/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -7840,29 +7531,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-resolve/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-resolve/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -7947,13 +7615,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runner/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -7967,22 +7628,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-runner/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runner/node_modules/jest-message-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", @@ -8103,13 +7748,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runtime/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -8133,22 +7771,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/jest-runtime/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runtime/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -8328,13 +7950,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-snapshot/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -8348,22 +7963,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot/node_modules/expect": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", @@ -8469,32 +8068,21 @@ } }, "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", + "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/types": "30.0.5", "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-validate": { @@ -8547,13 +8135,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -8647,29 +8228,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-watcher/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-watcher/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -8737,29 +8295,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-worker/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/jest-util": { "version": "30.0.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", @@ -8826,13 +8361,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest/node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true, - "license": "MIT" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -9730,17 +9258,18 @@ } }, "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", + "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -9748,6 +9277,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 1d092d3..df7269b 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "devDependencies": { "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", - "@types/jest": "^29.5.14", + "@types/jest": "^30.0.0", "@types/node": "^20.19.2", "@types/picomatch": "^2.3.4", "@types/xml2js": "^0.4.14", From bd9e36bf0c21bb7ce5f40cd4a1541345d37399a3 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Fri, 12 Sep 2025 13:00:45 +0200 Subject: [PATCH 47/80] Upgrade `@types/picomatch` to match the `picomatch` v4 used as main dependency --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35d6f23..2f4db3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@types/adm-zip": "^0.5.7", "@types/jest": "^30.0.0", "@types/node": "^20.19.2", - "@types/picomatch": "^2.3.4", + "@types/picomatch": "^4.0.2", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", @@ -2633,9 +2633,9 @@ } }, "node_modules/@types/picomatch": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.4.tgz", - "integrity": "sha512-0so8lU8O5zatZS/2Fi4zrwks+vZv7e0dygrgEZXljODXBig97l4cPQD+9LabXfGJOWwoRkTVz6Q4edZvD12UOA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index df7269b..706fde9 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@types/adm-zip": "^0.5.7", "@types/jest": "^30.0.0", "@types/node": "^20.19.2", - "@types/picomatch": "^2.3.4", + "@types/picomatch": "^4.0.2", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", From 661decd3af3261ab2a793f40f27f7dd263223d17 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Fri, 12 Sep 2025 13:03:19 +0200 Subject: [PATCH 48/80] Upgrade `jest` to v30.1.3 https://github.com/jestjs/jest/releases/tag/v30.1.0 --- .../__snapshots__/dart-json.test.ts.snap | 2 +- .../__snapshots__/dotnet-nunit.test.ts.snap | 2 +- .../__snapshots__/dotnet-trx.test.ts.snap | 2 +- .../__snapshots__/golang-json.test.ts.snap | 2 +- .../__snapshots__/java-junit.test.ts.snap | 2 +- .../__snapshots__/jest-junit.test.ts.snap | 2 +- .../__snapshots__/mocha-json.test.ts.snap | 2 +- .../__snapshots__/rspec-json.test.ts.snap | 2 +- .../__snapshots__/swift-xunit.test.ts.snap | 2 +- package-lock.json | 2501 ++--------------- package.json | 2 +- 11 files changed, 275 insertions(+), 2246 deletions(-) diff --git a/__tests__/__snapshots__/dart-json.test.ts.snap b/__tests__/__snapshots__/dart-json.test.ts.snap index a499822..88a7349 100644 --- a/__tests__/__snapshots__/dart-json.test.ts.snap +++ b/__tests__/__snapshots__/dart-json.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`dart-json tests matches report snapshot 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/dotnet-nunit.test.ts.snap b/__tests__/__snapshots__/dotnet-nunit.test.ts.snap index 60d55f2..529f702 100644 --- a/__tests__/__snapshots__/dotnet-nunit.test.ts.snap +++ b/__tests__/__snapshots__/dotnet-nunit.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`dotnet-nunit tests report from ./reports/dotnet test results matches snapshot 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/dotnet-trx.test.ts.snap b/__tests__/__snapshots__/dotnet-trx.test.ts.snap index f432162..b9d272d 100644 --- a/__tests__/__snapshots__/dotnet-trx.test.ts.snap +++ b/__tests__/__snapshots__/dotnet-trx.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`dotnet-trx tests matches dotnet-trx report snapshot 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/golang-json.test.ts.snap b/__tests__/__snapshots__/golang-json.test.ts.snap index 75c6de1..bd28d4a 100644 --- a/__tests__/__snapshots__/golang-json.test.ts.snap +++ b/__tests__/__snapshots__/golang-json.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`golang-json tests report from ./reports/dotnet test results matches snapshot 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/java-junit.test.ts.snap b/__tests__/__snapshots__/java-junit.test.ts.snap index 341b092..38daca9 100644 --- a/__tests__/__snapshots__/java-junit.test.ts.snap +++ b/__tests__/__snapshots__/java-junit.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`java-junit tests report from apache/pulsar single suite test results matches snapshot 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/jest-junit.test.ts.snap b/__tests__/__snapshots__/jest-junit.test.ts.snap index eb20dfe..eca0092 100644 --- a/__tests__/__snapshots__/jest-junit.test.ts.snap +++ b/__tests__/__snapshots__/jest-junit.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`jest-junit tests parsing ESLint report without timing information works - PR #134 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/mocha-json.test.ts.snap b/__tests__/__snapshots__/mocha-json.test.ts.snap index 7038239..4a1448c 100644 --- a/__tests__/__snapshots__/mocha-json.test.ts.snap +++ b/__tests__/__snapshots__/mocha-json.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`mocha-json tests report from ./reports/mocha-json test results matches snapshot 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/rspec-json.test.ts.snap b/__tests__/__snapshots__/rspec-json.test.ts.snap index cc14bfb..51c1943 100644 --- a/__tests__/__snapshots__/rspec-json.test.ts.snap +++ b/__tests__/__snapshots__/rspec-json.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`rspec-json tests report from ./reports/rspec-json test results matches snapshot 1`] = ` TestRunResult { diff --git a/__tests__/__snapshots__/swift-xunit.test.ts.snap b/__tests__/__snapshots__/swift-xunit.test.ts.snap index ae34deb..bddc6ea 100644 --- a/__tests__/__snapshots__/swift-xunit.test.ts.snap +++ b/__tests__/__snapshots__/swift-xunit.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`swift-xunit tests report from swift test results matches snapshot 1`] = ` TestRunResult { diff --git a/package-lock.json b/package-lock.json index 2f4db3c..05b19e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.1", - "jest": "^30.0.4", + "jest": "^30.1.3", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", @@ -803,9 +803,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -816,9 +816,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -847,9 +847,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -997,156 +997,57 @@ } }, "node_modules/@jest/console": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.4.tgz", - "integrity": "sha512-tMLCDvBJBwPqMm4OAiuKm2uF5y5Qe26KgcMn+nrDSWpEW+eeFmqA0iO4zJfL16GP7gE3bUUQ3hIuUJ22AqVRnw==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.1.2.tgz", + "integrity": "sha512-BGMAxj8VRmoD0MoA/jo9alMXSRoqW8KPeqOfEo1ncxnRLatTBCpRoOwlwlEMdudp68Q6WSGwYrrLtTGOh8fLzw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.1", + "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.0.2", - "jest-util": "30.0.2", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", "slash": "^3.0.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/console/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/console/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/console/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/console/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/core": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.4.tgz", - "integrity": "sha512-MWScSO9GuU5/HoWjpXAOBs6F/iobvK1XlioelgOM9St7S0Z5WTI9kjCQLPeo4eQRRYusyLW25/J7J5lbFkrYXw==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.1.3.tgz", + "integrity": "sha512-LIQz7NEDDO1+eyOA2ZmkiAyYvZuo6s1UxD/e2IHldR6D7UYogVq3arTmli07MkENLq6/3JEQjp0mA8rrHHJ8KQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.4", + "@jest/console": "30.1.2", "@jest/pattern": "30.0.1", - "@jest/reporters": "30.0.4", - "@jest/test-result": "30.0.4", - "@jest/transform": "30.0.4", - "@jest/types": "30.0.1", + "@jest/reporters": "30.1.3", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-changed-files": "30.0.2", - "jest-config": "30.0.4", - "jest-haste-map": "30.0.2", - "jest-message-util": "30.0.2", + "jest-changed-files": "30.0.5", + "jest-config": "30.1.3", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.2", - "jest-resolve-dependencies": "30.0.4", - "jest-runner": "30.0.4", - "jest-runtime": "30.0.4", - "jest-snapshot": "30.0.4", - "jest-util": "30.0.2", - "jest-validate": "30.0.2", - "jest-watcher": "30.0.4", + "jest-resolve": "30.1.3", + "jest-resolve-dependencies": "30.1.3", + "jest-runner": "30.1.3", + "jest-runtime": "30.1.3", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", + "jest-watcher": "30.1.3", "micromatch": "^4.0.8", - "pretty-format": "30.0.2", + "pretty-format": "30.0.5", "slash": "^3.0.0" }, "engines": { @@ -1161,105 +1062,6 @@ } } }, - "node_modules/@jest/core/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/core/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/diff-sequences": { "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", @@ -1271,62 +1073,30 @@ } }, "node_modules/@jest/environment": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.4.tgz", - "integrity": "sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.1.2.tgz", + "integrity": "sha512-N8t1Ytw4/mr9uN28OnVf0SYE2dGhaIxOVYcwsf9IInBKjvofAjbFRvedvBBlyTYk2knbJTiEjEJ2PyyDIBnd9w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.0.4", - "@jest/types": "30.0.1", + "@jest/fake-timers": "30.1.2", + "@jest/types": "30.0.5", "@types/node": "*", - "jest-mock": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "jest-mock": "30.0.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.4.tgz", - "integrity": "sha512-Z/DL7t67LBHSX4UzDyeYKqOxE/n7lbrrgEwWM3dGiH5Dgn35nk+YtgzKudmfIrBI8DRRrKYY5BCo3317HZV1Fw==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.1.2.tgz", + "integrity": "sha512-tyaIExOwQRCxPCGNC05lIjWJztDwk2gPDNSDGg1zitXJJ8dC3++G/CRjE5mb2wQsf89+lsgAgqxxNpDLiCViTA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.0.4", - "jest-snapshot": "30.0.4" + "expect": "30.1.2", + "jest-snapshot": "30.1.2" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1345,7 +1115,25 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/expect-utils/node_modules/@jest/get-type": { + "node_modules/@jest/fake-timers": { + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.1.2.tgz", + "integrity": "sha512-Beljfv9AYkr9K+ETX9tvV61rJTY706BhBUtiaepQHeEGfe0DbpvUA5Z3fomwc5Xkhns6NWrcFDZn+72fLieUnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.5", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", + "jest-util": "30.0.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { "version": "30.1.0", "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", @@ -1355,338 +1143,17 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/expect/node_modules/@jest/expect-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz", - "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/expect/node_modules/expect": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", - "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.0.4", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.4", - "jest-message-util": "30.0.2", - "jest-mock": "30.0.2", - "jest-util": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-diff": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", - "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-matcher-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", - "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "jest-diff": "30.0.4", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.4.tgz", - "integrity": "sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.0.2", - "jest-mock": "30.0.2", - "jest-util": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/fake-timers/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/globals": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.4.tgz", - "integrity": "sha512-avyZuxEHF2EUhFF6NEWVdxkRRV6iXXcIES66DLhuLlU7lXhtFG/ySq/a8SRZmEJSsLkNAFX6z6mm8KWyXe9OEA==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.1.2.tgz", + "integrity": "sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.4", - "@jest/expect": "30.0.4", - "@jest/types": "30.0.1", - "jest-mock": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@jest/environment": "30.1.2", + "@jest/expect": "30.1.2", + "@jest/types": "30.0.5", + "jest-mock": "30.0.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1707,17 +1174,17 @@ } }, "node_modules/@jest/reporters": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.4.tgz", - "integrity": "sha512-6ycNmP0JSJEEys1FbIzHtjl9BP0tOZ/KN6iMeAKrdvGmUsa1qfRdlQRUDKJ4P84hJ3xHw1yTqJt4fvPNHhyE+g==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.1.3.tgz", + "integrity": "sha512-VWEQmJWfXMOrzdFEOyGjUEOuVXllgZsoPtEHZzfdNz18RmzJ5nlR6kp8hDdY8dDS1yGOXAY7DHT+AOHIPSBV0w==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.0.4", - "@jest/test-result": "30.0.4", - "@jest/transform": "30.0.4", - "@jest/types": "30.0.1", + "@jest/console": "30.1.2", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", @@ -1730,9 +1197,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.0.2", - "jest-util": "30.0.2", - "jest-worker": "30.0.2", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "jest-worker": "30.1.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -1749,51 +1216,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@jest/reporters/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -1825,45 +1247,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/reporters/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/reporters/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -1890,21 +1273,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/@jest/reporters/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/schemas": { "version": "30.0.5", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", @@ -1919,13 +1287,13 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.4.tgz", - "integrity": "sha512-BEpX8M/Y5lG7MI3fmiO+xCnacOrVsnbqVrcDZIT8aSGkKV1w2WwvRQxSWw5SIS8ozg7+h8tSj5EO1Riqqxcdag==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.1.2.tgz", + "integrity": "sha512-vHoMTpimcPSR7OxS2S0V1Cpg8eKDRxucHjoWl5u4RQcnxqQrV3avETiFpl8etn4dqxEGarBeHbIBety/f8mLXw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.1", + "@jest/types": "30.0.5", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" @@ -1934,38 +1302,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/snapshot-utils/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/snapshot-utils/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/source-map": { "version": "30.0.1", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", @@ -1982,14 +1318,14 @@ } }, "node_modules/@jest/test-result": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.4.tgz", - "integrity": "sha512-Mfpv8kjyKTHqsuu9YugB6z1gcdB3TSSOaKlehtVaiNlClMkEHY+5ZqCY2CrEE3ntpBMlstX/ShDAf84HKWsyIw==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.1.3.tgz", + "integrity": "sha512-P9IV8T24D43cNRANPPokn7tZh0FAFnYS2HIfi5vK18CjRkTDR9Y3e1BoEcAJnl4ghZZF4Ecda4M/k41QkvurEQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.4", - "@jest/types": "30.0.1", + "@jest/console": "30.1.2", + "@jest/types": "30.0.5", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" }, @@ -1997,48 +1333,16 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/test-result/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/test-sequencer": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.4.tgz", - "integrity": "sha512-bj6ePmqi4uxAE8EHE0Slmk5uBYd9Vd/PcVt06CsBxzH4bbA8nGsI1YbXl/NH+eii4XRtyrRx+Cikub0x8H4vDg==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.1.3.tgz", + "integrity": "sha512-82J+hzC0qeQIiiZDThh+YUadvshdBswi5nuyXlEmXzrhw5ZQSRHeQ5LpVMD/xc8B3wPePvs6VMzHnntxL+4E3w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.4", + "@jest/test-result": "30.1.3", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.2", + "jest-haste-map": "30.1.0", "slash": "^3.0.0" }, "engines": { @@ -2046,23 +1350,23 @@ } }, "node_modules/@jest/transform": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.4.tgz", - "integrity": "sha512-atvy4hRph/UxdCIBp+UB2jhEA/jJiUeGZ7QPgBi9jUUKNgi3WEoMXGNG7zbbELG2+88PMabUNCDchmqgJy3ELg==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.1.2.tgz", + "integrity": "sha512-UYYFGifSgfjujf1Cbd3iU/IQoSd6uwsj8XHj5DSDf5ERDcWMdJOPTkHWXj4U+Z/uMagyOQZ6Vne8C4nRIrCxqA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/types": "30.0.1", + "@jest/types": "30.0.5", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.0", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.2", + "jest-haste-map": "30.1.0", "jest-regex-util": "30.0.1", - "jest-util": "30.0.2", + "jest-util": "30.0.5", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", @@ -2072,56 +1376,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@jest/transform/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/transform/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/types": { "version": "30.0.5", "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", @@ -3512,13 +2766,13 @@ } }, "node_modules/babel-jest": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.4.tgz", - "integrity": "sha512-UjG2j7sAOqsp2Xua1mS/e+ekddkSu3wpf4nZUSvXNHuVWdaOUXQ77+uyjJLDE9i0atm5x4kds8K9yb5lRsRtcA==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.1.2.tgz", + "integrity": "sha512-IQCus1rt9kaSh7PQxLYRY5NmkNrNlU2TpabzwV7T2jljnpdHOcmnYYv8QmE04Li4S3a2Lj8/yXyET5pBarPr6g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.0.4", + "@jest/transform": "30.1.2", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.0", "babel-preset-jest": "30.0.1", @@ -4075,9 +3329,9 @@ } }, "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5112,31 +4366,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/expect/node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/expect/node_modules/jest-mock": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", - "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.5", - "@types/node": "*", - "jest-util": "30.0.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6404,9 +5633,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6453,16 +5682,16 @@ } }, "node_modules/jest": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.4.tgz", - "integrity": "sha512-9QE0RS4WwTj/TtTC4h/eFVmFAhGNVerSB9XpJh8sqaXlP73ILcPcZ7JWjjEtJJe2m8QyBLKKfPQuK+3F+Xij/g==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.1.3.tgz", + "integrity": "sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.4", - "@jest/types": "30.0.1", + "@jest/core": "30.1.3", + "@jest/types": "30.0.5", "import-local": "^3.2.0", - "jest-cli": "30.0.4" + "jest-cli": "30.1.3" }, "bin": { "jest": "bin/jest.js" @@ -6480,94 +5709,44 @@ } }, "node_modules/jest-changed-files": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.2.tgz", - "integrity": "sha512-Ius/iRST9FKfJI+I+kpiDh8JuUlAISnRszF9ixZDIqJF17FckH5sOzKC8a0wd0+D+8em5ADRHA5V5MnfeDk2WA==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", + "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", - "jest-util": "30.0.2", + "jest-util": "30.0.5", "p-limit": "^3.1.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-changed-files/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-circus": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.4.tgz", - "integrity": "sha512-o6UNVfbXbmzjYgmVPtSQrr5xFZCtkDZGdTlptYvGFSN80RuOOlTe73djvMrs+QAuSERZWcHBNIOMH+OEqvjWuw==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.1.3.tgz", + "integrity": "sha512-Yf3dnhRON2GJT4RYzM89t/EXIWNxKTpWTL9BfF3+geFetWP4XSvJjiU1vrWplOiUkmq8cHLiwuhz+XuUp9DscA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.4", - "@jest/expect": "30.0.4", - "@jest/test-result": "30.0.4", - "@jest/types": "30.0.1", + "@jest/environment": "30.1.2", + "@jest/expect": "30.1.2", + "@jest/test-result": "30.1.3", + "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.0.2", - "jest-matcher-utils": "30.0.4", - "jest-message-util": "30.0.2", - "jest-runtime": "30.0.4", - "jest-snapshot": "30.0.4", - "jest-util": "30.0.2", + "jest-each": "30.1.0", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-runtime": "30.1.3", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", "p-limit": "^3.1.0", - "pretty-format": "30.0.2", + "pretty-format": "30.0.5", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" @@ -6576,153 +5755,22 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-circus/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/jest-diff": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", - "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-matcher-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", - "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "jest-diff": "30.0.4", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-cli": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.4.tgz", - "integrity": "sha512-3dOrP3zqCWBkjoVG1zjYJpD9143N9GUCbwaF2pFF5brnIgRLHmKcCIw+83BvF1LxggfMWBA0gxkn6RuQVuRhIQ==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.1.3.tgz", + "integrity": "sha512-G8E2Ol3OKch1DEeIBl41NP7OiC6LBhfg25Btv+idcusmoUSpqUkbrneMqbW9lVpI/rCKb/uETidb7DNteheuAQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.0.4", - "@jest/test-result": "30.0.4", - "@jest/types": "30.0.1", + "@jest/core": "30.1.3", + "@jest/test-result": "30.1.3", + "@jest/types": "30.0.5", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.0.4", - "jest-util": "30.0.2", - "jest-validate": "30.0.2", + "jest-config": "30.1.3", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", "yargs": "^17.7.2" }, "bin": { @@ -6740,85 +5788,35 @@ } } }, - "node_modules/jest-cli/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-cli/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-config": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.4.tgz", - "integrity": "sha512-3dzbO6sh34thAGEjJIW0fgT0GA0EVlkski6ZzMcbW6dzhenylXAE/Mj2MI4HonroWbkKc6wU6bLVQ8dvBSZ9lA==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.1.3.tgz", + "integrity": "sha512-M/f7gqdQEPgZNA181Myz+GXCe8jXcJsGjCMXUzRj22FIXsZOyHNte84e0exntOvdPaeh9tA0w+B8qlP2fAezfw==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/get-type": "30.0.1", + "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.0.4", - "@jest/types": "30.0.1", - "babel-jest": "30.0.4", + "@jest/test-sequencer": "30.1.3", + "@jest/types": "30.0.5", + "babel-jest": "30.1.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-circus": "30.0.4", + "jest-circus": "30.1.3", "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.4", + "jest-environment-node": "30.1.2", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.2", - "jest-runner": "30.0.4", - "jest-util": "30.0.2", - "jest-validate": "30.0.2", + "jest-resolve": "30.1.3", + "jest-runner": "30.1.3", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "30.0.2", + "pretty-format": "30.0.5", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -6842,51 +5840,6 @@ } } }, - "node_modules/jest-config/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-config/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -6918,24 +5871,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-config/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-config/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -6962,21 +5897,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-diff": { "version": "30.1.2", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.2.tgz", @@ -6993,16 +5913,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-diff/node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-docblock": { "version": "30.0.1", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", @@ -7017,184 +5927,56 @@ } }, "node_modules/jest-each": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.2.tgz", - "integrity": "sha512-ZFRsTpe5FUWFQ9cWTMguCaiA6kkW5whccPy9JjD1ezxh+mJeqmz8naL8Fl/oSbNJv3rgB0x87WBIkA5CObIUZQ==", + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.1.0.tgz", + "integrity": "sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.1", + "@jest/get-type": "30.1.0", + "@jest/types": "30.0.5", "chalk": "^4.1.2", - "jest-util": "30.0.2", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-each/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-each/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "jest-util": "30.0.5", + "pretty-format": "30.0.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.4.tgz", - "integrity": "sha512-p+rLEzC2eThXqiNh9GHHTC0OW5Ca4ZfcURp7scPjYBcmgpR9HG6750716GuUipYf2AcThU3k20B31USuiaaIEg==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.1.2.tgz", + "integrity": "sha512-w8qBiXtqGWJ9xpJIA98M0EIoq079GOQRQUyse5qg1plShUCQ0Ek1VTTcczqKrn3f24TFAgFtT+4q3aOXvjbsuA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.4", - "@jest/fake-timers": "30.0.4", - "@jest/types": "30.0.1", + "@jest/environment": "30.1.2", + "@jest/fake-timers": "30.1.2", + "@jest/types": "30.0.5", "@types/node": "*", - "jest-mock": "30.0.2", - "jest-util": "30.0.2", - "jest-validate": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-environment-node/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "jest-mock": "30.0.5", + "jest-util": "30.0.5", + "jest-validate": "30.1.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.2.tgz", - "integrity": "sha512-telJBKpNLeCb4MaX+I5k496556Y2FiKR/QLZc0+MGBYl4k3OO0472drlV2LUe7c1Glng5HuAu+5GLYp//GpdOQ==", + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.1.0.tgz", + "integrity": "sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.1", + "@jest/types": "30.0.5", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", - "jest-util": "30.0.2", - "jest-worker": "30.0.2", + "jest-util": "30.0.5", + "jest-worker": "30.1.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, @@ -7205,56 +5987,6 @@ "fsevents": "^2.3.3" } }, - "node_modules/jest-haste-map/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-junit": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", @@ -7271,55 +6003,14 @@ } }, "node_modules/jest-leak-detector": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.2.tgz", - "integrity": "sha512-U66sRrAYdALq+2qtKffBLDWsQ/XoNNs2Lcr83sc9lvE/hEpNafJlq2lXCPUBMNqamMECNxSIekLfe69qg4KMIQ==", + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.1.0.tgz", + "integrity": "sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "@jest/get-type": "30.1.0", + "pretty-format": "30.0.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -7341,16 +6032,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-message-util": { "version": "30.1.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.1.0.tgz", @@ -7373,65 +6054,15 @@ } }, "node_modules/jest-mock": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz", - "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", + "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.1", + "@jest/types": "30.0.5", "@types/node": "*", - "jest-util": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "jest-util": "30.0.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -7466,18 +6097,18 @@ } }, "node_modules/jest-resolve": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.2.tgz", - "integrity": "sha512-q/XT0XQvRemykZsvRopbG6FQUT6/ra+XV6rPijyjT6D0msOyCvR2A5PlWZLd+fH0U8XWKZfDiAgrUNDNX2BkCw==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.1.3.tgz", + "integrity": "sha512-DI4PtTqzw9GwELFS41sdMK32Ajp3XZQ8iygeDMWkxlRhm7uUTOFSZFVZABFuxr0jvspn8MAYy54NxZCsuCTSOw==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.2", + "jest-haste-map": "30.1.0", "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.0.2", - "jest-validate": "30.0.2", + "jest-util": "30.0.5", + "jest-validate": "30.1.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" }, @@ -7486,96 +6117,46 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.4.tgz", - "integrity": "sha512-EQBYow19B/hKr4gUTn+l8Z+YLlP2X0IoPyp0UydOtrcPbIOYzJ8LKdFd+yrbwztPQvmlBFUwGPPEzHH1bAvFAw==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.3.tgz", + "integrity": "sha512-DNfq3WGmuRyHRHfEet+Zm3QOmVFtIarUOQHHryKPc0YL9ROfgWZxl4+aZq/VAzok2SS3gZdniP+dO4zgo59hBg==", "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", - "jest-snapshot": "30.0.4" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" + "jest-snapshot": "30.1.2" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.4.tgz", - "integrity": "sha512-mxY0vTAEsowJwvFJo5pVivbCpuu6dgdXRmt3v3MXjBxFly7/lTk3Td0PaMyGOeNQUFmSuGEsGYqhbn7PA9OekQ==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.1.3.tgz", + "integrity": "sha512-dd1ORcxQraW44Uz029TtXj85W11yvLpDuIzNOlofrC8GN+SgDlgY4BvyxJiVeuabA1t6idjNbX59jLd2oplOGQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.0.4", - "@jest/environment": "30.0.4", - "@jest/test-result": "30.0.4", - "@jest/transform": "30.0.4", - "@jest/types": "30.0.1", + "@jest/console": "30.1.2", + "@jest/environment": "30.1.2", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", "jest-docblock": "30.0.1", - "jest-environment-node": "30.0.4", - "jest-haste-map": "30.0.2", - "jest-leak-detector": "30.0.2", - "jest-message-util": "30.0.2", - "jest-resolve": "30.0.2", - "jest-runtime": "30.0.4", - "jest-util": "30.0.2", - "jest-watcher": "30.0.4", - "jest-worker": "30.0.2", + "jest-environment-node": "30.1.2", + "jest-haste-map": "30.1.0", + "jest-leak-detector": "30.1.0", + "jest-message-util": "30.1.0", + "jest-resolve": "30.1.3", + "jest-runtime": "30.1.3", + "jest-util": "30.0.5", + "jest-watcher": "30.1.3", + "jest-worker": "30.1.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -7583,132 +6164,33 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runner/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runner/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runner/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-runtime": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.4.tgz", - "integrity": "sha512-tUQrZ8+IzoZYIHoPDQEB4jZoPyzBjLjq7sk0KVyd5UPRjRDOsN7o6UlvaGF8ddpGsjznl9PW+KRgWqCNO+Hn7w==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.1.3.tgz", + "integrity": "sha512-WS8xgjuNSphdIGnleQcJ3AKE4tBKOVP+tKhCD0u+Tb2sBmsU8DxfbBpZX7//+XOz81zVs4eFpJQwBNji2Y07DA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.0.4", - "@jest/fake-timers": "30.0.4", - "@jest/globals": "30.0.4", + "@jest/environment": "30.1.2", + "@jest/fake-timers": "30.1.2", + "@jest/globals": "30.1.2", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.0.4", - "@jest/transform": "30.0.4", - "@jest/types": "30.0.1", + "@jest/test-result": "30.1.3", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.0.2", - "jest-message-util": "30.0.2", - "jest-mock": "30.0.2", + "jest-haste-map": "30.1.0", + "jest-message-util": "30.1.0", + "jest-mock": "30.0.5", "jest-regex-util": "30.0.1", - "jest-resolve": "30.0.2", - "jest-snapshot": "30.0.4", - "jest-util": "30.0.2", + "jest-resolve": "30.1.3", + "jest-snapshot": "30.1.2", + "jest-util": "30.0.5", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -7716,51 +6198,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runtime/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-runtime/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -7792,45 +6229,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-runtime/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runtime/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-runtime/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -7857,25 +6255,10 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/jest-runtime/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-snapshot": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.4.tgz", - "integrity": "sha512-S/8hmSkeUib8WRUq9pWEb5zMfsOjiYWDWzFzKnjX7eDyKKgimsu9hcmsUEg8a7dPAw8s/FacxsXquq71pDgPjQ==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.1.2.tgz", + "integrity": "sha512-4q4+6+1c8B6Cy5pGgFvjDy/Pa6VYRiGu0yQafKkJ9u6wQx4G5PqI2QR6nxTl43yy7IWsINwz6oT4o6tD12a8Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -7884,20 +6267,20 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.0.4", - "@jest/get-type": "30.0.1", - "@jest/snapshot-utils": "30.0.4", - "@jest/transform": "30.0.4", - "@jest/types": "30.0.1", + "@jest/expect-utils": "30.1.2", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.1.2", + "@jest/transform": "30.1.2", + "@jest/types": "30.0.5", "babel-preset-current-node-syntax": "^1.1.0", "chalk": "^4.1.2", - "expect": "30.0.4", + "expect": "30.1.2", "graceful-fs": "^4.2.11", - "jest-diff": "30.0.4", - "jest-matcher-utils": "30.0.4", - "jest-message-util": "30.0.2", - "jest-util": "30.0.2", - "pretty-format": "30.0.2", + "jest-diff": "30.1.2", + "jest-matcher-utils": "30.1.2", + "jest-message-util": "30.1.0", + "jest-util": "30.0.5", + "pretty-format": "30.0.5", "semver": "^7.7.2", "synckit": "^0.11.8" }, @@ -7905,168 +6288,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-snapshot/node_modules/@jest/expect-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz", - "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/expect": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", - "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.0.4", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.4", - "jest-message-util": "30.0.2", - "jest-mock": "30.0.2", - "jest-util": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", - "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", - "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "jest-diff": "30.0.4", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-util": { "version": "30.0.5", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", @@ -8086,68 +6307,23 @@ } }, "node_modules/jest-validate": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.2.tgz", - "integrity": "sha512-noOvul+SFER4RIvNAwGn6nmV2fXqBq67j+hKGHKGFCmK4ks/Iy1FSrqQNBLGKlu4ZZIRL6Kg1U72N1nxuRCrGQ==", + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.1.0.tgz", + "integrity": "sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.0.1", - "@jest/types": "30.0.1", + "@jest/get-type": "30.1.0", + "@jest/types": "30.0.5", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "30.0.2" + "pretty-format": "30.0.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-validate/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -8161,101 +6337,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-watcher": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.4.tgz", - "integrity": "sha512-YESbdHDs7aQOCSSKffG8jXqOKFqw4q4YqR+wHYpR5GWEQioGvL0BfbcjvKIvPEM0XGfsfJrka7jJz3Cc3gI4VQ==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.1.3.tgz", + "integrity": "sha512-6jQUZCP1BTL2gvG9E4YF06Ytq4yMb4If6YoQGRR6PpjtqOXSP3sKe2kqwB6SQ+H9DezOfZaSLnmka1NtGm3fCQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.0.4", - "@jest/types": "30.0.1", + "@jest/test-result": "30.1.3", + "@jest/types": "30.0.5", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "30.0.2", + "jest-util": "30.0.5", "string-length": "^4.0.2" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-watcher/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-watcher/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-worker": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.2.tgz", - "integrity": "sha512-RN1eQmx7qSLFA+o9pfJKlqViwL5wt+OL3Vff/A+/cPsmuw7NPwfgl33AP+/agRmHzPOFgXviRycR9kYwlcRQXg==", + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.1.0.tgz", + "integrity": "sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.0.2", + "jest-util": "30.0.5", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" }, @@ -8263,56 +6374,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-worker/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker/node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -8329,38 +6390,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest/node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest/node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", diff --git a/package.json b/package.json index 706fde9..7baf2ae 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.1", - "jest": "^30.0.4", + "jest": "^30.1.3", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", From d171d89cd46aa86c0cf4047c62278c28eed12125 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Fri, 12 Sep 2025 13:07:41 +0200 Subject: [PATCH 49/80] Update dependencies to latest minor releases --- dist/index.js | 1 + package-lock.json | 160 ++++++++++++++++++++-------------------------- package.json | 8 +-- 3 files changed, 73 insertions(+), 96 deletions(-) diff --git a/dist/index.js b/dist/index.js index 4bee8f9..10200e5 100644 --- a/dist/index.js +++ b/dist/index.js @@ -27847,6 +27847,7 @@ module.exports = { // Replace globs with equivalent patterns to reduce parsing time. REPLACEMENTS: { + __proto__: null, '***': '*', '**/**': '**', '**/**/**': '**' diff --git a/package-lock.json b/package-lock.json index 05b19e9..b928614 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,14 +15,14 @@ "adm-zip": "^0.5.16", "fast-glob": "^3.3.3", "got": "^11.8.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "xml2js": "^0.6.2" }, "devDependencies": { "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^30.0.0", - "@types/node": "^20.19.2", + "@types/node": "^20.19.13", "@types/picomatch": "^4.0.2", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -34,12 +34,12 @@ "eslint-plugin-github": "^4.10.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", - "eslint-plugin-prettier": "^5.5.1", + "eslint-plugin-prettier": "^5.5.4", "jest": "^30.1.3", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", - "ts-jest": "^29.4.0", + "ts-jest": "^29.4.1", "typescript": "^5.9.2" }, "engines": { @@ -1878,9 +1878,9 @@ } }, "node_modules/@types/node": { - "version": "20.19.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", - "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", + "version": "20.19.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.13.tgz", + "integrity": "sha512-yCAeZl7a0DxgNVteXFHt9+uyFbqXGy/ShC4BlcHkoE0AfGXYv/BUiplV72DjMYXHDBXFjhvr6DD1NiRVfB4j8g==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -2714,13 +2714,6 @@ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -3474,22 +3467,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.5.177", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.177.tgz", @@ -4156,9 +4133,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.1.tgz", - "integrity": "sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", "dependencies": { @@ -4461,39 +4438,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -4894,6 +4838,28 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5662,25 +5628,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest": { "version": "30.1.3", "resolved": "https://registry.npmjs.org/jest/-/jest-30.1.3.tgz", @@ -6764,6 +6711,13 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -7150,9 +7104,10 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -8167,15 +8122,15 @@ } }, "node_modules/ts-jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", - "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.1.tgz", + "integrity": "sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", - "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", @@ -8407,6 +8362,20 @@ "node": ">=14.17" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -8662,6 +8631,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 7baf2ae..1dbbebc 100644 --- a/package.json +++ b/package.json @@ -42,14 +42,14 @@ "adm-zip": "^0.5.16", "fast-glob": "^3.3.3", "got": "^11.8.6", - "picomatch": "^4.0.2", + "picomatch": "^4.0.3", "xml2js": "^0.6.2" }, "devDependencies": { "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^30.0.0", - "@types/node": "^20.19.2", + "@types/node": "^20.19.13", "@types/picomatch": "^4.0.2", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -61,12 +61,12 @@ "eslint-plugin-github": "^4.10.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", - "eslint-plugin-prettier": "^5.5.1", + "eslint-plugin-prettier": "^5.5.4", "jest": "^30.1.3", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", - "ts-jest": "^29.4.0", + "ts-jest": "^29.4.1", "typescript": "^5.9.2" }, "jest-junit": { From 2211cf10350d2923df6e342769b4610f47c7d827 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Fri, 12 Sep 2025 13:15:16 +0200 Subject: [PATCH 50/80] Upgrade `actions/checkout` to v5 This action runs using NodeJS 24 and requires GitHub Runner v2.327.1 and newer https://github.com/actions/checkout/releases/tag/v5.0.0 --- .github/workflows/check-dist.yml | 2 +- .github/workflows/ci.yml | 2 +- .github/workflows/manual-run.yml | 2 +- .github/workflows/test-report.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index e571511..a3cb128 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set Node.js uses: actions/setup-node@v4 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d5f8615..bd724b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: name: Build & Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' diff --git a/.github/workflows/manual-run.yml b/.github/workflows/manual-run.yml index 169c810..6775c75 100644 --- a/.github/workflows/manual-run.yml +++ b/.github/workflows/manual-run.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - run: npm ci - run: npm run build - run: npm test diff --git a/.github/workflows/test-report.yml b/.github/workflows/test-report.yml index e3f9555..8335320 100644 --- a/.github/workflows/test-report.yml +++ b/.github/workflows/test-report.yml @@ -11,7 +11,7 @@ jobs: name: Workflow test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./ with: artifact: test-results From fd1c798d8d5bd27a739af14e4040764221e0b748 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Fri, 12 Sep 2025 13:16:20 +0200 Subject: [PATCH 51/80] Upgrade `actions/setup-node` to v5 This action runs using NodeJS 24 and requires GitHub Runner v2.327.1 and newer https://github.com/actions/setup-node/releases/tag/v5.0.0 --- .github/workflows/check-dist.yml | 2 +- .github/workflows/ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index a3cb128..3852402 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@v5 - name: Set Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version-file: '.nvmrc' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bd724b6..214a4a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: '.nvmrc' - run: npm ci From ba334059870d010bdfddb4c41c2c7dc906729fd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 23:06:32 +0000 Subject: [PATCH 52/80] Bump actions/setup-node from 5 to 6 Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/check-dist.yml | 2 +- .github/workflows/ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index 3852402..ba4035f 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@v5 - name: Set Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 214a4a7..ce4331c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version-file: '.nvmrc' - run: npm ci From cf9db500ed9d6dd11f61fb9c035976cd3bba584e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Oct 2025 23:05:54 +0000 Subject: [PATCH 53/80] Bump actions/upload-artifact from 4 to 5 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/check-dist.yml | 2 +- .github/workflows/ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index 3852402..e2f2235 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -46,7 +46,7 @@ jobs: id: diff # If index.js was different than expected, upload the expected version as an artifact - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 if: ${{ failure() && steps.diff.conclusion == 'failure' }} with: name: dist diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 214a4a7..ba438ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: - name: Upload test results if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: test-results path: __tests__/__results__/*.xml From 35be98f7e7537e491bd3b6b80abf91f7293f3131 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Sat, 25 Oct 2025 11:30:47 +0200 Subject: [PATCH 54/80] Update npm packages to latest minor updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update report: @types/node ^20.19.13 → ^20.19.23 @vercel/ncc ^0.38.3 → ^0.38.4 jest ^30.1.3 → ^30.2.0 ts-jest ^29.4.1 → ^29.4.5 typescript ^5.9.2 → ^5.9.3 --- package-lock.json | 667 +++++++++++++++++++++++----------------------- package.json | 10 +- 2 files changed, 339 insertions(+), 338 deletions(-) diff --git a/package-lock.json b/package-lock.json index b928614..c92e2c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,12 +22,12 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^30.0.0", - "@types/node": "^20.19.13", + "@types/node": "^20.19.23", "@types/picomatch": "^4.0.2", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", - "@vercel/ncc": "^0.38.3", + "@vercel/ncc": "^0.38.4", "eol-converter-cli": "^1.1.0", "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.10.1", @@ -35,12 +35,12 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.4", - "jest": "^30.1.3", + "jest": "^30.2.0", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", - "ts-jest": "^29.4.1", - "typescript": "^5.9.2" + "ts-jest": "^29.4.5", + "typescript": "^5.9.3" }, "engines": { "node": ">=20" @@ -277,9 +277,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -622,14 +622,14 @@ } }, "node_modules/@babel/types": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.7.tgz", - "integrity": "sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -997,17 +997,17 @@ } }, "node_modules/@jest/console": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.1.2.tgz", - "integrity": "sha512-BGMAxj8VRmoD0MoA/jo9alMXSRoqW8KPeqOfEo1ncxnRLatTBCpRoOwlwlEMdudp68Q6WSGwYrrLtTGOh8fLzw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -1015,39 +1015,39 @@ } }, "node_modules/@jest/core": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.1.3.tgz", - "integrity": "sha512-LIQz7NEDDO1+eyOA2ZmkiAyYvZuo6s1UxD/e2IHldR6D7UYogVq3arTmli07MkENLq6/3JEQjp0mA8rrHHJ8KQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", + "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", + "@jest/console": "30.2.0", "@jest/pattern": "30.0.1", - "@jest/reporters": "30.1.3", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-changed-files": "30.0.5", - "jest-config": "30.1.3", - "jest-haste-map": "30.1.0", - "jest-message-util": "30.1.0", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-resolve-dependencies": "30.1.3", - "jest-runner": "30.1.3", - "jest-runtime": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", - "jest-watcher": "30.1.3", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -1073,39 +1073,39 @@ } }, "node_modules/@jest/environment": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.1.2.tgz", - "integrity": "sha512-N8t1Ytw4/mr9uN28OnVf0SYE2dGhaIxOVYcwsf9IInBKjvofAjbFRvedvBBlyTYk2knbJTiEjEJ2PyyDIBnd9w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.1.2", - "@jest/types": "30.0.5", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "30.0.5" + "jest-mock": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.1.2.tgz", - "integrity": "sha512-tyaIExOwQRCxPCGNC05lIjWJztDwk2gPDNSDGg1zitXJJ8dC3++G/CRjE5mb2wQsf89+lsgAgqxxNpDLiCViTA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.1.2", - "jest-snapshot": "30.1.2" + "expect": "30.2.0", + "jest-snapshot": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.1.2.tgz", - "integrity": "sha512-HXy1qT/bfdjCv7iC336ExbqqYtZvljrV8odNdso7dWK9bSeHtLlvwWWC3YSybSPL03Gg5rug6WLCZAZFH72m0A==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", "dev": true, "license": "MIT", "dependencies": { @@ -1116,18 +1116,18 @@ } }, "node_modules/@jest/fake-timers": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.1.2.tgz", - "integrity": "sha512-Beljfv9AYkr9K+ETX9tvV61rJTY706BhBUtiaepQHeEGfe0DbpvUA5Z3fomwc5Xkhns6NWrcFDZn+72fLieUnA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1144,16 +1144,16 @@ } }, "node_modules/@jest/globals": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.1.2.tgz", - "integrity": "sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/expect": "30.1.2", - "@jest/types": "30.0.5", - "jest-mock": "30.0.5" + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1174,17 +1174,17 @@ } }, "node_modules/@jest/reporters": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.1.3.tgz", - "integrity": "sha512-VWEQmJWfXMOrzdFEOyGjUEOuVXllgZsoPtEHZzfdNz18RmzJ5nlR6kp8hDdY8dDS1yGOXAY7DHT+AOHIPSBV0w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", @@ -1197,9 +1197,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", - "jest-worker": "30.1.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -1287,13 +1287,13 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.1.2.tgz", - "integrity": "sha512-vHoMTpimcPSR7OxS2S0V1Cpg8eKDRxucHjoWl5u4RQcnxqQrV3avETiFpl8etn4dqxEGarBeHbIBety/f8mLXw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" @@ -1318,14 +1318,14 @@ } }, "node_modules/@jest/test-result": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.1.3.tgz", - "integrity": "sha512-P9IV8T24D43cNRANPPokn7tZh0FAFnYS2HIfi5vK18CjRkTDR9Y3e1BoEcAJnl4ghZZF4Ecda4M/k41QkvurEQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" }, @@ -1334,15 +1334,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.1.3.tgz", - "integrity": "sha512-82J+hzC0qeQIiiZDThh+YUadvshdBswi5nuyXlEmXzrhw5ZQSRHeQ5LpVMD/xc8B3wPePvs6VMzHnntxL+4E3w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.1.3", + "@jest/test-result": "30.2.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.2.0", "slash": "^3.0.0" }, "engines": { @@ -1350,23 +1350,23 @@ } }, "node_modules/@jest/transform": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.1.2.tgz", - "integrity": "sha512-UYYFGifSgfjujf1Cbd3iU/IQoSd6uwsj8XHj5DSDf5ERDcWMdJOPTkHWXj4U+Z/uMagyOQZ6Vne8C4nRIrCxqA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.2.0", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "micromatch": "^4.0.8", "pirates": "^4.0.7", "slash": "^3.0.0", @@ -1377,9 +1377,9 @@ } }, "node_modules/@jest/types": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz", - "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, "license": "MIT", "dependencies": { @@ -1803,13 +1803,13 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/cacheable-request": { @@ -1878,9 +1878,9 @@ } }, "node_modules/@types/node": { - "version": "20.19.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.13.tgz", - "integrity": "sha512-yCAeZl7a0DxgNVteXFHt9+uyFbqXGy/ShC4BlcHkoE0AfGXYv/BUiplV72DjMYXHDBXFjhvr6DD1NiRVfB4j8g==", + "version": "20.19.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.23.tgz", + "integrity": "sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -2428,9 +2428,9 @@ ] }, "node_modules/@vercel/ncc": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz", - "integrity": "sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==", + "version": "0.38.4", + "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.4.tgz", + "integrity": "sha512-8LwjnlP39s08C08J5NstzriPvW1SP8Zfpp1BvC2sI35kPeZnHfxVkCwu4/+Wodgnd60UtT1n8K8zw+Mp7J9JmQ==", "dev": true, "license": "MIT", "bin": { @@ -2759,16 +2759,16 @@ } }, "node_modules/babel-jest": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.1.2.tgz", - "integrity": "sha512-IQCus1rt9kaSh7PQxLYRY5NmkNrNlU2TpabzwV7T2jljnpdHOcmnYYv8QmE04Li4S3a2Lj8/yXyET5pBarPr6g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.1.2", + "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.0", - "babel-preset-jest": "30.0.1", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" @@ -2777,15 +2777,18 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "node_modules/babel-plugin-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", - "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", "dev": true, "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -2798,14 +2801,12 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz", - "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", "@types/babel__core": "^7.20.5" }, "engines": { @@ -2813,9 +2814,9 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -2836,24 +2837,24 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz", - "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.0.1", - "babel-preset-current-node-syntax": "^1.1.0" + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0" + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "node_modules/balanced-match": { @@ -3167,9 +3168,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -3567,9 +3568,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4326,18 +4327,18 @@ } }, "node_modules/expect": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.1.2.tgz", - "integrity": "sha512-xvHszRavo28ejws8FpemjhwswGj4w/BetHIL8cU49u4sGyXDw2+p3YbeDbj6xzlxi6kWTjIRSTJ+9sNXPnF0Zg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.1.2", + "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", - "jest-util": "30.0.5" + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -5629,16 +5630,16 @@ } }, "node_modules/jest": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.1.3.tgz", - "integrity": "sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", + "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.1.3", - "@jest/types": "30.0.5", + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", "import-local": "^3.2.0", - "jest-cli": "30.1.3" + "jest-cli": "30.2.0" }, "bin": { "jest": "bin/jest.js" @@ -5656,14 +5657,14 @@ } }, "node_modules/jest-changed-files": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.5.tgz", - "integrity": "sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", + "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "p-limit": "^3.1.0" }, "engines": { @@ -5671,29 +5672,29 @@ } }, "node_modules/jest-circus": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.1.3.tgz", - "integrity": "sha512-Yf3dnhRON2GJT4RYzM89t/EXIWNxKTpWTL9BfF3+geFetWP4XSvJjiU1vrWplOiUkmq8cHLiwuhz+XuUp9DscA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/expect": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.1.0", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-runtime": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "p-limit": "^3.1.0", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" @@ -5703,21 +5704,21 @@ } }, "node_modules/jest-cli": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.1.3.tgz", - "integrity": "sha512-G8E2Ol3OKch1DEeIBl41NP7OiC6LBhfg25Btv+idcusmoUSpqUkbrneMqbW9lVpI/rCKb/uETidb7DNteheuAQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", + "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.1.3", - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.1.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "yargs": "^17.7.2" }, "bin": { @@ -5736,34 +5737,34 @@ } }, "node_modules/jest-config": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.1.3.tgz", - "integrity": "sha512-M/f7gqdQEPgZNA181Myz+GXCe8jXcJsGjCMXUzRj22FIXsZOyHNte84e0exntOvdPaeh9tA0w+B8qlP2fAezfw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.1.3", - "@jest/types": "30.0.5", - "babel-jest": "30.1.2", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-circus": "30.1.3", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.1.2", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-runner": "30.1.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -5845,25 +5846,25 @@ } }, "node_modules/jest-diff": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.2.tgz", - "integrity": "sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "license": "MIT", "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz", - "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, "license": "MIT", "dependencies": { @@ -5874,56 +5875,56 @@ } }, "node_modules/jest-each": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.1.0.tgz", - "integrity": "sha512-A+9FKzxPluqogNahpCv04UJvcZ9B3HamqpDNWNKDjtxVRYB8xbZLFuCr8JAJFpNp83CA0anGQFlpQna9Me+/tQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "chalk": "^4.1.2", - "jest-util": "30.0.5", - "pretty-format": "30.0.5" + "jest-util": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.1.2.tgz", - "integrity": "sha512-w8qBiXtqGWJ9xpJIA98M0EIoq079GOQRQUyse5qg1plShUCQ0Ek1VTTcczqKrn3f24TFAgFtT+4q3aOXvjbsuA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/fake-timers": "30.1.2", - "@jest/types": "30.0.5", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "30.0.5", - "jest-util": "30.0.5", - "jest-validate": "30.1.0" + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.1.0.tgz", - "integrity": "sha512-JLeM84kNjpRkggcGpQLsV7B8W4LNUWz7oDNVnY1Vjj22b5/fAb3kk3htiD+4Na8bmJmjJR7rBtS2Rmq/NEcADg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", "jest-regex-util": "30.0.1", - "jest-util": "30.0.5", - "jest-worker": "30.1.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", "micromatch": "^4.0.8", "walker": "^1.0.8" }, @@ -5950,49 +5951,49 @@ } }, "node_modules/jest-leak-detector": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.1.0.tgz", - "integrity": "sha512-AoFvJzwxK+4KohH60vRuHaqXfWmeBATFZpzpmzNmYTtmRMiyGPVhkXpBqxUQunw+dQB48bDf4NpUs6ivVbRv1g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.1.2.tgz", - "integrity": "sha512-7ai16hy4rSbDjvPTuUhuV8nyPBd6EX34HkBsBcBX2lENCuAQ0qKCPb/+lt8OSWUa9WWmGYLy41PrEzkwRwoGZQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "jest-diff": "30.1.2", - "pretty-format": "30.0.5" + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.1.0.tgz", - "integrity": "sha512-HizKDGG98cYkWmaLUHChq4iN+oCENohQLb7Z5guBPumYs+/etonmNFlg1Ps6yN9LTPyZn+M+b/9BbnHx3WTMDg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "micromatch": "^4.0.8", - "pretty-format": "30.0.5", + "pretty-format": "30.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" }, @@ -6001,15 +6002,15 @@ } }, "node_modules/jest-mock": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz", - "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-util": "30.0.5" + "jest-util": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -6044,18 +6045,18 @@ } }, "node_modules/jest-resolve": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.1.3.tgz", - "integrity": "sha512-DI4PtTqzw9GwELFS41sdMK32Ajp3XZQ8iygeDMWkxlRhm7uUTOFSZFVZABFuxr0jvspn8MAYy54NxZCsuCTSOw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", + "jest-haste-map": "30.2.0", "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.0.5", - "jest-validate": "30.1.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" }, @@ -6064,46 +6065,46 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.1.3.tgz", - "integrity": "sha512-DNfq3WGmuRyHRHfEet+Zm3QOmVFtIarUOQHHryKPc0YL9ROfgWZxl4+aZq/VAzok2SS3gZdniP+dO4zgo59hBg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", + "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", "dev": true, "license": "MIT", "dependencies": { "jest-regex-util": "30.0.1", - "jest-snapshot": "30.1.2" + "jest-snapshot": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.1.3.tgz", - "integrity": "sha512-dd1ORcxQraW44Uz029TtXj85W11yvLpDuIzNOlofrC8GN+SgDlgY4BvyxJiVeuabA1t6idjNbX59jLd2oplOGQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.1.2", - "@jest/environment": "30.1.2", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-docblock": "30.0.1", - "jest-environment-node": "30.1.2", - "jest-haste-map": "30.1.0", - "jest-leak-detector": "30.1.0", - "jest-message-util": "30.1.0", - "jest-resolve": "30.1.3", - "jest-runtime": "30.1.3", - "jest-util": "30.0.5", - "jest-watcher": "30.1.3", - "jest-worker": "30.1.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -6112,32 +6113,32 @@ } }, "node_modules/jest-runtime": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.1.3.tgz", - "integrity": "sha512-WS8xgjuNSphdIGnleQcJ3AKE4tBKOVP+tKhCD0u+Tb2sBmsU8DxfbBpZX7//+XOz81zVs4eFpJQwBNji2Y07DA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.1.2", - "@jest/fake-timers": "30.1.2", - "@jest/globals": "30.1.2", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.1.3", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.3.10", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.1.0", - "jest-message-util": "30.1.0", - "jest-mock": "30.0.5", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", "jest-regex-util": "30.0.1", - "jest-resolve": "30.1.3", - "jest-snapshot": "30.1.2", - "jest-util": "30.0.5", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -6203,9 +6204,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.1.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.1.2.tgz", - "integrity": "sha512-4q4+6+1c8B6Cy5pGgFvjDy/Pa6VYRiGu0yQafKkJ9u6wQx4G5PqI2QR6nxTl43yy7IWsINwz6oT4o6tD12a8Dg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", "dev": true, "license": "MIT", "dependencies": { @@ -6214,20 +6215,20 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.1.2", + "@jest/expect-utils": "30.2.0", "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.1.2", - "@jest/transform": "30.1.2", - "@jest/types": "30.0.5", - "babel-preset-current-node-syntax": "^1.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", - "expect": "30.1.2", + "expect": "30.2.0", "graceful-fs": "^4.2.11", - "jest-diff": "30.1.2", - "jest-matcher-utils": "30.1.2", - "jest-message-util": "30.1.0", - "jest-util": "30.0.5", - "pretty-format": "30.0.5", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", "semver": "^7.7.2", "synckit": "^0.11.8" }, @@ -6236,13 +6237,13 @@ } }, "node_modules/jest-util": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz", - "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", @@ -6254,18 +6255,18 @@ } }, "node_modules/jest-validate": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.1.0.tgz", - "integrity": "sha512-7P3ZlCFW/vhfQ8pE7zW6Oi4EzvuB4sgR72Q1INfW9m0FGo0GADYlPwIkf4CyPq7wq85g+kPMtPOHNAdWHeBOaA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.0.5", + "@jest/types": "30.2.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "30.0.5" + "pretty-format": "30.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -6285,19 +6286,19 @@ } }, "node_modules/jest-watcher": { - "version": "30.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.1.3.tgz", - "integrity": "sha512-6jQUZCP1BTL2gvG9E4YF06Ytq4yMb4If6YoQGRR6PpjtqOXSP3sKe2kqwB6SQ+H9DezOfZaSLnmka1NtGm3fCQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.1.3", - "@jest/types": "30.0.5", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "string-length": "^4.0.2" }, "engines": { @@ -6305,15 +6306,15 @@ } }, "node_modules/jest-worker": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.1.0.tgz", - "integrity": "sha512-uvWcSjlwAAgIu133Tt77A05H7RIk3Ho8tZL50bQM2AkvLdluw9NG48lRCl3Dt+MOH719n/0nnb5YxUwcuJiKRA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.0.5", + "jest-util": "30.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" }, @@ -7242,9 +7243,9 @@ } }, "node_modules/pretty-format": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", - "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", "dependencies": { @@ -7583,9 +7584,9 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -8122,9 +8123,9 @@ } }, "node_modules/ts-jest": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.1.tgz", - "integrity": "sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==", + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", + "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8134,7 +8135,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.2", + "semver": "^7.7.3", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -8349,9 +8350,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 1dbbebc..2a53ff8 100644 --- a/package.json +++ b/package.json @@ -49,12 +49,12 @@ "@octokit/webhooks-types": "^7.6.1", "@types/adm-zip": "^0.5.7", "@types/jest": "^30.0.0", - "@types/node": "^20.19.13", + "@types/node": "^20.19.23", "@types/picomatch": "^4.0.2", "@types/xml2js": "^0.4.14", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", - "@vercel/ncc": "^0.38.3", + "@vercel/ncc": "^0.38.4", "eol-converter-cli": "^1.1.0", "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.10.1", @@ -62,12 +62,12 @@ "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^28.14.0", "eslint-plugin-prettier": "^5.5.4", - "jest": "^30.1.3", + "jest": "^30.2.0", "jest-junit": "^16.0.0", "js-yaml": "^4.1.0", "prettier": "^3.6.2", - "ts-jest": "^29.4.1", - "typescript": "^5.9.2" + "ts-jest": "^29.4.5", + "typescript": "^5.9.3" }, "jest-junit": { "suiteName": "jest tests", From de77f76b7e05c7d618f81c52cefa9c1dc5c950b1 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 5 Nov 2025 21:18:09 +0100 Subject: [PATCH 55/80] Fix badge image by correctly encoding the URI components --- src/report/get-report.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 5ea44fe..d2c2dfd 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -145,8 +145,10 @@ function getBadge(passed: number, failed: number, skipped: number, options: Repo color = 'yellow' } const hint = failed > 0 ? 'Tests failed' : 'Tests passed successfully' - const uri = encodeURIComponent(`${options.badgeTitle}-${message}-${color}`) - return `![${hint}](https://img.shields.io/badge/${uri})` + const encodedBadgeTitle = encodeImgShieldsURIComponent(options.badgeTitle) + const encodedMessage = encodeImgShieldsURIComponent(message) + const encodedColor = encodeImgShieldsURIComponent(color) + return `![${hint}](https://img.shields.io/badge/${encodedBadgeTitle}-${encodedMessage}-${encodedColor})` } function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): string[] { @@ -305,3 +307,7 @@ function getResultIcon(result: TestExecutionResult): string { return '' } } + +function encodeImgShieldsURIComponent(component: string): string { + return encodeURIComponent(component).replace(/-/g, '--') +} From 6079ce3d17ccb1aef8e425af6b8c869fdefa646d Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 5 Nov 2025 21:19:18 +0100 Subject: [PATCH 56/80] Add unit tests for `getBadge()` function to ensure values are encoded for img.shields.io service --- __tests__/report/get-report.test.ts | 110 ++++++++++++++++++++++++++++ src/report/get-report.ts | 2 +- 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 __tests__/report/get-report.test.ts diff --git a/__tests__/report/get-report.test.ts b/__tests__/report/get-report.test.ts new file mode 100644 index 0000000..1925110 --- /dev/null +++ b/__tests__/report/get-report.test.ts @@ -0,0 +1,110 @@ +import {getBadge, DEFAULT_OPTIONS, ReportOptions} from '../../src/report/get-report' + +describe('getBadge', () => { + describe('URI encoding with special characters', () => { + it('generates correct URI with simple badge title', () => { + const options: ReportOptions = { + ...DEFAULT_OPTIONS, + badgeTitle: 'tests' + } + const badge = getBadge(5, 0, 1, options) + expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/tests-5%20passed%2C%201%20skipped-success)') + }) + + it('handles badge title with single hyphen', () => { + const options: ReportOptions = { + ...DEFAULT_OPTIONS, + badgeTitle: 'unit-tests' + } + const badge = getBadge(3, 0, 0, options) + // The hyphen in the badge title should be encoded as -- + expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/unit--tests-3%20passed-success)') + }) + + it('handles badge title with multiple hyphens', () => { + const options: ReportOptions = { + ...DEFAULT_OPTIONS, + badgeTitle: 'integration-api-tests' + } + const badge = getBadge(10, 0, 0, options) + // All hyphens in the title should be encoded as -- + expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/integration--api--tests-10%20passed-success)') + }) + + it('handles badge title with version format containing hyphen', () => { + const options: ReportOptions = { + ...DEFAULT_OPTIONS, + badgeTitle: 'MariaDb 12.0-ubi database tests' + } + const badge = getBadge(1, 0, 0, options) + // The hyphen in "12.0-ubi" should be encoded as -- + expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/MariaDb%2012.0--ubi%20database%20tests-1%20passed-success)') + }) + + it('handles badge title with dots and hyphens', () => { + const options: ReportOptions = { + ...DEFAULT_OPTIONS, + badgeTitle: 'v1.2.3-beta-test' + } + const badge = getBadge(4, 1, 0, options) + expect(badge).toBe('![Tests failed](https://img.shields.io/badge/v1.2.3--beta--test-4%20passed%2C%201%20failed-critical)') + }) + + it('preserves structural hyphens between label and message', () => { + const options: ReportOptions = { + ...DEFAULT_OPTIONS, + badgeTitle: 'test-suite' + } + const badge = getBadge(2, 3, 1, options) + // The URI should have literal hyphens separating title-message-color + expect(badge).toBe('![Tests failed](https://img.shields.io/badge/test--suite-2%20passed%2C%203%20failed%2C%201%20skipped-critical)') + }) + }) + + describe('generates test outcome as color name for imgshields', () => { + it('uses success color when all tests pass', () => { + const options: ReportOptions = {...DEFAULT_OPTIONS} + const badge = getBadge(5, 0, 0, options) + expect(badge).toContain('-success)') + }) + + it('uses critical color when tests fail', () => { + const options: ReportOptions = {...DEFAULT_OPTIONS} + const badge = getBadge(5, 2, 0, options) + expect(badge).toContain('-critical)') + }) + + it('uses yellow color when no tests found', () => { + const options: ReportOptions = {...DEFAULT_OPTIONS} + const badge = getBadge(0, 0, 0, options) + expect(badge).toContain('-yellow)') + }) + }) + + describe('badge message composition', () => { + it('includes only passed count when no failures or skips', () => { + const options: ReportOptions = {...DEFAULT_OPTIONS} + const badge = getBadge(5, 0, 0, options) + expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/tests-5%20passed-success)') + }) + + it('includes passed and failed counts', () => { + const options: ReportOptions = {...DEFAULT_OPTIONS} + const badge = getBadge(5, 2, 0, options) + expect(badge).toBe('![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%202%20failed-critical)') + }) + + it('includes passed, failed and skipped counts', () => { + const options: ReportOptions = {...DEFAULT_OPTIONS} + const badge = getBadge(5, 2, 1, options) + expect(badge).toBe('![Tests failed](https://img.shields.io/badge/tests-5%20passed%2C%202%20failed%2C%201%20skipped-critical)') + }) + + it('uses "none" message when no tests', () => { + const options: ReportOptions = {...DEFAULT_OPTIONS} + const badge = getBadge(0, 0, 0, options) + expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/tests-none-yellow)') + }) + }) +}) + diff --git a/src/report/get-report.ts b/src/report/get-report.ts index d2c2dfd..bbf8aca 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -125,7 +125,7 @@ function getReportBadge(results: TestRunResult[], options: ReportOptions): strin return getBadge(passed, failed, skipped, options) } -function getBadge(passed: number, failed: number, skipped: number, options: ReportOptions): string { +export function getBadge(passed: number, failed: number, skipped: number, options: ReportOptions): string { const text = [] if (passed > 0) { text.push(`${passed} passed`) From bed521d765c89ebb463b878b41ac697ad833491f Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 5 Nov 2025 21:20:23 +0100 Subject: [PATCH 57/80] Fix badge encoding for values including the `_` underscore character --- __tests__/report/get-report.test.ts | 10 ++++++++++ src/report/get-report.ts | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/__tests__/report/get-report.test.ts b/__tests__/report/get-report.test.ts index 1925110..670b0ad 100644 --- a/__tests__/report/get-report.test.ts +++ b/__tests__/report/get-report.test.ts @@ -31,6 +31,16 @@ describe('getBadge', () => { expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/integration--api--tests-10%20passed-success)') }) + it('handles badge title with multiple underscores', () => { + const options: ReportOptions = { + ...DEFAULT_OPTIONS, + badgeTitle: 'my_integration_test' + } + const badge = getBadge(10, 0, 0, options) + // All underscores in the title should be encoded as __ + expect(badge).toBe('![Tests passed successfully](https://img.shields.io/badge/my__integration__test-10%20passed-success)') + }) + it('handles badge title with version format containing hyphen', () => { const options: ReportOptions = { ...DEFAULT_OPTIONS, diff --git a/src/report/get-report.ts b/src/report/get-report.ts index bbf8aca..5168b7a 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -309,5 +309,5 @@ function getResultIcon(result: TestExecutionResult): string { } function encodeImgShieldsURIComponent(component: string): string { - return encodeURIComponent(component).replace(/-/g, '--') + return encodeURIComponent(component).replace(/-/g, '--').replace(/_/g, '__') } From 22dc7b52f476dd68d1290212d31ef5748d278b85 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 5 Nov 2025 21:25:14 +0100 Subject: [PATCH 58/80] Rebuild `dist/` code --- dist/index.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index 10200e5..d5914fe 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1909,6 +1909,7 @@ var __importStar = (this && this.__importStar) || (function () { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DEFAULT_OPTIONS = void 0; exports.getReport = getReport; +exports.getBadge = getBadge; const core = __importStar(__nccwpck_require__(7484)); const markdown_utils_1 = __nccwpck_require__(5129); const node_utils_1 = __nccwpck_require__(5384); @@ -2022,8 +2023,10 @@ function getBadge(passed, failed, skipped, options) { color = 'yellow'; } const hint = failed > 0 ? 'Tests failed' : 'Tests passed successfully'; - const uri = encodeURIComponent(`${options.badgeTitle}-${message}-${color}`); - return `![${hint}](https://img.shields.io/badge/${uri})`; + const encodedBadgeTitle = encodeImgShieldsURIComponent(options.badgeTitle); + const encodedMessage = encodeImgShieldsURIComponent(message); + const encodedColor = encodeImgShieldsURIComponent(color); + return `![${hint}](https://img.shields.io/badge/${encodedBadgeTitle}-${encodedMessage}-${encodedColor})`; } function getTestRunsReport(testRuns, options) { const sections = []; @@ -2153,6 +2156,9 @@ function getResultIcon(result) { return ''; } } +function encodeImgShieldsURIComponent(component) { + return encodeURIComponent(component).replace(/-/g, '--').replace(/_/g, '__'); +} /***/ }), From 828632acd025c710d46b2c60ade6b5257ea06caf Mon Sep 17 00:00:00 2001 From: pespinel Date: Mon, 20 Oct 2025 14:52:37 +0200 Subject: [PATCH 59/80] feat: add collapsed option to control report visibility --- action.yml | 8 ++++++++ dist/index.js | 19 +++++++++++++------ src/main.ts | 9 ++++++--- src/report/get-report.ts | 14 +++++++++++--- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/action.yml b/action.yml index 7777d56..c8dd56b 100644 --- a/action.yml +++ b/action.yml @@ -89,6 +89,14 @@ inputs: description: Customize badge title required: false default: 'tests' + collapsed: + description: | + Controls whether test report details are collapsed or expanded. Supported options: + - auto: Collapse only if all tests pass (default behavior) + - always: Always collapse the report details + - never: Always expand the report details + required: false + default: 'auto' token: description: GitHub Access Token required: false diff --git a/dist/index.js b/dist/index.js index d5914fe..7a5188d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -309,6 +309,7 @@ class TestReporter { useActionsSummary = core.getInput('use-actions-summary', { required: false }) === 'true'; badgeTitle = core.getInput('badge-title', { required: false }); reportTitle = core.getInput('report-title', { required: false }); + collapsed = core.getInput('collapsed', { required: false }); token = core.getInput('token', { required: true }); octokit; context = (0, github_utils_1.getCheckRunContext)(); @@ -401,7 +402,7 @@ class TestReporter { throw error; } } - const { listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle } = this; + const { listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle, collapsed } = this; const passed = results.reduce((sum, tr) => sum + tr.passed, 0); const failed = results.reduce((sum, tr) => sum + tr.failed, 0); const skipped = results.reduce((sum, tr) => sum + tr.skipped, 0); @@ -415,7 +416,8 @@ class TestReporter { onlySummary, useActionsSummary, badgeTitle, - reportTitle + reportTitle, + collapsed }); core.info('Summary content:'); core.info(summary); @@ -443,7 +445,8 @@ class TestReporter { onlySummary, useActionsSummary, badgeTitle, - reportTitle + reportTitle, + collapsed }); core.info('Creating annotations'); const annotations = (0, get_annotations_1.getAnnotations)(results, this.maxAnnotations); @@ -1924,7 +1927,8 @@ exports.DEFAULT_OPTIONS = { onlySummary: false, useActionsSummary: true, badgeTitle: 'tests', - reportTitle: '' + reportTitle: '', + collapsed: 'auto' }; function getReport(results, options = exports.DEFAULT_OPTIONS) { core.info('Generating check run summary'); @@ -2031,7 +2035,10 @@ function getBadge(passed, failed, skipped, options) { function getTestRunsReport(testRuns, options) { const sections = []; const totalFailed = testRuns.reduce((sum, tr) => sum + tr.failed, 0); - if (totalFailed === 0) { + // Determine if report should be collapsed based on collapsed option + const shouldCollapse = options.collapsed === 'always' || + (options.collapsed === 'auto' && totalFailed === 0); + if (shouldCollapse) { sections.push(`
Expand for details`); sections.push(` `); } @@ -2056,7 +2063,7 @@ function getTestRunsReport(testRuns, options) { const suitesReports = testRuns.map((tr, i) => getSuitesReport(tr, i, options)).flat(); sections.push(...suitesReports); } - if (totalFailed === 0) { + if (shouldCollapse) { sections.push(`
`); } return sections; diff --git a/src/main.ts b/src/main.ts index 57137ab..1dccea7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -49,6 +49,7 @@ class TestReporter { readonly useActionsSummary = core.getInput('use-actions-summary', {required: false}) === 'true' readonly badgeTitle = core.getInput('badge-title', {required: false}) readonly reportTitle = core.getInput('report-title', {required: false}) + readonly collapsed = core.getInput('collapsed', {required: false}) as 'auto' | 'always' | 'never' readonly token = core.getInput('token', {required: true}) readonly octokit: InstanceType readonly context = getCheckRunContext() @@ -166,7 +167,7 @@ class TestReporter { } } - const {listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle} = this + const {listSuites, listTests, onlySummary, useActionsSummary, badgeTitle, reportTitle, collapsed} = this const passed = results.reduce((sum, tr) => sum + tr.passed, 0) const failed = results.reduce((sum, tr) => sum + tr.failed, 0) @@ -182,7 +183,8 @@ class TestReporter { onlySummary, useActionsSummary, badgeTitle, - reportTitle + reportTitle, + collapsed }) core.info('Summary content:') @@ -211,7 +213,8 @@ class TestReporter { onlySummary, useActionsSummary, badgeTitle, - reportTitle + reportTitle, + collapsed }) core.info('Creating annotations') diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 5168b7a..08bea71 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -16,6 +16,7 @@ export interface ReportOptions { useActionsSummary: boolean badgeTitle: string reportTitle: string + collapsed: 'auto' | 'always' | 'never' } export const DEFAULT_OPTIONS: ReportOptions = { @@ -25,7 +26,8 @@ export const DEFAULT_OPTIONS: ReportOptions = { onlySummary: false, useActionsSummary: true, badgeTitle: 'tests', - reportTitle: '' + reportTitle: '', + collapsed: 'auto' } export function getReport(results: TestRunResult[], options: ReportOptions = DEFAULT_OPTIONS): string { @@ -154,7 +156,13 @@ export function getBadge(passed: number, failed: number, skipped: number, option function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): string[] { const sections: string[] = [] const totalFailed = testRuns.reduce((sum, tr) => sum + tr.failed, 0) - if (totalFailed === 0) { + + // Determine if report should be collapsed based on collapsed option + const shouldCollapse = + options.collapsed === 'always' || + (options.collapsed === 'auto' && totalFailed === 0) + + if (shouldCollapse) { sections.push(`
Expand for details`) sections.push(` `) } @@ -187,7 +195,7 @@ function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): s sections.push(...suitesReports) } - if (totalFailed === 0) { + if (shouldCollapse) { sections.push(`
`) } return sections From 7148297f026db2780715041604a9f8cc2c2020dd Mon Sep 17 00:00:00 2001 From: pespinel Date: Wed, 22 Oct 2025 16:20:59 +0200 Subject: [PATCH 60/80] test: fix linter and create tests --- __tests__/jest-junit.test.ts | 74 ++++++++++++++++++++++++++++++++++++ src/report/get-report.ts | 4 +- 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/__tests__/jest-junit.test.ts b/__tests__/jest-junit.test.ts index f4b8335..938cdd7 100644 --- a/__tests__/jest-junit.test.ts +++ b/__tests__/jest-junit.test.ts @@ -207,4 +207,78 @@ describe('jest-junit tests', () => { // Report should have the title as the first line expect(report).toMatch(/^# My Custom Title\n/) }) + + it('report can be collapsed when configured', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + collapsed: 'always' + }) + // Report should include collapsible details + expect(report).toContain('
Expand for details') + expect(report).toContain('
') + }) + + it('report is not collapsed when configured to never', async () => { + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + const report = getReport([result], { + ...DEFAULT_OPTIONS, + collapsed: 'never' + }) + // Report should not include collapsible details + expect(report).not.toContain('
Expand for details') + expect(report).not.toContain('
') + }) + + it('report auto-collapses only when all tests pass', async () => { + // Test with a fixture that has passing tests (no failures) + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + + // Check if this fixture has failures to determine expected behavior + const hasFailed = result.failed > 0 + + const report = getReport([result], { + ...DEFAULT_OPTIONS, + collapsed: 'auto' + }) + + if (hasFailed) { + // Should not collapse when there are failures + expect(report).not.toContain('
Expand for details') + } else { + // Should collapse when all tests pass + expect(report).toContain('
Expand for details') + expect(report).toContain('
') + } + }) }) diff --git a/src/report/get-report.ts b/src/report/get-report.ts index 08bea71..d893b0e 100644 --- a/src/report/get-report.ts +++ b/src/report/get-report.ts @@ -158,9 +158,7 @@ function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): s const totalFailed = testRuns.reduce((sum, tr) => sum + tr.failed, 0) // Determine if report should be collapsed based on collapsed option - const shouldCollapse = - options.collapsed === 'always' || - (options.collapsed === 'auto' && totalFailed === 0) + const shouldCollapse = options.collapsed === 'always' || (options.collapsed === 'auto' && totalFailed === 0) if (shouldCollapse) { sections.push(`
Expand for details`) From 5fb0582760679550747aaab55258d6afc4587469 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 12 Nov 2025 13:41:29 +0100 Subject: [PATCH 61/80] chore: run linter to fix code style issues --- __tests__/jest-junit.test.ts | 6 +++--- dist/index.js | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/__tests__/jest-junit.test.ts b/__tests__/jest-junit.test.ts index 938cdd7..1628016 100644 --- a/__tests__/jest-junit.test.ts +++ b/__tests__/jest-junit.test.ts @@ -263,15 +263,15 @@ describe('jest-junit tests', () => { const parser = new JestJunitParser(opts) const result = await parser.parse(filePath, fileContent) - + // Check if this fixture has failures to determine expected behavior const hasFailed = result.failed > 0 - + const report = getReport([result], { ...DEFAULT_OPTIONS, collapsed: 'auto' }) - + if (hasFailed) { // Should not collapse when there are failures expect(report).not.toContain('
Expand for details') diff --git a/dist/index.js b/dist/index.js index 7a5188d..3687bbd 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2036,8 +2036,7 @@ function getTestRunsReport(testRuns, options) { const sections = []; const totalFailed = testRuns.reduce((sum, tr) => sum + tr.failed, 0); // Determine if report should be collapsed based on collapsed option - const shouldCollapse = options.collapsed === 'always' || - (options.collapsed === 'auto' && totalFailed === 0); + const shouldCollapse = options.collapsed === 'always' || (options.collapsed === 'auto' && totalFailed === 0); if (shouldCollapse) { sections.push(`
Expand for details`); sections.push(` `); From c7935221e6a50a8f00bfb147caa6f98b75cf7128 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 12 Nov 2025 14:09:45 +0100 Subject: [PATCH 62/80] feat: add validation for the `collapsed` input parameter Generated-by: Claude Sonnet 4.5 --- dist/index.js | 4 ++++ src/main.ts | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/dist/index.js b/dist/index.js index 3687bbd..cdd6319 100644 --- a/dist/index.js +++ b/dist/index.js @@ -323,6 +323,10 @@ class TestReporter { core.setFailed(`Input parameter 'list-tests' has invalid value`); return; } + if (this.collapsed !== 'auto' && this.collapsed !== 'always' && this.collapsed !== 'never') { + core.setFailed(`Input parameter 'collapsed' has invalid value`); + return; + } if (isNaN(this.maxAnnotations) || this.maxAnnotations < 0 || this.maxAnnotations > 50) { core.setFailed(`Input parameter 'max-annotations' has invalid value`); return; diff --git a/src/main.ts b/src/main.ts index 1dccea7..218377f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -67,6 +67,11 @@ class TestReporter { return } + if (this.collapsed !== 'auto' && this.collapsed !== 'always' && this.collapsed !== 'never') { + core.setFailed(`Input parameter 'collapsed' has invalid value`) + return + } + if (isNaN(this.maxAnnotations) || this.maxAnnotations < 0 || this.maxAnnotations > 50) { core.setFailed(`Input parameter 'max-annotations' has invalid value`) return From cd299561e7271ff8c2e2c14b6e9cfe47badf2f60 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Wed, 12 Nov 2025 14:20:54 +0100 Subject: [PATCH 63/80] tests: refactor input `collapsed=auto` to individual tests Generated-by: Claude Sonnet 4.5 --- __tests__/jest-junit.test.ts | 46 ++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/__tests__/jest-junit.test.ts b/__tests__/jest-junit.test.ts index 1628016..6fb6c64 100644 --- a/__tests__/jest-junit.test.ts +++ b/__tests__/jest-junit.test.ts @@ -250,8 +250,35 @@ describe('jest-junit tests', () => { expect(report).not.toContain('
') }) - it('report auto-collapses only when all tests pass', async () => { - // Test with a fixture that has passing tests (no failures) + it('report auto-collapses when all tests pass', async () => { + // Test with a fixture that has all passing tests (no failures) + const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit-eslint.xml') + const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) + const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) + + const opts: ParseOptions = { + parseErrors: true, + trackedFiles: [] + } + + const parser = new JestJunitParser(opts) + const result = await parser.parse(filePath, fileContent) + + // Verify this fixture has no failures + expect(result.failed).toBe(0) + + const report = getReport([result], { + ...DEFAULT_OPTIONS, + collapsed: 'auto' + }) + + // Should collapse when all tests pass + expect(report).toContain('
Expand for details') + expect(report).toContain('
') + }) + + it('report does not auto-collapse when tests fail', async () => { + // Test with a fixture that has failing tests const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml') const filePath = normalizeFilePath(path.relative(__dirname, fixturePath)) const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'}) @@ -264,21 +291,16 @@ describe('jest-junit tests', () => { const parser = new JestJunitParser(opts) const result = await parser.parse(filePath, fileContent) - // Check if this fixture has failures to determine expected behavior - const hasFailed = result.failed > 0 + // Verify this fixture has failures + expect(result.failed).toBeGreaterThan(0) const report = getReport([result], { ...DEFAULT_OPTIONS, collapsed: 'auto' }) - if (hasFailed) { - // Should not collapse when there are failures - expect(report).not.toContain('
Expand for details') - } else { - // Should collapse when all tests pass - expect(report).toContain('
Expand for details') - expect(report).toContain('
') - } + // Should not collapse when there are failures + expect(report).not.toContain('
Expand for details') + expect(report).not.toContain('
') }) }) From 6939db53fb7e16b4c1dfadbb21a09889cad622fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 23:17:28 +0000 Subject: [PATCH 64/80] Bump js-yaml from 4.1.0 to 4.1.1 Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.1.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index c92e2c3..54789e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "eslint-plugin-prettier": "^5.5.4", "jest": "^30.2.0", "jest-junit": "^16.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "prettier": "^3.6.2", "ts-jest": "^29.4.5", "typescript": "^5.9.3" @@ -6346,10 +6346,11 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, diff --git a/package.json b/package.json index 2a53ff8..b924fee 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "eslint-plugin-prettier": "^5.5.4", "jest": "^30.2.0", "jest-junit": "^16.0.0", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "prettier": "^3.6.2", "ts-jest": "^29.4.5", "typescript": "^5.9.3" From 7b7927aa7da8b82e81e755810cb51f39941a2cc7 Mon Sep 17 00:00:00 2001 From: Jozef Izso Date: Thu, 13 Nov 2025 21:02:39 +0100 Subject: [PATCH 65/80] test-reporter release v2.2.0 --- CHANGELOG.md | 6 ++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8489364..1979432 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 2.2.0 +* Feature: Add collapsed option to control report summary visibility https://github.com/dorny/test-reporter/pull/664 +* Fix badge encoding for values including underscore and hyphens https://github.com/dorny/test-reporter/pull/672 +* Fix missing `report-title` attribute in action definition https://github.com/dorny/test-reporter/pull/637 +* Refactor variable names to fix shadowing issues https://github.com/dorny/test-reporter/pull/630 + ## 2.1.1 * Fix error when a TestMethod element does not have a className attribute in a trx file https://github.com/dorny/test-reporter/pull/623 * Add stack trace from trx to summary https://github.com/dorny/test-reporter/pull/615 diff --git a/package-lock.json b/package-lock.json index 54789e0..26ec018 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "test-reporter", - "version": "2.1.1", + "version": "2.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "test-reporter", - "version": "2.1.1", + "version": "2.2.0", "license": "MIT", "dependencies": { "@actions/core": "^1.11.1", diff --git a/package.json b/package.json index b924fee..ad18861 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "test-reporter", - "version": "2.1.1", + "version": "2.2.0", "private": true, "description": "Presents test results from popular testing frameworks as Github check run", "main": "lib/main.js", From 43a747d94c5cb48917d8407aba9cc262945aa600 Mon Sep 17 00:00:00 2001 From: Michael Nestler <194211291+phactum-mnestler@users.noreply.github.com> Date: Fri, 14 Nov 2025 16:06:35 +0100 Subject: [PATCH 66/80] Update sax.js to fix large XML file parsing --- dist/index.js | 870 ++++++++++++++++++++++++++-------------------- dist/licenses.txt | 80 +++-- package-lock.json | 7 +- 3 files changed, 552 insertions(+), 405 deletions(-) diff --git a/dist/index.js b/dist/index.js index cdd6319..9273117 100644 --- a/dist/index.js +++ b/dist/index.js @@ -30298,8 +30298,11 @@ function runParallel (tasks, cb) { /***/ 2560: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -;(function (sax) { // wrapper for non-node envs - sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } +;(function (sax) { + // wrapper for non-node envs + sax.parser = function (strict, opt) { + return new SAXParser(strict, opt) + } sax.SAXParser = SAXParser sax.SAXStream = SAXStream sax.createStream = createStream @@ -30316,9 +30319,18 @@ function runParallel (tasks, cb) { sax.MAX_BUFFER_LENGTH = 64 * 1024 var buffers = [ - 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype', - 'procInstName', 'procInstBody', 'entity', 'attribName', - 'attribValue', 'cdata', 'script' + 'comment', + 'sgmlDecl', + 'textNode', + 'tagName', + 'doctype', + 'procInstName', + 'procInstBody', + 'entity', + 'attribName', + 'attribValue', + 'cdata', + 'script', ] sax.EVENTS = [ @@ -30339,10 +30351,10 @@ function runParallel (tasks, cb) { 'ready', 'script', 'opennamespace', - 'closenamespace' + 'closenamespace', ] - function SAXParser (strict, opt) { + function SAXParser(strict, opt) { if (!(this instanceof SAXParser)) { return new SAXParser(strict, opt) } @@ -30361,7 +30373,10 @@ function runParallel (tasks, cb) { parser.noscript = !!(strict || parser.opt.noscript) parser.state = S.BEGIN parser.strictEntities = parser.opt.strictEntities - parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES) + parser.ENTITIES = + parser.strictEntities ? + Object.create(sax.XML_ENTITIES) + : Object.create(sax.ENTITIES) parser.attribList = [] // namespaces form a prototype chain. @@ -30371,6 +30386,12 @@ function runParallel (tasks, cb) { parser.ns = Object.create(rootNS) } + // disallow unquoted attribute values if not otherwise configured + // and strict mode is true + if (parser.opt.unquotedAttributeValues === undefined) { + parser.opt.unquotedAttributeValues = !strict + } + // mostly just for error reporting parser.trackPosition = parser.opt.position !== false if (parser.trackPosition) { @@ -30381,7 +30402,7 @@ function runParallel (tasks, cb) { if (!Object.create) { Object.create = function (o) { - function F () {} + function F() {} F.prototype = o var newf = new F() return newf @@ -30396,7 +30417,7 @@ function runParallel (tasks, cb) { } } - function checkBufferLength (parser) { + function checkBufferLength(parser) { var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) var maxActual = 0 for (var i = 0, l = buffers.length; i < l; i++) { @@ -30432,13 +30453,13 @@ function runParallel (tasks, cb) { parser.bufferCheckPosition = m + parser.position } - function clearBuffers (parser) { + function clearBuffers(parser) { for (var i = 0, l = buffers.length; i < l; i++) { parser[buffers[i]] = '' } } - function flushBuffers (parser) { + function flushBuffers(parser) { closeText(parser) if (parser.cdata !== '') { emitNode(parser, 'oncdata', parser.cdata) @@ -30451,11 +30472,20 @@ function runParallel (tasks, cb) { } SAXParser.prototype = { - end: function () { end(this) }, + end: function () { + end(this) + }, write: write, - resume: function () { this.error = null; return this }, - close: function () { return this.write(null) }, - flush: function () { flushBuffers(this) } + resume: function () { + this.error = null + return this + }, + close: function () { + return this.write(null) + }, + flush: function () { + flushBuffers(this) + }, } var Stream @@ -30464,16 +30494,17 @@ function runParallel (tasks, cb) { } catch (ex) { Stream = function () {} } + if (!Stream) Stream = function () {} var streamWraps = sax.EVENTS.filter(function (ev) { return ev !== 'error' && ev !== 'end' }) - function createStream (strict, opt) { + function createStream(strict, opt) { return new SAXStream(strict, opt) } - function SAXStream (strict, opt) { + function SAXStream(strict, opt) { if (!(this instanceof SAXStream)) { return new SAXStream(strict, opt) } @@ -30514,21 +30545,23 @@ function runParallel (tasks, cb) { me.on(ev, h) }, enumerable: true, - configurable: false + configurable: false, }) }) } SAXStream.prototype = Object.create(Stream.prototype, { constructor: { - value: SAXStream - } + value: SAXStream, + }, }) SAXStream.prototype.write = function (data) { - if (typeof Buffer === 'function' && + if ( + typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function' && - Buffer.isBuffer(data)) { + Buffer.isBuffer(data) + ) { if (!this._decoder) { var SD = (__nccwpck_require__(3193).StringDecoder) this._decoder = new SD('utf8') @@ -30553,7 +30586,10 @@ function runParallel (tasks, cb) { var me = this if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) { me._parser['on' + ev] = function () { - var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments) + var args = + arguments.length === 1 ? + [arguments[0]] + : Array.apply(null, arguments) args.splice(0, 0, ev) me.emit.apply(me, args) } @@ -30576,30 +30612,34 @@ function runParallel (tasks, cb) { // without a significant breaking change to either this parser, or the // JavaScript language. Implementation of an emoji-capable xml parser // is left as an exercise for the reader. - var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + var nameStart = + /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ - var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ + var nameBody = + /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ - var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ - var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ + var entityStart = + /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + var entityBody = + /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ - function isWhitespace (c) { + function isWhitespace(c) { return c === ' ' || c === '\n' || c === '\r' || c === '\t' } - function isQuote (c) { - return c === '"' || c === '\'' + function isQuote(c) { + return c === '"' || c === "'" } - function isAttribEnd (c) { + function isAttribEnd(c) { return c === '>' || isWhitespace(c) } - function isMatch (regex, c) { + function isMatch(regex, c) { return regex.test(c) } - function notMatch (regex, c) { + function notMatch(regex, c) { return !isMatch(regex, c) } @@ -30640,271 +30680,271 @@ function runParallel (tasks, cb) { CLOSE_TAG: S++, // SCRIPT: S++, //