Merge official to master#4485
Conversation
* Update codeql-analysis.yml * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Master for beta merge (#4429) * Merge master into beta (#4418) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b142. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Feature/uft lab phone selection (#4414) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b142. * Fixed DBoperations Git Alerts * Build Errors Fixed * added an api call to fetch the current devices in the UFT Mobile Agent configurations * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * added a button to see the phones when selecting utf device and select from the list * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * tested and fixed all edge cases of the device selection (wrong or empty fields and switching platform) * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * fixed uft devices button * fixed the design and made a filtering for the phone list * fixed phone lab filtering system * Removed the task implementation in unix agent * changed UI from rejects raised * updated the ui design --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * fixed defect number 58085 (#4411) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b142. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * added the status code number in the json and the output of the rest api call * Rename status code parameter for clarity * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Update version numbers in GingerCoreCommon.csproj * Feature/android tv automation support (#4413) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b142. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Add Android TV support and enhance platform handling Enhanced platform support by introducing Android TV as a new platform type (`ePlatformType.AndroidTV`) alongside Mobile and iOS. Updated platform descriptions to include "Mobile/TV" for better clarity and added new image types for visual representation. UI components now display friendly platform descriptions and improved tooltips. Added ComboBox support for enum descriptions in grids. Extended the Appium driver to support Android TV with specific capabilities, configurations. Improved error handling and fallback mechanisms for driver initialization. Updated `ActMobileDevice` to include Android TV-specific actions and defaulted action descriptions to "Mobile/Tv Device Action." Enhanced `DeviceViewPage` to handle Android TV resolutions and scaling. Added dynamic screen size calculations with fallbacks for Android TV. Updated agent configurations to include Android TV as a selectable driver type and set default configurations for Android TV agents. Refactored code for better maintainability, improved exception handling, and consolidated driver configuration logic. Added new image resources for Android TV. Improved `GenericAppiumDriver` to handle Android TV-specific scenarios, including focused element detection and screenshot scaling. * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * enhancement relted android TV - livespy * enhancement related to android TV * Refactor and enhance platform-specific logic Refactored multiple methods across the codebase to improve maintainability, performance, and platform-specific functionality. Key changes include: - Simplified `timenow` method in `PomAllElementsPage.xaml.cs` with improved user feedback and streamlined logic. - Enhanced `BitmapToBase64` in `PomLearnUtils.cs` with null-checks, fallback mechanisms, and better error handling. - Removed redundant methods `LoadGingerLiveSpyScript` and `GetFocusedElementInfo` in `GenericAppiumDriver.cs`. - Refactored `SimulatePhotoOrBarcode` to update `GingerLiveSpy.js` handling. - Added platform-specific logic for `HighLightElement`, `GetElementAtMousePosition`, `FindElementXmlNodeByXY`, `GetElementAtPoint`, and `GetPointOnAppWindow` in `GenericAppiumDriver.cs` to support Android TV, Android (mobile), iOS, and Web. - Improved shadow DOM support and optimized event handling in `GingerLiveSpy.js`. - Enhanced error handling, logging, and fallback mechanisms across the codebase. These changes improve cross-platform compatibility, user experience, and code maintainability. * Refactor and improve code readability and performance Refactored `ResizeDeviceButtons` and `GetDevicePoint` methods in `DeviceViewPage.xaml.cs` to simplify logic, remove redundant checks, and improve maintainability. Updated `eDeviceSource` enum in `MobileDriverCommon.cs` by removing `LambdaTest` and reassigning `AndroidTV`. Replaced the license header in `GingerLiveSpy.js` with an updated Apache License 2.0 notice. Added a new `ElementFromPoint` method to determine the deepest DOM element at a specific point. Refactored driver configuration logic in `AgentOperations.cs` to improve readability, simplify `DriverConfigParam` processing, enhance error handling, and remove duplicate code. Introduced a new `InitDriverConfigs` method for better organization. --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: tanushah <tanushah@amdocs.com> * Enhancement/shared repository folder view2 (#4419) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b142. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * folder view fix * merge conflict resolved * merge conflict resolved * enahcnement * code rabbit comments handled --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Improve Sikuli SetValue handling and focus logic (#4420) Refactored SetValue to check for empty text before typing and use KeyModifier.NONE for normal input. Now sets an error if the value is empty. Also, SetFocusToSelectedApplicationInstance is now called synchronously instead of asynchronously. * Exclamation mark fix (#4421) * Exclamation mark fix * commit * Improve circular reference handling in JSON schema tools (#4422) Enhanced detection and prevention of circular references and stack overflows in JSON schema-to-object generation. Added try-catch blocks for safer property access, improved stack management, and more robust array/property traversal. Also improved error handling when adding API models to repository folders by logging and fallback to parent folder if needed. * Add tests for circular refs in JsonSchemaFaker, update count (#4423) Add unit tests to SwaggetTests.cs to ensure JsonSchemaFaker handles circular and self-referencing JSON schemas without infinite loops or errors. Import NJsonSchema for schema support. Update assertion for "Add a new pet to the store-JSON" to expect 7 return values instead of 8. * Handled set DS value issue (#4425) * add to BF iicon removal (#4426) * add to BF iicon removal * uncommented code * code rabbit suggestion --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * resolved conflicts * resolved conflicts --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: omri1911 <51326278+omri1911@users.noreply.github.com> Co-authored-by: tanushahande2003 <Tanusha.Hande@amdocs.com> Co-authored-by: tanushah <tanushah@amdocs.com> * Prevent Excel formula injection in CSV export (#4431) * Prevent Excel formula injection in CSV export D56006_Added logic to prefix values starting with '=', '+', '-', or '@' with a single quote when exporting BusinessFlow, Activity, Act description, and input parameters to CSV. This ensures spreadsheet applications treat these fields as plain text, preventing misinterpretation as formulas. Also refactored code for clarity using intermediate variables. * Refactor CSV export for clarity and null safety Renamed method parameters and loop variables for clarity and consistency. Updated references to use descriptive names. Added null check for act.Description to prevent exceptions. Improves code readability and robustness. --------- Co-authored-by: tanushah <tanushah@amdocs.com> * added an option to change text color in consoleDriver window * Action Description fix (#4434) * Update to .NET 10, package versions, and minor UI tweaks (#4435) * Update to .NET 10, package versions, and minor UI tweaks Upgraded all projects from .NET 8.0 to .NET 10.0. Updated System.Text.Json to 10.0.2 and System.Drawing.Common to 10.0.2. Added Microsoft.IdentityModel.JsonWebTokens and Microsoft.IdentityModel.Tokens (8.15.0) to support JWT features. Bumped protobuf-net packages to 3.2.56. Improved XAML grid layout in DataSourceExportToExcelPage.xaml and added DesignerSerializationVisibility attributes in SnippingTool.cs. No functional logic changes. * upgrade dotnet version to 10 * push supported dotnet version for Github actions * Fix Dotnet version on Test stage * Fix CLI TestsGithub * Fix Test Dotnet Framework of Github with new version of dotnet * nuget packages updation * Downgrade EPPlus and Excel Interop, update dependencies Downgraded EPPlus to 6.0.4 and Microsoft.Office.Interop.Excel to 15.0.4795.1001 across multiple projects for compatibility. Removed Microsoft.IdentityModel.* and System.IdentityModel.Tokens.Jwt from core projects, and removed SixLabors.ImageSharp from GingerCoreNET. Reformatted System.Globalization entry in GingerCore. These changes address dependency and compatibility issues. --------- Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Nadeem Jazmawe <nadeemj@amdocs.com> * Mask API key in UI and update only on user edit (#4436) * Mask API key in UI and update only on user edit Added masking for API key in VRTExternalConfigurationsPage to prevent exposure. The real key is hidden with a generic mask, and only updated if the user changes the field. Existing key is preserved unless explicitly edited. * Addition of validation * updated validation * updated validation rule --------- Co-authored-by: tanushah <tanushah@amdocs.com> * Fix codeql-config.yml file place * Upgrade Github Actions versions * Update license headers to 2026 and add missing headers (#4440) Updated the copyright year in all license headers from 2014-2025 to 2014-2026 across the codebase. Added the standard license header to several files that were previously missing it. No functional code changes were made. Co-authored-by: tanushah <tanushah@amdocs.com> * Register serializer classes earlier; null check in IsReady (#4441) Ensure MyRepositoryItem is registered with the serializer before test solution creation in SolutionRepositoryMultiThreadTest. Remove redundant registration call. Add null check to IsReady property in GingerSocket2Test to prevent possible NullReferenceException. * Downgrade LibGit2Sharp.NativeBinaries to 2.0.278 (#4442) Updated GingerCore.csproj and GingerCoreNET.csproj to use LibGit2Sharp.NativeBinaries version 2.0.278 instead of 2.0.323. No other changes were made. Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Updated the SSH and Cryptography nuget package to latest (#4432) Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * contract update for pipeline run description (#4437) Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Added Code to allow Solution File to be loaded using SolutionRepository and changed version to 2026.3 (#4443) Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> --------- Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: omri1911 <51326278+omri1911@users.noreply.github.com> Co-authored-by: tanushahande2003 <Tanusha.Hande@amdocs.com> Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Omri Agady <omri@agady.com> Co-authored-by: Nadeem Jazmawe <nadeemj@amdocs.com> Co-authored-by: Nadeem Jazmawe <44744877+NadeemJazmawe@users.noreply.github.com>
* Revert solution iteminfo from SolutionRepository * updated nuget version for publishing --------- Co-authored-by: Mayur Rathi <mayurrat@amdocs.com>
…-Solution-xml-in-parser-using-Solution-Repository-classes Allow fetching ginger solution xml in parser using solution repository classes
…tected by Dependebot Github Security scan alert (#4451) Co-authored-by: Mayur Rathi <mayurrat@amdocs.com>
* Enhance API Key encryption and remove masking logic API Key is now encrypted on field exit and before saving, unless it is a value expression or already encrypted. Removed the previous masking/tag mechanism for the API Key textbox, simplifying the logic and improving security. Added necessary using directives for new functionality. * Encrypt API keys and tokens and before save Added automatic encryption for Applitools and Sealights sensitive fields (API keys, agent tokens) when text boxes lose focus and before saving configurations. Skips encryption for value expressions and already encrypted values. Event handlers are attached and re-attached as needed. Includes minor refactoring and comments. * by mistake changes revert --------- Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com>
* Refactor export query logic for Excel data source Improve CreateQueryWithWhereList using LINQ and switch for operators, skipping invalid conditions and returning cleaner query strings. Update DataSourceExportToExcelPage to persist ExportQueryValue in both action and standalone modes, ensuring consistent query generation and improved code clarity. * Add NotStartsWith/NotEndsWith operators and improve where clause Added support for "NotStartsWith" and "NotEndsWith" operators in SQL-like predicate generation using "Not Like". Also updated logic to omit the "where" keyword when no conditions are present, returning only the column list for cleaner output. --------- Co-authored-by: tanushah <tanushah@amdocs.com>
Co-authored-by: amanpras <amanpras@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com>
* Shared repository folder item fix * Column hide for Overriting Share repo --------- Co-authored-by: amanpras <amanpras@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com>
Switched Build.yml and Release.yml to install and reference .NET SDK 10.0.103 instead of 8.0.100. Updated all file copy and signing steps to use net10.0-windows10.0.17763.0 output directories. Adjusted comments and references to match the new .NET version.
* Update codeql-analysis.yml * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Master for beta merge (#4429) * Merge master into beta (#4418) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Feature/uft lab phone selection (#4414) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * added an api call to fetch the current devices in the UFT Mobile Agent configurations * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * added a button to see the phones when selecting utf device and select from the list * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * tested and fixed all edge cases of the device selection (wrong or empty fields and switching platform) * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * fixed uft devices button * fixed the design and made a filtering for the phone list * fixed phone lab filtering system * Removed the task implementation in unix agent * changed UI from rejects raised * updated the ui design --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * fixed defect number 58085 (#4411) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * added the status code number in the json and the output of the rest api call * Rename status code parameter for clarity * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Update version numbers in GingerCoreCommon.csproj * Feature/android tv automation support (#4413) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Add Android TV support and enhance platform handling Enhanced platform support by introducing Android TV as a new platform type (`ePlatformType.AndroidTV`) alongside Mobile and iOS. Updated platform descriptions to include "Mobile/TV" for better clarity and added new image types for visual representation. UI components now display friendly platform descriptions and improved tooltips. Added ComboBox support for enum descriptions in grids. Extended the Appium driver to support Android TV with specific capabilities, configurations. Improved error handling and fallback mechanisms for driver initialization. Updated `ActMobileDevice` to include Android TV-specific actions and defaulted action descriptions to "Mobile/Tv Device Action." Enhanced `DeviceViewPage` to handle Android TV resolutions and scaling. Added dynamic screen size calculations with fallbacks for Android TV. Updated agent configurations to include Android TV as a selectable driver type and set default configurations for Android TV agents. Refactored code for better maintainability, improved exception handling, and consolidated driver configuration logic. Added new image resources for Android TV. Improved `GenericAppiumDriver` to handle Android TV-specific scenarios, including focused element detection and screenshot scaling. * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * enhancement relted android TV - livespy * enhancement related to android TV * Refactor and enhance platform-specific logic Refactored multiple methods across the codebase to improve maintainability, performance, and platform-specific functionality. Key changes include: - Simplified `timenow` method in `PomAllElementsPage.xaml.cs` with improved user feedback and streamlined logic. - Enhanced `BitmapToBase64` in `PomLearnUtils.cs` with null-checks, fallback mechanisms, and better error handling. - Removed redundant methods `LoadGingerLiveSpyScript` and `GetFocusedElementInfo` in `GenericAppiumDriver.cs`. - Refactored `SimulatePhotoOrBarcode` to update `GingerLiveSpy.js` handling. - Added platform-specific logic for `HighLightElement`, `GetElementAtMousePosition`, `FindElementXmlNodeByXY`, `GetElementAtPoint`, and `GetPointOnAppWindow` in `GenericAppiumDriver.cs` to support Android TV, Android (mobile), iOS, and Web. - Improved shadow DOM support and optimized event handling in `GingerLiveSpy.js`. - Enhanced error handling, logging, and fallback mechanisms across the codebase. These changes improve cross-platform compatibility, user experience, and code maintainability. * Refactor and improve code readability and performance Refactored `ResizeDeviceButtons` and `GetDevicePoint` methods in `DeviceViewPage.xaml.cs` to simplify logic, remove redundant checks, and improve maintainability. Updated `eDeviceSource` enum in `MobileDriverCommon.cs` by removing `LambdaTest` and reassigning `AndroidTV`. Replaced the license header in `GingerLiveSpy.js` with an updated Apache License 2.0 notice. Added a new `ElementFromPoint` method to determine the deepest DOM element at a specific point. Refactored driver configuration logic in `AgentOperations.cs` to improve readability, simplify `DriverConfigParam` processing, enhance error handling, and remove duplicate code. Introduced a new `InitDriverConfigs` method for better organization. --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: tanushah <tanushah@amdocs.com> * Enhancement/shared repository folder view2 (#4419) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * folder view fix * merge conflict resolved * merge conflict resolved * enahcnement * code rabbit comments handled --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Improve Sikuli SetValue handling and focus logic (#4420) Refactored SetValue to check for empty text before typing and use KeyModifier.NONE for normal input. Now sets an error if the value is empty. Also, SetFocusToSelectedApplicationInstance is now called synchronously instead of asynchronously. * Exclamation mark fix (#4421) * Exclamation mark fix * commit * Improve circular reference handling in JSON schema tools (#4422) Enhanced detection and prevention of circular references and stack overflows in JSON schema-to-object generation. Added try-catch blocks for safer property access, improved stack management, and more robust array/property traversal. Also improved error handling when adding API models to repository folders by logging and fallback to parent folder if needed. * Add tests for circular refs in JsonSchemaFaker, update count (#4423) Add unit tests to SwaggetTests.cs to ensure JsonSchemaFaker handles circular and self-referencing JSON schemas without infinite loops or errors. Import NJsonSchema for schema support. Update assertion for "Add a new pet to the store-JSON" to expect 7 return values instead of 8. * Handled set DS value issue (#4425) * add to BF iicon removal (#4426) * add to BF iicon removal * uncommented code * code rabbit suggestion --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * resolved conflicts * resolved conflicts --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: omri1911 <51326278+omri1911@users.noreply.github.com> Co-authored-by: tanushahande2003 <Tanusha.Hande@amdocs.com> Co-authored-by: tanushah <tanushah@amdocs.com> * Prevent Excel formula injection in CSV export (#4431) * Prevent Excel formula injection in CSV export D56006_Added logic to prefix values starting with '=', '+', '-', or '@' with a single quote when exporting BusinessFlow, Activity, Act description, and input parameters to CSV. This ensures spreadsheet applications treat these fields as plain text, preventing misinterpretation as formulas. Also refactored code for clarity using intermediate variables. * Refactor CSV export for clarity and null safety Renamed method parameters and loop variables for clarity and consistency. Updated references to use descriptive names. Added null check for act.Description to prevent exceptions. Improves code readability and robustness. --------- Co-authored-by: tanushah <tanushah@amdocs.com> * added an option to change text color in consoleDriver window * Action Description fix (#4434) * Update to .NET 10, package versions, and minor UI tweaks (#4435) * Update to .NET 10, package versions, and minor UI tweaks Upgraded all projects from .NET 8.0 to .NET 10.0. Updated System.Text.Json to 10.0.2 and System.Drawing.Common to 10.0.2. Added Microsoft.IdentityModel.JsonWebTokens and Microsoft.IdentityModel.Tokens (8.15.0) to support JWT features. Bumped protobuf-net packages to 3.2.56. Improved XAML grid layout in DataSourceExportToExcelPage.xaml and added DesignerSerializationVisibility attributes in SnippingTool.cs. No functional logic changes. * upgrade dotnet version to 10 * push supported dotnet version for Github actions * Fix Dotnet version on Test stage * Fix CLI TestsGithub * Fix Test Dotnet Framework of Github with new version of dotnet * nuget packages updation * Downgrade EPPlus and Excel Interop, update dependencies Downgraded EPPlus to 6.0.4 and Microsoft.Office.Interop.Excel to 15.0.4795.1001 across multiple projects for compatibility. Removed Microsoft.IdentityModel.* and System.IdentityModel.Tokens.Jwt from core projects, and removed SixLabors.ImageSharp from GingerCoreNET. Reformatted System.Globalization entry in GingerCore. These changes address dependency and compatibility issues. --------- Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Nadeem Jazmawe <nadeemj@amdocs.com> * Mask API key in UI and update only on user edit (#4436) * Mask API key in UI and update only on user edit Added masking for API key in VRTExternalConfigurationsPage to prevent exposure. The real key is hidden with a generic mask, and only updated if the user changes the field. Existing key is preserved unless explicitly edited. * Addition of validation * updated validation * updated validation rule --------- Co-authored-by: tanushah <tanushah@amdocs.com> * Fix codeql-config.yml file place * Upgrade Github Actions versions * Update license headers to 2026 and add missing headers (#4440) Updated the copyright year in all license headers from 2014-2025 to 2014-2026 across the codebase. Added the standard license header to several files that were previously missing it. No functional code changes were made. Co-authored-by: tanushah <tanushah@amdocs.com> * Register serializer classes earlier; null check in IsReady (#4441) Ensure MyRepositoryItem is registered with the serializer before test solution creation in SolutionRepositoryMultiThreadTest. Remove redundant registration call. Add null check to IsReady property in GingerSocket2Test to prevent possible NullReferenceException. * Downgrade LibGit2Sharp.NativeBinaries to 2.0.278 (#4442) Updated GingerCore.csproj and GingerCoreNET.csproj to use LibGit2Sharp.NativeBinaries version 2.0.278 instead of 2.0.323. No other changes were made. Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Updated the SSH and Cryptography nuget package to latest (#4432) Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * contract update for pipeline run description (#4437) Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Added Code to allow Solution File to be loaded using SolutionRepository and changed version to 2026.3 (#4443) Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> * Refactor export query generation and persistence logic (#4447) Rewrite CreateQueryWithWhereList to use LINQ for column selection, simplify WHERE clause construction with a switch statement, and return queries in the expected format. Update DataSourceExportToExcelPage to persist ExportQueryValue for both action and non-action table elements. Clean up code and improve maintainability. Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Updated to latest version of Magick.NET nuget due to vulnarability detected by Dependebot Github Security scan alert (#4451) (#4455) Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> * Merge 2026.3 to master (#4457) * Merge master to official branch (#4444) * Update codeql-analysis.yml * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Master for beta merge (#4429) * Merge master into beta (#4418) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Feature/uft lab phone selection (#4414) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * added an api call to fetch the current devices in the UFT Mobile Agent configurations * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * added a button to see the phones when selecting utf device and select from the list * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * tested and fixed all edge cases of the device selection (wrong or empty fields and switching platform) * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * fixed uft devices button * fixed the design and made a filtering for the phone list * fixed phone lab filtering system * Removed the task implementation in unix agent * changed UI from rejects raised * updated the ui design --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * fixed defect number 58085 (#4411) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * added the status code number in the json and the output of the rest api call * Rename status code parameter for clarity * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Update version numbers in GingerCoreCommon.csproj * Feature/android tv automation support (#4413) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Add Android TV support and enhance platform handling Enhanced platform support by introducing Android TV as a new platform type (`ePlatformType.AndroidTV`) alongside Mobile and iOS. Updated platform descriptions to include "Mobile/TV" for better clarity and added new image types for visual representation. UI components now display friendly platform descriptions and improved tooltips. Added ComboBox support for enum descriptions in grids. Extended the Appium driver to support Android TV with specific capabilities, configurations. Improved error handling and fallback mechanisms for driver initialization. Updated `ActMobileDevice` to include Android TV-specific actions and defaulted action descriptions to "Mobile/Tv Device Action." Enhanced `DeviceViewPage` to handle Android TV resolutions and scaling. Added dynamic screen size calculations with fallbacks for Android TV. Updated agent configurations to include Android TV as a selectable driver type and set default configurations for Android TV agents. Refactored code for better maintainability, improved exception handling, and consolidated driver configuration logic. Added new image resources for Android TV. Improved `GenericAppiumDriver` to handle Android TV-specific scenarios, including focused element detection and screenshot scaling. * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * enhancement relted android TV - livespy * enhancement related to android TV * Refactor and enhance platform-specific logic Refactored multiple methods across the codebase to improve maintainability, performance, and platform-specific functionality. Key changes include: - Simplified `timenow` method in `PomAllElementsPage.xaml.cs` with improved user feedback and streamlined logic. - Enhanced `BitmapToBase64` in `PomLearnUtils.cs` with null-checks, fallback mechanisms, and better error handling. - Removed redundant methods `LoadGingerLiveSpyScript` and `GetFocusedElementInfo` in `GenericAppiumDriver.cs`. - Refactored `SimulatePhotoOrBarcode` to update `GingerLiveSpy.js` handling. - Added platform-specific logic for `HighLightElement`, `GetElementAtMousePosition`, `FindElementXmlNodeByXY`, `GetElementAtPoint`, and `GetPointOnAppWindow` in `GenericAppiumDriver.cs` to support Android TV, Android (mobile), iOS, and Web. - Improved shadow DOM support and optimized event handling in `GingerLiveSpy.js`. - Enhanced error handling, logging, and fallback mechanisms across the codebase. These changes improve cross-platform compatibility, user experience, and code maintainability. * Refactor and improve code readability and performance Refactored `ResizeDeviceButtons` and `GetDevicePoint` methods in `DeviceViewPage.xaml.cs` to simplify logic, remove redundant checks, and improve maintainability. Updated `eDeviceSource` enum in `MobileDriverCommon.cs` by removing `LambdaTest` and reassigning `AndroidTV`. Replaced the license header in `GingerLiveSpy.js` with an updated Apache License 2.0 notice. Added a new `ElementFromPoint` method to determine the deepest DOM element at a specific point. Refactored driver configuration logic in `AgentOperations.cs` to improve readability, simplify `DriverConfigParam` processing, enhance error handling, and remove duplicate code. Introduced a new `InitDriverConfigs` method for better organization. --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: tanushah <tanushah@amdocs.com> * Enhancement/shared repository folder view2 (#4419) * Mobile accessibility issue for ios - fix * added CodeQL WF * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * Update codeql-analysis.yml * removed macOS build steps * Java Explorer issue fix * Update codeql-analysis.yml excluding unwanted folders and projects * Update README.md updating for triggering security * mobily accessibility locators identification issue fix * codeql related updates * coderabbit comments handled * Fix: GitHub SecurityAlerts 198,199, 200, 201, 202 * its tested and working * Codecy suggestions * CodeRabit Suggestions * CodeRabbit suggestions * CodeRabbit Suggestions * Fix for Git Security Alert 181 * codacy suggestions * RemovedUnusedMethod * Pull all variables except password variables * Removing code that passes Ginger variables to Robot script using temp file * Revert "Removing code that passes Ginger variables to Robot script using temp file" This reverts commit c62b1428dfecc31b178de767073a22de26682a1c. * Fixed DBoperations Git Alerts * Build Errors Fixed * Removed Unused GingerExecutionReport folder from Ginger also handled few codacy comments * Code Issues * Enabled only Windows build for CodeQL * added variable option * MSSQL Fix Test * Test Changes * Bar user inputted connection string. * Not using GetConnectionString method * added removing variable value code * code rabbit suggested changes * code rabbit changes * Do not assign the Expression to mValueCalculated if it was failed to evaluate. * Enhancement Excel Action and Refactoring * code refactor * Enhanced the Unit test cases for excel action according to recent enhancements * Codacy issues * Upgraded Magick.NET-Q16-AnyCPU nugget to 14.10.0 * codacy * removed unwanted check * code refactoring * updated ut * codacy and code rabbit comments handled * Pull Address adjustment * serliazation added * Serliazation error fix * updating version updating version * Latest changes for Excel action * workwork book * coderabbit comments * lock object * coder rabbit issue * Handled the file name length while api model configuration, and added length to subfolder creation * resolved the review comment from code rabbit * Handled the issue of value expression getting truncated * fixing the index issue * Update codeql-analysis.yml * Exclude JavaScript from Scanning for security Vulnarabilities * Exclude JavaScript from Scanning for security Vulnarabilities_Master * store to added hidden option * removed code * code refactor * code refactor * Update codeql-analysis.yml * Revert * Bug fixes for excel action * code removed * coderabbit comments * filter issue fix * As stated in bug: modifed error log to "Error" instead of "Warning" * push latest fixes * unit test case change according to enhancement * Latest * Rollbacked the changes made for handling the file name length * Modified code to support maxlength only for folder name * Removed the task implementation in unix agent * Fixed issue of special characters from toerh languages are not getting sent to mainframe * Shared Repository Folder View (#4416) * Shared Repository Folder View * enhancement * code rabbit comments handled * code rabbit comments handle --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * folder view fix * merge conflict resolved * merge conflict resolved * enahcnement * code rabbit comments handled --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> * Improve Sikuli SetValue handling and focus logic (#4420) Refactored SetValue to check for empty text before typing and use KeyModifier.NONE for normal input. Now sets an error if the value is empty. Also, SetFocusToSelectedApplicationInstance is now called synchronously instead of asynchronously. * Exclamation mark fix (#4421) * Exclamation mark fix * commit * Improve circular reference handling in JSON schema tools (#4422) Enhanced detection and prevention of circular references and stack overflows in JSON schema-to-object generation. Added try-catch blocks for safer property access, improved stack management, and more robust array/property traversal. Also improved error handling when adding API models to repository folders by logging and fallback to parent folder if needed. * Add tests for circular refs in JsonSchemaFaker, update count (#4423) Add unit tests to SwaggetTests.cs to ensure JsonSchemaFaker handles circular and self-referencing JSON schemas without infinite loops or errors. Import NJsonSchema for schema support. Update assertion for "Add a new pet to the store-JSON" to expect 7 return values instead of 8. * Handled set DS value issue (#4425) * add to BF iicon removal (#4426) * add to BF iicon removal * uncommented code * code rabbit suggestion --------- Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * resolved conflicts * resolved conflicts --------- Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: omri1911 <51326278+omri1911@users.noreply.github.com> Co-authored-by: tanushahande2003 <Tanusha.Hande@amdocs.com> Co-authored-by: tanushah <tanushah@amdocs.com> * Prevent Excel formula injection in CSV export (#4431) * Prevent Excel formula injection in CSV export D56006_Added logic to prefix values starting with '=', '+', '-', or '@' with a single quote when exporting BusinessFlow, Activity, Act description, and input parameters to CSV. This ensures spreadsheet applications treat these fields as plain text, preventing misinterpretation as formulas. Also refactored code for clarity using intermediate variables. * Refactor CSV export for clarity and null safety Renamed method parameters and loop variables for clarity and consistency. Updated references to use descriptive names. Added null check for act.Description to prevent exceptions. Improves code readability and robustness. --------- Co-authored-by: tanushah <tanushah@amdocs.com> * added an option to change text color in consoleDriver window * Action Description fix (#4434) * Update to .NET 10, package versions, and minor UI tweaks (#4435) * Update to .NET 10, package versions, and minor UI tweaks Upgraded all projects from .NET 8.0 to .NET 10.0. Updated System.Text.Json to 10.0.2 and System.Drawing.Common to 10.0.2. Added Microsoft.IdentityModel.JsonWebTokens and Microsoft.IdentityModel.Tokens (8.15.0) to support JWT features. Bumped protobuf-net packages to 3.2.56. Improved XAML grid layout in DataSourceExportToExcelPage.xaml and added DesignerSerializationVisibility attributes in SnippingTool.cs. No functional logic changes. * upgrade dotnet version to 10 * push supported dotnet version for Github actions * Fix Dotnet version on Test stage * Fix CLI TestsGithub * Fix Test Dotnet Framework of Github with new version of dotnet * nuget packages updation * Downgrade EPPlus and Excel Interop, update dependencies Downgraded EPPlus to 6.0.4 and Microsoft.Office.Interop.Excel to 15.0.4795.1001 across multiple projects for compatibility. Removed Microsoft.IdentityModel.* and System.IdentityModel.Tokens.Jwt from core projects, and removed SixLabors.ImageSharp from GingerCoreNET. Reformatted System.Globalization entry in GingerCore. These changes address dependency and compatibility issues. --------- Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> Co-authored-by: Nadeem Jazmawe <nadeemj@amdocs.com> * Mask API key in UI and update only on user edit (#4436) * Mask API key in UI and update only on user edit Added masking for API key in VRTExternalConfigurationsPage to prevent exposure. The real key is hidden with a generic mask, and only updated if the user changes the field. Existing key is preserved unless explicitly edited. * Addition of validation * updated validation * updated validation rule --------- Co-authored-by: tanushah <tanushah@amdocs.com> * Fix codeql-config.yml file place * Upgrade Github Actions versions * Update license headers to 2026 and add missing headers (#4440) Updated the copyright year in all license headers from 2014-2025 to 2014-2026 across the codebase. Added the standard license header to several files that were previously missing it. No functional code changes were made. Co-authored-by: tanushah <tanushah@amdocs.com> * Register serializer classes earlier; null check in IsReady (#4441) Ensure MyRepositoryItem is registered with the serializer before test solution creation in SolutionRepositoryMultiThreadTest. Remove redundant registration call. Add null check to IsReady property in GingerSocket2Test to prevent possible NullReferenceException. * Downgrade LibGit2Sharp.NativeBinaries to 2.0.278 (#4442) Updated GingerCore.csproj and GingerCoreNET.csproj to use LibGit2Sharp.NativeBinaries version 2.0.278 instead of 2.0.323. No other changes were made. Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Updated the SSH and Cryptography nuget package to latest (#4432) Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * contract update for pipeline run description (#4437) Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com> * Added Code to allow Solution File to be loaded using SolutionRepository and changed version to 2026.3 (#4443) Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> --------- Co-authored-by: Mayur Rathi <92859083+rathimayur@users.noreply.github.com> Co-authored-by: shahanemahesh <mahesh.shahane@amdocs.com> Co-authored-by: Mahesh Shahane <41142993+shahanemahesh@users.noreply.github.com> Co-authored-by: AMAN PRASAD <44187990+AmanPrasad43@users.noreply.github.com> Co-authored-by: Mahesh Kale <41791819+Maheshkale447@users.noreply.github.com> Co-authored-by: makhlaque <mohd.akhlaque@vodafoneziggo.com> Co-authored-by: mohd-amdocs <mohd.akhlaque@amdocs.com> Co-authored-by: Gokul Bothe <gokulbothe39@gmail.com> Co-authored-by: Meni Kadosh <menikadosh1@gmail.com> Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> Co-authored-by: Gokul Bothe <96767038+GokulBothe99@users.noreply.github.com> Co-authored-by: omri1911 <51326278+omri1911@users.noreply.github.com> Co-authored-by: tanushahande2003 <Tanusha.Hande@amdocs.com> Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Omri Agady <omri@agady.com> Co-authored-by: Nadeem Jazmawe <nadeemj@amdocs.com> Co-authored-by: Nadeem Jazmawe <44744877+NadeemJazmawe@users.noreply.github.com> * Updated ginger core common nuget version (#4445) * Revert solution iteminfo from SolutionRepository * updated nuget version for publishing --------- Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> * Allow Fetching/Updating Ginger.Solution.xml through SolutionRepository/parser service * Need to Update GingerCoreCommon Version to generate new nuget package * Updated to latest version of Magick.NET nuget due to vulnarability detected by Dependebot Github Security scan alert (#4451) Co-authored-by: Mayur Rathi <mayurrat@amdocs.com> * Enhance API Key encryption and remove masking logic (#4449…
Co-authored-by: amanpras <amanpras@amdocs.com>
Prevents a potential NullReferenceException by ensuring mSubFoldersCache is not null before calling Any() when handling deleted folder events.
Co-authored-by: amanpras <amanpras@amdocs.com>
* Improve error handling in Output Values grid setup Wrapped SetActReturnValuesGrid() in a try-catch block to log errors during Output Values grid initialization. * Restrict catch block to NullReferenceException only Changed the catch block in ActionEditPage.xaml.cs to handle only NullReferenceException instead of all exceptions when initializing the Output Values grid. This makes error handling more specific and avoids masking unrelated exceptions. * Improve error handling for Output Values grid init failure Enhanced the catch block for NullReferenceException during Output Values grid initialization. Now logs only the exception message, sets relevant flags to false, and returns early to prevent further errors if initialization fails. This increases stability and clarity in error reporting. * Improve error logging and remove early return in output grid Enhanced error logging by passing the full exception object to the logger for better context. Removed code that set flags and returned early after a NullReferenceException, allowing the method to continue execution after logging the error. --------- Co-authored-by: tanushah <tanushah@amdocs.com>
Co-authored-by: amanpras <amanpras@amdocs.com>
Enhances reliability of UI element highlighting and rectangle drawing, especially for Android automation. Ensures up-to-date element details are used, validates and refreshes element bounds before drawing overlays, and preserves correct element identity for web highlights. Adds error handling and makes driver highlight requests more robust, addressing issues with invalid rectangles and incorrect element selection in live spy and mobile scenarios. Co-authored-by: tanushah <tanushah@amdocs.com>
Rework filtering to use the currently selected OS from the ComboBox instead of the initial platform preference. Remove the PlatformMatchesInitial helper and related logic. Now, items are filtered based on the specific OS selection, improving clarity and maintainability. Co-authored-by: tanushah <tanushah@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com>
…ge Sikuli Action (#4482) Co-authored-by: amanpras <amanpras@amdocs.com>
WalkthroughThis PR introduces multi-window screenshot capture capabilities across multiple drivers (Windows, Java, Selenium, Appium), adds element enrichment/learning to element exploration workflows, improves element bounds validation and refresh logic, simplifies platform filtering in UFT credentials dialogs, and updates web report assets alongside version bumps. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~85 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ❌ 3❌ Failed checks (2 warnings, 1 inconclusive)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 17
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (5)
Ginger/GingerCoreCommon/DataBaseLib/ExportToExcelConfig.cs (3)
155-156:⚠️ Potential issue | 🔴 CriticalFix logic error: leading " AND " when first items are skipped.
The code uses the loop index
ito determine when to add " AND " separators. However, when the first item(s) are skipped due to invalidTableColumnorRowValue, the first valid item will havei > 0, causing a leading " AND " to be added:Example:
- i=0: invalid item (empty TableColumn), skipped
- i=1: valid item, but i > 0 → whereClause =
" AND column = 'value'"❌This produces a malformed where clause.
🔧 Proposed fix using a flag to track the first valid item
string whereClause = ""; + bool isFirstPredicate = true; // Build WHERE clause (Ginger format) for (int i = 0; i < whereConditionList.Count; i++) { var item = whereConditionList[i]; // PR change: skip invalid items if (string.IsNullOrEmpty(item.TableColumn) || string.IsNullOrEmpty(item.RowValue)) continue; string predicate = ""; switch (item.Opertor) { case "Equals": predicate = $"{item.TableColumn} = \"{item.RowValue}\""; break; case "NotEquals": predicate = $"{item.TableColumn} <> \"{item.RowValue}\""; break; case "Contains": predicate = $"{item.TableColumn} Like \"%{item.RowValue}%\""; break; case "NotContains": predicate = $"{item.TableColumn} Not Like \"%{item.RowValue}%\""; break; case "StartsWith": predicate = $"{item.TableColumn} Like \"{item.RowValue}%\""; break; case "EndsWith": predicate = $"{item.TableColumn} Like \"%{item.RowValue}\""; break; case "NotStartsWith": predicate = $"{item.TableColumn} Not Like \"{item.RowValue}%\""; break; case "NotEndsWith": predicate = $"{item.TableColumn} Not Like \"%{item.RowValue}\""; break; } - if (i > 0) + if (!isFirstPredicate) whereClause += " AND "; + else + isFirstPredicate = false; whereClause += predicate; }Also applies to: 187-189
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Ginger/GingerCoreCommon/DataBaseLib/ExportToExcelConfig.cs` around lines 155 - 156, The where-clause builder incorrectly uses the loop index `i` to decide when to prepend " AND ", which yields a leading " AND " if earlier items were skipped; in ExportToExcelConfig.cs (in the method that constructs the WHERE clause inside the loop containing the if (string.IsNullOrEmpty(item.TableColumn) || string.IsNullOrEmpty(item.RowValue)) continue;), replace the i-based check with a boolean flag (e.g., firstClauseAdded) or a counter that tracks how many valid clauses have been appended and only prepend " AND " when that flag/counter indicates a previous valid clause exists; apply the same change to the other similar block referenced around lines 187-189 so both places use the flag/counter instead of i to determine adding " AND ".
155-156:⚠️ Potential issue | 🟡 MinorAdd error logging when skipping invalid where condition items.
The code silently skips where condition items with missing
TableColumnorRowValue. This can hide configuration errors or data integrity issues, making debugging difficult.Consider logging these skipped items to help diagnose issues.
📝 Proposed fix to add logging
// PR change: skip invalid items if (string.IsNullOrEmpty(item.TableColumn) || string.IsNullOrEmpty(item.RowValue)) + { + Reporter.ToLog(eLogLevel.ERROR, $"Skipping invalid where condition item: TableColumn='{item.TableColumn}', RowValue='{item.RowValue}'"); continue; + }As per coding guidelines, use
Reporter.ToLog(eLogLevel.ERROR, message)for logging errors in**/*.csfiles.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Ginger/GingerCoreCommon/DataBaseLib/ExportToExcelConfig.cs` around lines 155 - 156, The loop that currently silently continues when a where-condition item has null/empty TableColumn or RowValue should log an error before skipping; inside the block that checks if (string.IsNullOrEmpty(item.TableColumn) || string.IsNullOrEmpty(item.RowValue)) add a Reporter.ToLog(eLogLevel.ERROR, ...) call that includes identifying details (e.g., item.TableColumn, item.RowValue, and if available an index or item.ToString()) and a short message indicating the item was skipped due to invalid where condition; ensure this change is made in the ExportToExcelConfig code path that processes the where-condition items so invalid config/data is recorded.
159-186:⚠️ Potential issue | 🟠 MajorAdd default case to handle unrecognized operators.
The switch statement has no default case. If
item.Opertordoesn't match any of the defined cases,predicateremains an empty string and still gets appended to the WHERE clause (line 190), producing malformed output such as:
"col1 = 'val1' AND AND col2 = 'val2'"(double AND separator)"col1 = 'val1' AND "(trailing AND)Add a default case to handle or log unrecognized operators.
🛡️ Proposed fix with default case and logging
switch (item.Opertor) { case "Equals": predicate = $"{item.TableColumn} = \"{item.RowValue}\""; break; case "NotEquals": predicate = $"{item.TableColumn} <> \"{item.RowValue}\""; break; case "Contains": predicate = $"{item.TableColumn} Like \"%{item.RowValue}%\""; break; case "NotContains": predicate = $"{item.TableColumn} Not Like \"%{item.RowValue}%\""; break; case "StartsWith": predicate = $"{item.TableColumn} Like \"{item.RowValue}%\""; break; case "EndsWith": predicate = $"{item.TableColumn} Like \"%{item.RowValue}\""; break; case "NotStartsWith": predicate = $"{item.TableColumn} Not Like \"{item.RowValue}%\""; break; case "NotEndsWith": predicate = $"{item.TableColumn} Not Like \"%{item.RowValue}\""; break; + default: + Reporter.ToLog(eLogLevel.ERROR, $"Unrecognized operator '{item.Opertor}' for column '{item.TableColumn}'. Skipping condition."); + continue; // Skip this item }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Ginger/GingerCoreCommon/DataBaseLib/ExportToExcelConfig.cs` around lines 159 - 186, The switch on item.Opertor in ExportToExcelConfig.cs can leave predicate empty for unknown operators which later gets appended into the WHERE clause; add a default case that logs or records the unrecognized operator (including item.Opertor and item.TableColumn) and sets predicate to null/empty in a way that the calling code will skip adding it, and additionally guard the code that appends predicate to the WHERE clause to only append when predicate is non-empty (check predicate != null/""), so you never produce stray "AND" or trailing separators.Ginger/GingerCore/Actions/UIAutomation/UIAComWrapperHelper.cs (1)
4858-4891:⚠️ Potential issue | 🟠 MajorDon’t let one bad window abort the entire multi-window capture.
Any exception from one
GetAppWindowAsBitmap(aw)/GetAppDialogAsBitmap(aw)currently exits the whole method, so later windows are never captured. This new path should catch per window and continue.Proposed change
if (act.WindowsToCapture == Act.eWindowsToCapture.AllAvailableWindows) { List<AppWindow> windows = GetListOfDriverAppWindows(); foreach (AppWindow aw in windows) { - using (Bitmap bmp = GetAppWindowAsBitmap(aw)) + try { - if (bmp != null) + using (Bitmap bmp = GetAppWindowAsBitmap(aw)) { - act.AddScreenShot(bmp); + if (bmp != null) + { + act.AddScreenShot(bmp); + } } - } - List<Bitmap> dialogs = GetAppDialogAsBitmap(aw); - foreach (Bitmap dialogBmp in dialogs) - { - act.AddScreenShot(dialogBmp); - } - dialogs.Clear(); + + List<Bitmap> dialogs = GetAppDialogAsBitmap(aw); + foreach (Bitmap dialogBmp in dialogs) + { + act.AddScreenShot(dialogBmp); + } + dialogs.Clear(); + } + catch (Exception ex) + { + Reporter.ToLog(eLogLevel.ERROR, "Failed to capture one application window screenshot", ex); + } } }As per coding guidelines,
**/*.cs: UseReporter.ToLog(eLogLevel.ERROR, message)for logging errors.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Ginger/GingerCore/Actions/UIAutomation/UIAComWrapperHelper.cs` around lines 4858 - 4891, The current try around the entire multi-window capture aborts on any window error; change it so each AppWindow is processed inside its own try/catch: call GetListOfDriverAppWindows(), then for each AppWindow aw wrap the GetAppWindowAsBitmap(aw) usage and the GetAppDialogAsBitmap(aw) loop in a per-window try/catch so a failure for one aw does not stop others; on per-window exceptions log using Reporter.ToLog(eLogLevel.ERROR, "Failed to capture window " + aw?.Title + " or its dialogs: " + ex.Message) (include exception info as appropriate) and continue to the next window; also ensure null checks before AddScreenShot and remove the outer broad catch or keep it for fallback but still use ERROR level for errors.Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)
505-511:⚠️ Potential issue | 🟠 MajorAvoid calling
CloseDriver()from the finalizer.
CloseDriver()performs substantial managed cleanup including event unsubscription, logging viaReporter.ToLog(), and blocking async operations (StopNetworkLog().GetAwaiter().GetResult()) on the GC finalizer thread. This violates C# best practices and risks deadlocks and thread safety issues. ImplementIDisposablewith cleanup inDispose()and reserve the finalizer, if needed, for unmanaged resources only.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs` around lines 505 - 511, The finalizer ~SeleniumDriver() calls CloseDriver() which performs managed cleanup (event unsubscription, Reporter.ToLog(), and StopNetworkLog().GetAwaiter().GetResult()) and must be moved to IDisposable; implement IDisposable on SeleniumDriver, add a Dispose() method that calls a protected Dispose(bool disposing) where if disposing == true you call CloseDriver() (and release managed resources like Driver, unsubscribe events, stop network logs asynchronously from a safe context), call GC.SuppressFinalize(this) in Dispose(), and either remove the finalizer or change it to call Dispose(false) only if there are unmanaged resources; also remove any blocking async waits from finalizer code and ensure StopNetworkLog() is awaited/handled only during Dispose().
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@Ginger/Ginger/Actions/ActionEditPage.xaml.cs`:
- Around line 529-536: The catch around SetActReturnValuesGrid currently
swallows NullReferenceException and logs with the wrong signature; change the
failure handling so the UI does not remain partially initialized: in the catch
for errors from SetActReturnValuesGrid, call Reporter.ToLog(eLogLevel.ERROR,
"Failed to initialize Output Values grid") (use the two-parameter signature
required by the repo) and then explicitly disable or exit the output-values UI
path (for example disable the tab/control and return from the initializer or
rethrow) so no further UI flow for output values runs after the failure; keep
the fix localized to the SetActReturnValuesGrid call and its surrounding catch
block.
In
`@Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs`:
- Around line 1493-1510: The DrawElementRectangleAsync path currently calls
mWindowExplorerDriver.UpdateElementInfoFields(clickedElementInfo) but treats it
as synchronous, so the subsequent Width/Height check can still see stale zeroes;
change this to wait for the refresh to complete by either (A) making
UpdateElementInfoFields return a Task and awaiting it in
DrawElementRectangleAsync, or (B) if you cannot change that method signature,
implement a short polling loop after calling UpdateElementInfoFields that checks
clickedElementInfo.Width/Height with small delays and a reasonable timeout
(e.g., a few hundred ms) before deciding to skip drawing; reference
DrawElementRectangleAsync, UpdateElementInfoFields, clickedElementInfo and
mWindowExplorerDriver to locate where to add the await or polling.
In `@Ginger/Ginger/Drivers/DriversConfigsEditPages/UFTCredentialsDialog.xaml`:
- Around line 40-43: The hint text in xCredentialsHintTextBlock promises
validation for “all credential fields” but the dialog only validates Client Id,
Client Secret, and Tenant Id; update the behavior by either (A) extending the
validation routine that toggles xCredentialsHintTextBlock to also check the
Server URL input control (add Server URL to the same validation path used for
ClientId/ClientSecret/TenantId), or (B) narrow the hint copy in the TextBlock
Run to explicitly list only the fields actually validated (e.g., “Please fill
Client Id, Client Secret, and Tenant Id.”) so the message matches the
implemented validation; reference xCredentialsHintTextBlock and the dialog’s
credential-validation method/handler when making the change.
In `@Ginger/Ginger/Drivers/DriversConfigsEditPages/UFTCredentialsDialog.xaml.cs`:
- Around line 1049-1051: The filter currently uses exact equality between
xOsTypeCombo.SelectedItem and UftPhoneViewModel.Platform which splits families
like "Android TV" or versioned names; implement NormalizePlatformFamily(string)
to trim/lowercase and map any value containing "android" -> "android",
containing "ios" -> "ios", else return the normalized value, add
MatchesPlatformFamily(string platform, string filter) that compares
NormalizePlatformFamily(platform) and NormalizePlatformFamily(filter) with
OrdinalIgnoreCase, and replace the string.Equals call in the filtering block
(and any similar exact-equality platform checks) to use MatchesPlatformFamily so
devices are grouped by platform family rather than exact payload text.
In `@Ginger/GingerCore/Actions/UIAutomation/UIAComWrapperHelper.cs`:
- Around line 4862-4878: The loop over GetListOfDriverAppWindows is capturing
non-current windows but WindowToBitmap (and its helpers) still operate on
CurrentWindow; change the flow so the window element being captured (aw or
dialog element returned by GetAppDialogAsBitmap) is prepared and painted before
printing: call HandlePaintWindow(aw) (or equivalent) and
WinAPIAutomation.ShowWindow(aw) instead of operating on CurrentWindow, add a
short Thread.Sleep to allow repaint, then re-read
tempWindow.Current.BoundingRectangle and if width/height are zero call
ShowWindow(aw) again before creating the Bitmap and calling
PrintWindow(tempWindow.Current.NativeWindowHandle). Ensure WindowToBitmap
accepts and uses the passed UIA element (tempWindow) throughout rather than
referencing CurrentWindow.
In `@Ginger/GingerCore/Drivers/WindowsLib/WindowsDriver.cs`:
- Around line 244-245: The foreach over AppWindow objects can throw if
mUIAutomationHelper.GetListOfDriverAppWindows() returns null; update the code in
WindowsDriver.cs to guard the iteration by obtaining the list into a local
(e.g., list) and then either check for null before the foreach or replace it
with a null-coalescing fallback (e.g., use an empty collection via ?? or
Enumerable.Empty<AppWindow>()) so the loop over AppWindow aw will never receive
a null reference; keep references to mUIAutomationHelper and
GetListOfDriverAppWindows() unchanged otherwise.
- Around line 254-259: The dialog bitmaps returned by
mUIAutomationHelper.GetAppDialogAsBitmap are not disposed, causing GDI leaks;
after calling act.AddScreenShot for each Bitmap in bList (the loop that iterates
tempbmp), explicitly dispose each Bitmap (e.g., call tempbmp.Dispose() or wrap
each in a using) before clearing the list so the unmanaged resources are
released; ensure this change is applied in the same block where bList is
iterated (the loop that calls act.AddScreenShot) and keep bList.Clear() only for
clearing references after disposal.
In `@Ginger/GingerCoreCommon/DataBaseLib/ExportToExcelConfig.cs`:
- Line 133: The parameter list in the method signature CreateQueryWithWhereList
has a missing space after the first comma; update the signature so there's a
space between "mColumnList," and "ObservableList<WhereConditionItem>
whereConditionList" to match C# conventions and ensure consistent formatting
across the codebase (adjust only the parameter spacing in the
CreateQueryWithWhereList declaration).
In `@Ginger/GingerCoreCommon/GingerCoreCommon.csproj`:
- Line 11: Update the TargetFramework entry in GingerCoreCommon's project file:
replace the existing <TargetFramework>net10.0</TargetFramework> with the
Windows-targeted framework identifier
<TargetFramework>net10.0-windows10.0.17763.0</TargetFramework> so it matches the
pattern used by Ginger.csproj, GingerCoreTest.csproj and GingerTest.csproj;
ensure the change is applied in the GingerCoreCommon.csproj project definition
and run a build to verify no further framework-specific adjustments are needed.
In
`@Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs`:
- Around line 1804-1814: The code currently prefers ei.Properties["bounds"] over
the live IWebElement value; change the logic in the method (where ei and
IWebElement we are used) to prefer we.GetAttribute("bounds") when we is non-null
(i.e., call we.GetAttribute first and use it if non-empty, falling back to
ei.Properties lookup only if the live attribute is null/empty), and when writing
the bounds back into ei.Properties later, update the existing property (find by
Name equals "bounds" case-insensitive and set its Value) instead of appending a
new entry so you overwrite stale snapshots rather than adding duplicates.
In
`@Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActScreenShotHandler.cs`:
- Around line 152-159: The full-page handlers don't prepare the tab before
capturing, so update HandleFullPageOperationAsync and
HandleFullPageWithURLAndTimestampOperationAsync to call and await
PrepareTabForScreenshotAsync(CurrentTab) (which will invoke
PlaywrightBrowserTab.BringToFrontAsync when applicable) before accessing
CurrentTab for capture; ensure the await is used so the tab is actually brought
to front for Playwright captures.
In `@Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs`:
- Around line 2044-2057: The loop that iterates open windows (when
act.WindowsToCapture == Act.eWindowsToCapture.AllAvailableWindows) sets
currentWindow = Driver.CurrentWindowHandle but does not guarantee restoring it
if an exception occurs; wrap the window-switching and AddCurrentScreenShot calls
in a try/finally so that after iterating (or if any SwitchTo().Window(winHandle)
or AddCurrentScreenShot(act) throws) you always call
Driver.SwitchTo().Window(currentWindow) in the finally block to restore focus to
the original window; update the block around Driver.CurrentWindowHandle,
Driver.WindowHandles, the foreach over winHandle, and AddCurrentScreenShot(act)
accordingly.
- Around line 2059-2065: The flag
TakeOnlyActiveFrameOrWindowScreenShotInCaseOfFailure is short-circuiting the
FullPageWithUrlAndTimestamp branch; update the conditional so the timestamped
desktop-capture branch (TakeFullPageWithDesktopScreenScreenShot) is reachable.
Either move the TakeOnlyActiveFrameOrWindowScreenShotInCaseOfFailure check below
the FullPageWithUrlAndTimestamp branch, or change its condition to only apply
when act.WindowsToCapture is One of the active-window modes (e.g.,
Act.eWindowsToCapture.OnlyActiveWindow or
Act.eWindowsToCapture.AllAvailableWindows), leaving
Act.eWindowsToCapture.FullPageWithUrlAndTimestamp to call
TakeFullPageWithDesktopScreenScreenShot(act) as intended.
- Around line 3689-3699: The branch handling attribute assignment must fail the
action and log an ERROR when input is malformed or when the target element is
missing: validate the result of act.GetInputParamCalculatedValue("Value") split
(vals) and if vals.Length != 2 call Reporter.ToLog(eLogLevel.ERROR, ...) and
return/fail the action, then call LocateElement(act) and check for null (or
handle exceptions from LocateElement) before invoking
((IJavaScriptExecutor)Driver).ExecuteScript; update the log level from DEBUG to
ERROR for bad input and ensure this code path uses the same failure/reporting
behavior as GenElementHandler for missing elements.
- Around line 5865-5868: ProcessSvgChildElements is calling GetElementTypeEnum
with TypeAtt = nameof(eElementType.Svg) but GetElementTypeEnum/GetElementType
only remaps a small set of SVG tags so many SVG children (text, image, defs,
clipPath, mask and gradient nodes) fall through to non-SVG enums and get
misclassified; update the element-type mapping inside
GetElementTypeEnum/GetElementType to explicitly recognize and return
eElementType.Svg (or the appropriate SVG-specific enum) for the missing tags
(text, image, defs, clipPath, mask, linearGradient, radialGradient, etc.), and
ensure GetElementTypeEnum still respects the passed TypeAtt parameter so
ShouldLearnElement receives the correct Item2 for SVG children (apply same
changes where GetElementTypeEnum is used around the other occurrence noted).
In
`@Ginger/GingerCoreNET/Reports/Ginger-Web-Client/assets/sass/layout/_dashboard.scss`:
- Line 43: The CSS comment `/*Timeline*/` violates the comment-whitespace-inside
rule; replace that exact token with `/* Timeline */` in _dashboard.scss (update
the comment text `/*Timeline*/` to include single spaces after the opening and
before the closing `/* */`) and re-run stylelint to confirm the violation is
resolved.
In
`@Ginger/GingerCoreNET/Reports/Ginger-Web-Client/polyfills.af067c955617ac11.js`:
- Line 1: Remove the stale pre-built polyfills file reference by deleting
polyfills.ab6619d5cdfdf12c.js from the repository and removing its
Include/ItemGroup entry that uses CopyToOutputDirectory=Always from the project
file (the .csproj entry that references the old polyfills). Then add a short
README.md to the Ginger-Web-Client folder documenting the source/version/hash of
the shipped pre-built asset (e.g., that polyfills.af067c955617ac11.js is a
pre-built bundle, its upstream build/source and version, and instructions on how
to rebuild/update it), and commit the deletion and the documentation together so
future maintainers can find and update the polyfills asset.
---
Outside diff comments:
In `@Ginger/GingerCore/Actions/UIAutomation/UIAComWrapperHelper.cs`:
- Around line 4858-4891: The current try around the entire multi-window capture
aborts on any window error; change it so each AppWindow is processed inside its
own try/catch: call GetListOfDriverAppWindows(), then for each AppWindow aw wrap
the GetAppWindowAsBitmap(aw) usage and the GetAppDialogAsBitmap(aw) loop in a
per-window try/catch so a failure for one aw does not stop others; on per-window
exceptions log using Reporter.ToLog(eLogLevel.ERROR, "Failed to capture window "
+ aw?.Title + " or its dialogs: " + ex.Message) (include exception info as
appropriate) and continue to the next window; also ensure null checks before
AddScreenShot and remove the outer broad catch or keep it for fallback but still
use ERROR level for errors.
In `@Ginger/GingerCoreCommon/DataBaseLib/ExportToExcelConfig.cs`:
- Around line 155-156: The where-clause builder incorrectly uses the loop index
`i` to decide when to prepend " AND ", which yields a leading " AND " if earlier
items were skipped; in ExportToExcelConfig.cs (in the method that constructs the
WHERE clause inside the loop containing the if
(string.IsNullOrEmpty(item.TableColumn) || string.IsNullOrEmpty(item.RowValue))
continue;), replace the i-based check with a boolean flag (e.g.,
firstClauseAdded) or a counter that tracks how many valid clauses have been
appended and only prepend " AND " when that flag/counter indicates a previous
valid clause exists; apply the same change to the other similar block referenced
around lines 187-189 so both places use the flag/counter instead of i to
determine adding " AND ".
- Around line 155-156: The loop that currently silently continues when a
where-condition item has null/empty TableColumn or RowValue should log an error
before skipping; inside the block that checks if
(string.IsNullOrEmpty(item.TableColumn) || string.IsNullOrEmpty(item.RowValue))
add a Reporter.ToLog(eLogLevel.ERROR, ...) call that includes identifying
details (e.g., item.TableColumn, item.RowValue, and if available an index or
item.ToString()) and a short message indicating the item was skipped due to
invalid where condition; ensure this change is made in the ExportToExcelConfig
code path that processes the where-condition items so invalid config/data is
recorded.
- Around line 159-186: The switch on item.Opertor in ExportToExcelConfig.cs can
leave predicate empty for unknown operators which later gets appended into the
WHERE clause; add a default case that logs or records the unrecognized operator
(including item.Opertor and item.TableColumn) and sets predicate to null/empty
in a way that the calling code will skip adding it, and additionally guard the
code that appends predicate to the WHERE clause to only append when predicate is
non-empty (check predicate != null/""), so you never produce stray "AND" or
trailing separators.
In `@Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs`:
- Around line 505-511: The finalizer ~SeleniumDriver() calls CloseDriver() which
performs managed cleanup (event unsubscription, Reporter.ToLog(), and
StopNetworkLog().GetAwaiter().GetResult()) and must be moved to IDisposable;
implement IDisposable on SeleniumDriver, add a Dispose() method that calls a
protected Dispose(bool disposing) where if disposing == true you call
CloseDriver() (and release managed resources like Driver, unsubscribe events,
stop network logs asynchronously from a safe context), call
GC.SuppressFinalize(this) in Dispose(), and either remove the finalizer or
change it to call Dispose(false) only if there are unmanaged resources; also
remove any blocking async waits from finalizer code and ensure StopNetworkLog()
is awaited/handled only during Dispose().
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 9b065b41-1735-4409-9bdf-8443b2eddac5
⛔ Files ignored due to path filters (2)
Ginger/GingerCoreNET/Reports/Ginger-Web-Client/assets/layout/images/amdocs.pngis excluded by!**/*.png,!**/*.pngGinger/GingerCoreNET/Reports/Ginger-Web-Client/assets/layout/images/amdocs_old1.pngis excluded by!**/*.png,!**/*.png
📒 Files selected for processing (29)
Ginger/Ginger/Actions/ActionEditPage.xaml.csGinger/Ginger/Actions/ActionEditPages/ActSikuliEditPage.xaml.csGinger/Ginger/ApplicationModelsLib/POMModels/PomAllElementsPage.xaml.csGinger/Ginger/AutomatePageLib/AddActionMenu/LiveSpy/LiveSpyPage.xaml.csGinger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.csGinger/Ginger/Drivers/DriversConfigsEditPages/UFTCredentialsDialog.xamlGinger/Ginger/Drivers/DriversConfigsEditPages/UFTCredentialsDialog.xaml.csGinger/Ginger/Environments/AppsListPage.xaml.csGinger/GingerCore/Actions/UIAutomation/UIAComWrapperHelper.csGinger/GingerCore/Drivers/JavaDriverLib/JavaDriver.csGinger/GingerCore/Drivers/WindowsLib/WindowsDriver.csGinger/GingerCoreCommon/DataBaseLib/ExportToExcelConfig.csGinger/GingerCoreCommon/GingerCoreCommon.csprojGinger/GingerCoreCommon/Repository/RepositoryFolder.csGinger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.csGinger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActScreenShotHandler.csGinger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.csGinger/GingerCoreNET/GingerCoreNET.csprojGinger/GingerCoreNET/Reports/Ginger-Web-Client/assets/artifacts/test.txtGinger/GingerCoreNET/Reports/Ginger-Web-Client/assets/sass/layout/_dashboard.scssGinger/GingerCoreNET/Reports/Ginger-Web-Client/assets/theme/theme-report.cssGinger/GingerCoreNET/Reports/Ginger-Web-Client/index.htmlGinger/GingerCoreNET/Reports/Ginger-Web-Client/main.50dca4a1d8ae08b9.jsGinger/GingerCoreNET/Reports/Ginger-Web-Client/main.894d579b9b86a2c7.jsGinger/GingerCoreNET/Reports/Ginger-Web-Client/polyfills.ab6619d5cdfdf12c.jsGinger/GingerCoreNET/Reports/Ginger-Web-Client/polyfills.af067c955617ac11.jsGinger/GingerCoreNET/Reports/Ginger-Web-Client/runtime.9298f7d16182d7dd.jsGinger/GingerCoreNET/Reports/Ginger-Web-Client/scripts.510ef496b81fd3ec.jsGinger/GingerCoreNET/Reports/Ginger-Web-Client/styles.a4dfb05f8a7c3211.css
💤 Files with no reviewable changes (1)
- Ginger/GingerCoreNET/Reports/Ginger-Web-Client/polyfills.ab6619d5cdfdf12c.js
| try | ||
| { | ||
| SetActReturnValuesGrid(); | ||
| } | ||
| catch (NullReferenceException ex) | ||
| { | ||
| Reporter.ToLog(eLogLevel.ERROR, "Failed to initialize Output Values grid", ex); | ||
| } |
There was a problem hiding this comment.
Avoid partial initialization after failure, and use the error-log signature required by repo guidelines.
At Line 533, catching NullReferenceException and continuing can leave this tab half-initialized. Handle the failure path explicitly (disable/exit) so later UI flow doesn’t proceed in an invalid state. Also Line 535 should follow the project logging rule format.
Proposed fix
try
{
SetActReturnValuesGrid();
}
catch (NullReferenceException ex)
{
- Reporter.ToLog(eLogLevel.ERROR, "Failed to initialize Output Values grid", ex);
+ Reporter.ToLog(eLogLevel.ERROR, $"Failed to initialize Output Values grid. {ex}");
+ Reporter.ToUser(eUserMsgKey.StaticErrorMessage, "Failed to load Output Values grid. Please reopen the action and check logs.");
+ xOutputValuesGrid.IsEnabled = false;
+ return;
}As per coding guidelines: **/*.cs: Use Reporter.ToLog(eLogLevel.ERROR, message) for logging errors.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/Ginger/Actions/ActionEditPage.xaml.cs` around lines 529 - 536, The
catch around SetActReturnValuesGrid currently swallows NullReferenceException
and logs with the wrong signature; change the failure handling so the UI does
not remain partially initialized: in the catch for errors from
SetActReturnValuesGrid, call Reporter.ToLog(eLogLevel.ERROR, "Failed to
initialize Output Values grid") (use the two-parameter signature required by the
repo) and then explicitly disable or exit the output-values UI path (for example
disable the tab/control and return from the initializer or rethrow) so no
further UI flow for output values runs after the failure; keep the fix localized
to the SetActReturnValuesGrid call and its surrounding catch block.
| // For some Android paths the element is identified but bounds are not populated yet. | ||
| // Refresh once before rectangle math; if still invalid, skip drawing a misleading rectangle. | ||
| if (clickedElementInfo.Width <= 0 || clickedElementInfo.Height <= 0) | ||
| { | ||
| try | ||
| { | ||
| mWindowExplorerDriver?.UpdateElementInfoFields(clickedElementInfo); | ||
| } | ||
| catch (Exception exUpd) | ||
| { | ||
| Reporter.ToLog(eLogLevel.DEBUG, "DrawElementRectangleAsync: UpdateElementInfoFields failed before rectangle draw: " + exUpd.Message, exUpd); | ||
| } | ||
|
|
||
| if (clickedElementInfo.Width <= 0 || clickedElementInfo.Height <= 0) | ||
| { | ||
| Reporter.ToLog(eLogLevel.DEBUG, "DrawElementRectangleAsync: skipping rectangle draw due to invalid element bounds."); | ||
| return; | ||
| } |
There was a problem hiding this comment.
Don't treat UpdateElementInfoFields() as synchronous here.
On Playwright, UpdateElementInfoFields() updates the same ElementInfo from a background Task.Run, so the immediate Width/Height recheck can still see stale zeroes and return early. That makes the new “refresh bounds then draw” path intermittently skip the rectangle for elements that depend on the refresh.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs`
around lines 1493 - 1510, The DrawElementRectangleAsync path currently calls
mWindowExplorerDriver.UpdateElementInfoFields(clickedElementInfo) but treats it
as synchronous, so the subsequent Width/Height check can still see stale zeroes;
change this to wait for the refresh to complete by either (A) making
UpdateElementInfoFields return a Task and awaiting it in
DrawElementRectangleAsync, or (B) if you cannot change that method signature,
implement a short polling loop after calling UpdateElementInfoFields that checks
clickedElementInfo.Width/Height with small delays and a reasonable timeout
(e.g., a few hundred ms) before deciding to skip drawing; reference
DrawElementRectangleAsync, UpdateElementInfoFields, clickedElementInfo and
mWindowExplorerDriver to locate where to add the await or polling.
| <!-- Hint line for required credentials (hidden until a credential is missing) --> | ||
| <TextBlock x:Name="xCredentialsHintTextBlock" Margin="0,6,0,0" Visibility="Collapsed"> | ||
| <Run Foreground="Red" FontWeight="Bold">*</Run> | ||
| <Run Text=" Please fill all credential fields. This field cannot be empty." Foreground="{StaticResource $BackgroundColor_DarkGray}" /> |
There was a problem hiding this comment.
Hint text promises validation we do not perform.
This copy says “all credential fields”, but the dialog only checks Client Id, Client Secret, and Tenant Id. With Server URL empty, this hint can disappear and the fetch still fails later. Either include Server URL in the same validation path or narrow the message to the fields that are actually enforced.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/Ginger/Drivers/DriversConfigsEditPages/UFTCredentialsDialog.xaml`
around lines 40 - 43, The hint text in xCredentialsHintTextBlock promises
validation for “all credential fields” but the dialog only validates Client Id,
Client Secret, and Tenant Id; update the behavior by either (A) extending the
validation routine that toggles xCredentialsHintTextBlock to also check the
Server URL input control (add Server URL to the same validation path used for
ClientId/ClientSecret/TenantId), or (B) narrow the hint copy in the TextBlock
Run to explicitly list only the fields actually validated (e.g., “Please fill
Client Id, Client Secret, and Tenant Id.”) so the message matches the
implemented validation; reference xCredentialsHintTextBlock and the dialog’s
credential-validation method/handler when making the change.
| if (xOsTypeCombo?.SelectedItem is string deviceOs && !string.IsNullOrWhiteSpace(deviceOs) && !string.Equals(deviceOs, "All", StringComparison.OrdinalIgnoreCase)) | ||
| { | ||
| filtered = filtered.Where(p => string.Equals(p.Platform, os, StringComparison.OrdinalIgnoreCase)); | ||
| filtered = filtered.Where(p => string.Equals(p.Platform, deviceOs, StringComparison.OrdinalIgnoreCase)); |
There was a problem hiding this comment.
Normalize device platform families before filtering.
UftPhoneViewModel.Platform comes straight from the UFT payload, and this file already treats it as non-normalized elsewhere (PopulateFilters() preselection and OkButton_Click() both use family/substring matching). Exact equality here will split one OS family into separate buckets like Android, Android TV, or versioned values and can hide valid devices when an initial platform is preselected.
🧩 Proposed fix
- if (xOsTypeCombo?.SelectedItem is string deviceOs && !string.IsNullOrWhiteSpace(deviceOs) && !string.Equals(deviceOs, "All", StringComparison.OrdinalIgnoreCase))
- {
- filtered = filtered.Where(p => string.Equals(p.Platform, deviceOs, StringComparison.OrdinalIgnoreCase));
- }
+ if (xOsTypeCombo?.SelectedItem is string deviceOs && !string.IsNullOrWhiteSpace(deviceOs) && !string.Equals(deviceOs, "All", StringComparison.OrdinalIgnoreCase))
+ {
+ filtered = filtered.Where(p => MatchesPlatformFamily(p.Platform, deviceOs));
+ }private static bool MatchesPlatformFamily(string platform, string filter)
{
return string.Equals(
NormalizePlatformFamily(platform),
NormalizePlatformFamily(filter),
StringComparison.OrdinalIgnoreCase);
}
private static string NormalizePlatformFamily(string value)
{
string normalized = value?.Trim().ToLowerInvariant() ?? string.Empty;
if (normalized.Contains("ios"))
{
return "ios";
}
if (normalized.Contains("android"))
{
return "android";
}
return normalized;
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/Ginger/Drivers/DriversConfigsEditPages/UFTCredentialsDialog.xaml.cs`
around lines 1049 - 1051, The filter currently uses exact equality between
xOsTypeCombo.SelectedItem and UftPhoneViewModel.Platform which splits families
like "Android TV" or versioned names; implement NormalizePlatformFamily(string)
to trim/lowercase and map any value containing "android" -> "android",
containing "ios" -> "ios", else return the normalized value, add
MatchesPlatformFamily(string platform, string filter) that compares
NormalizePlatformFamily(platform) and NormalizePlatformFamily(filter) with
OrdinalIgnoreCase, and replace the string.Equals call in the filtering block
(and any similar exact-equality platform checks) to use MatchesPlatformFamily so
devices are grouped by platform family rather than exact payload text.
| List<AppWindow> windows = GetListOfDriverAppWindows(); | ||
| foreach (AppWindow aw in windows) | ||
| { | ||
| using (Bitmap tempBmp = GetCurrentWindowBitmap()) | ||
| using (Bitmap bmp = GetAppWindowAsBitmap(aw)) | ||
| { | ||
| act.AddScreenShot(tempBmp); | ||
| if (bmp != null) | ||
| { | ||
| act.AddScreenShot(bmp); | ||
| } | ||
| } | ||
| List<Bitmap> dialogs = GetAppDialogAsBitmap(aw); | ||
| foreach (Bitmap dialogBmp in dialogs) | ||
| { | ||
| act.AddScreenShot(dialogBmp); | ||
| } | ||
| dialogs.Clear(); | ||
| } |
There was a problem hiding this comment.
Prepare the iterated window, not CurrentWindow, before printing it.
This new all-windows path still funnels through WindowToBitmap(...), but that helper calls HandlePaintWindow(CurrentWindow) and WinAPIAutomation.ShowWindow(CurrentWindow) instead of using the aw/dialog element being captured. In practice, non-current windows can come back blank or stale while the current window gets repainted repeatedly.
Suggested follow-up in WindowToBitmap(...)
public Bitmap WindowToBitmap(UIAuto.AutomationElement tempWindow)
{
HandlePaintWindow(tempWindow);
Thread.Sleep(200);
int width = tempWindow.Current.BoundingRectangle.Width;
int height = tempWindow.Current.BoundingRectangle.Height;
if (width == 0 || height == 0)
{
WinAPIAutomation.ShowWindow(tempWindow);
width = tempWindow.Current.BoundingRectangle.Width;
height = tempWindow.Current.BoundingRectangle.Height;
}
Bitmap bmp = new Bitmap(width, height);
Graphics memoryGraphics = Graphics.FromImage(bmp);
IntPtr dc = memoryGraphics.GetHdc();
PrintWindow(tempWindow.Current.NativeWindowHandle, dc, 0);
memoryGraphics.ReleaseHdc(dc);
return bmp;
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/GingerCore/Actions/UIAutomation/UIAComWrapperHelper.cs` around lines
4862 - 4878, The loop over GetListOfDriverAppWindows is capturing non-current
windows but WindowToBitmap (and its helpers) still operate on CurrentWindow;
change the flow so the window element being captured (aw or dialog element
returned by GetAppDialogAsBitmap) is prepared and painted before printing: call
HandlePaintWindow(aw) (or equivalent) and WinAPIAutomation.ShowWindow(aw)
instead of operating on CurrentWindow, add a short Thread.Sleep to allow
repaint, then re-read tempWindow.Current.BoundingRectangle and if width/height
are zero call ShowWindow(aw) again before creating the Bitmap and calling
PrintWindow(tempWindow.Current.NativeWindowHandle). Ensure WindowToBitmap
accepts and uses the passed UIA element (tempWindow) throughout rather than
referencing CurrentWindow.
| else if (act.WindowsToCapture == Act.eWindowsToCapture.FullPage || TakeOnlyActiveFrameOrWindowScreenShotInCaseOfFailure) | ||
| { | ||
| AddScreenshotIntoAct(act, true); | ||
| } | ||
| else if (act.WindowsToCapture == Act.eWindowsToCapture.FullPageWithUrlAndTimestamp) | ||
| { | ||
| TakeFullPageWithDesktopScreenScreenShot(act); |
There was a problem hiding this comment.
TakeOnlyActiveFrameOrWindowScreenShotInCaseOfFailure now changes normal screenshot behavior.
This condition runs before FullPageWithUrlAndTimestamp, so when the agent flag is true every screenshot action except OnlyActiveWindow / AllAvailableWindows is forced through AddScreenshotIntoAct(act, true). That both contradicts the setting name and makes the timestamped desktop-capture branch unreachable.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs`
around lines 2059 - 2065, The flag
TakeOnlyActiveFrameOrWindowScreenShotInCaseOfFailure is short-circuiting the
FullPageWithUrlAndTimestamp branch; update the conditional so the timestamped
desktop-capture branch (TakeFullPageWithDesktopScreenScreenShot) is reachable.
Either move the TakeOnlyActiveFrameOrWindowScreenShotInCaseOfFailure check below
the FullPageWithUrlAndTimestamp branch, or change its condition to only apply
when act.WindowsToCapture is One of the active-window modes (e.g.,
Act.eWindowsToCapture.OnlyActiveWindow or
Act.eWindowsToCapture.AllAvailableWindows), leaving
Act.eWindowsToCapture.FullPageWithUrlAndTimestamp to call
TakeFullPageWithDesktopScreenScreenShot(act) as intended.
| e = LocateElement(act); | ||
| char[] delimit = new char[] { '=' }; | ||
| string insertval = act.GetInputParamCalculatedValue("Value"); | ||
| string[] vals = insertval.Split(delimit, 2); | ||
| if (vals.Length != 2) | ||
| { | ||
| Reporter.ToLog(eLogLevel.DEBUG, @"Input string should be in the format : attribute=value"); | ||
| return; | ||
| } | ||
| ((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0]." + vals[0] + "=arguments[1]", e, vals[1]); | ||
| } | ||
| break; | ||
| } |
There was a problem hiding this comment.
Fail this action on bad input or a missing element.
This branch returns after a DEBUG log when the input is malformed, and it skips the normal null-element check before executing JS. The result is either a silent no-op or an exception escaping GenElementHandler without the usual user-facing error.
Suggested fix
e = LocateElement(act);
+ if (e == null)
+ {
+ act.Error = "Error: Element not found - " + act.LocateBy + " " + act.LocateValue;
+ return;
+ }
char[] delimit = new char[] { '=' };
string insertval = act.GetInputParamCalculatedValue("Value");
string[] vals = insertval.Split(delimit, 2);
if (vals.Length != 2)
{
- Reporter.ToLog(eLogLevel.DEBUG, @"Input string should be in the format : attribute=value");
+ act.Status = eRunStatus.Failed;
+ act.Error = "Input string should be in the format: attribute=value";
+ Reporter.ToLog(eLogLevel.ERROR, act.Error);
return;
}As per coding guidelines **/*.cs: Use Reporter.ToLog(eLogLevel.ERROR, message) for logging errors.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs`
around lines 3689 - 3699, The branch handling attribute assignment must fail the
action and log an ERROR when input is malformed or when the target element is
missing: validate the result of act.GetInputParamCalculatedValue("Value") split
(vals) and if vals.Length != 2 call Reporter.ToLog(eLogLevel.ERROR, ...) and
return/fail the action, then call LocateElement(act) and check for null (or
handle exceptions from LocateElement) before invoking
((IJavaScriptExecutor)Driver).ExecuteScript; update the log level from DEBUG to
ERROR for bad input and ensure this code path uses the same failure/reporting
behavior as GenElementHandler for missing elements.
| Tuple<string, eElementType> childElementType = GetElementTypeEnum(htmlNode: svgChildNode, TypeAtt: nameof(eElementType.Svg)); | ||
|
|
||
| // Check if this SVG child element should be learned | ||
| if (ShouldLearnElement(pomSetting, childElementType.Item2)) |
There was a problem hiding this comment.
SVG child typing is still incomplete.
ProcessSvgChildElements() passes TypeAtt = Svg, but GetElementType() only remaps a small subset of SVG tags. Children already listed in SvgChildElements such as text, image, defs, clipPath, mask, and gradients still fall through to non-SVG enums, so filtered SVG learning will skip or misclassify part of the discovered tree.
Suggested fix
private static eElementType GetElementType(string elementTagName, string elementTypeAtt)//elementTag = g ,typeatt = svg
{
+ if (!string.IsNullOrEmpty(elementTypeAtt) &&
+ elementTypeAtt.Equals(nameof(eElementType.Svg), StringComparison.InvariantCultureIgnoreCase) &&
+ SvgChildElements.Contains(elementTagName))
+ {
+ return eElementType.Svg;
+ }
+
eElementType elementType;
elementType = elementTagName.ToUpper() switch
{Also applies to: 6651-6653
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs`
around lines 5865 - 5868, ProcessSvgChildElements is calling GetElementTypeEnum
with TypeAtt = nameof(eElementType.Svg) but GetElementTypeEnum/GetElementType
only remaps a small set of SVG tags so many SVG children (text, image, defs,
clipPath, mask and gradient nodes) fall through to non-SVG enums and get
misclassified; update the element-type mapping inside
GetElementTypeEnum/GetElementType to explicitly recognize and return
eElementType.Svg (or the appropriate SVG-specific enum) for the missing tags
(text, image, defs, clipPath, mask, linearGradient, radialGradient, etc.), and
ensure GetElementTypeEnum still respects the passed TypeAtt parameter so
ShouldLearnElement receives the correct Item2 for SVG children (apply same
changes where GetElementTypeEnum is used around the other occurrence noted).
| $salesDownIconColor: #f44336; | ||
|
|
||
| /* Time-line */ | ||
| /*Timeline*/ |
There was a problem hiding this comment.
Fix comment whitespace to avoid stylelint failure.
Line 43 uses /*Timeline*/, which violates comment-whitespace-inside.
💡 Minimal fix
-/*Timeline*/
+/* Timeline */📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| /*Timeline*/ | |
| /* Timeline */ |
🧰 Tools
🪛 Stylelint (17.6.0)
[error] 43-43: Expected whitespace after "/*" (comment-whitespace-inside)
(comment-whitespace-inside)
[error] 43-43: Expected whitespace before "*/" (comment-whitespace-inside)
(comment-whitespace-inside)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@Ginger/GingerCoreNET/Reports/Ginger-Web-Client/assets/sass/layout/_dashboard.scss`
at line 43, The CSS comment `/*Timeline*/` violates the
comment-whitespace-inside rule; replace that exact token with `/* Timeline */`
in _dashboard.scss (update the comment text `/*Timeline*/` to include single
spaces after the opening and before the closing `/* */`) and re-run stylelint to
confirm the violation is resolved.
| @@ -0,0 +1 @@ | |||
| (self.webpackChunkGinger_HtmlReport_Web_App=self.webpackChunkGinger_HtmlReport_Web_App||[]).push([[461],{8829:(i,l,t)=>{"use strict";t(8509),t(8681),t(5846),t(9353),t(6935)},6935:()=>{"use strict";!function(a){const d=a.performance;function m(it){d&&d.mark&&d.mark(it)}function g(it,G){d&&d.measure&&d.measure(it,G)}m("Zone");const O=a.__Zone_symbol_prefix||"__zone_symbol__";function S(it){return O+it}const $=!0===a[S("forceDuplicateZoneCheck")];if(a.Zone){if($||"function"!=typeof a.Zone.__symbol__)throw new Error("Zone already loaded.");return a.Zone}let A=(()=>{class it{static{this.__symbol__=S}static assertZonePatched(){if(a.Promise!==Ft.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let u=it.current;for(;u.parent;)u=u.parent;return u}static get current(){return mt.zone}static get currentTask(){return wt}static __load_patch(u,p,z=!1){if(Ft.hasOwnProperty(u)){if(!z&&$)throw Error("Already loaded patch: "+u)}else if(!a["__Zone_disable_"+u]){const q="Zone:"+u;m(q),Ft[u]=p(a,it,St),g(q,q)}}get parent(){return this._parent}get name(){return this._name}constructor(u,p){this._parent=u,this._name=p?p.name||"unnamed":"<root>",this._properties=p&&p.properties||{},this._zoneDelegate=new K(this,this._parent&&this._parent._zoneDelegate,p)}get(u){const p=this.getZoneWith(u);if(p)return p._properties[u]}getZoneWith(u){let p=this;for(;p;){if(p._properties.hasOwnProperty(u))return p;p=p._parent}return null}fork(u){if(!u)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,u)}wrap(u,p){if("function"!=typeof u)throw new Error("Expecting function got: "+u);const z=this._zoneDelegate.intercept(this,u,p),q=this;return function(){return q.runGuarded(z,this,arguments,p)}}run(u,p,z,q){mt={parent:mt,zone:this};try{return this._zoneDelegate.invoke(this,u,p,z,q)}finally{mt=mt.parent}}runGuarded(u,p=null,z,q){mt={parent:mt,zone:this};try{try{return this._zoneDelegate.invoke(this,u,p,z,q)}catch(jt){if(this._zoneDelegate.handleError(this,jt))throw jt}}finally{mt=mt.parent}}runTask(u,p,z){if(u.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(u.zone||Dt).name+"; Execution: "+this.name+")");if(u.state===ft&&(u.type===Ct||u.type===Y))return;const q=u.state!=H;q&&u._transitionTo(H,ut),u.runCount++;const jt=wt;wt=u,mt={parent:mt,zone:this};try{u.type==Y&&u.data&&!u.data.isPeriodic&&(u.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,u,p,z)}catch(D){if(this._zoneDelegate.handleError(this,D))throw D}}finally{u.state!==ft&&u.state!==w&&(u.type==Ct||u.data&&u.data.isPeriodic?q&&u._transitionTo(ut,H):(u.runCount=0,this._updateTaskCount(u,-1),q&&u._transitionTo(ft,H,ft))),mt=mt.parent,wt=jt}}scheduleTask(u){if(u.zone&&u.zone!==this){let z=this;for(;z;){if(z===u.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${u.zone.name}`);z=z.parent}}u._transitionTo(Rt,ft);const p=[];u._zoneDelegates=p,u._zone=this;try{u=this._zoneDelegate.scheduleTask(this,u)}catch(z){throw u._transitionTo(w,Rt,ft),this._zoneDelegate.handleError(this,z),z}return u._zoneDelegates===p&&this._updateTaskCount(u,1),u.state==Rt&&u._transitionTo(ut,Rt),u}scheduleMicroTask(u,p,z,q){return this.scheduleTask(new U(st,u,p,z,q,void 0))}scheduleMacroTask(u,p,z,q,jt){return this.scheduleTask(new U(Y,u,p,z,q,jt))}scheduleEventTask(u,p,z,q,jt){return this.scheduleTask(new U(Ct,u,p,z,q,jt))}cancelTask(u){if(u.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(u.zone||Dt).name+"; Execution: "+this.name+")");if(u.state===ut||u.state===H){u._transitionTo(vt,ut,H);try{this._zoneDelegate.cancelTask(this,u)}catch(p){throw u._transitionTo(w,vt),this._zoneDelegate.handleError(this,p),p}return this._updateTaskCount(u,-1),u._transitionTo(ft,vt),u.runCount=0,u}}_updateTaskCount(u,p){const z=u._zoneDelegates;-1==p&&(u._zoneDelegates=null);for(let q=0;q<z.length;q++)z[q]._updateTaskCount(u.type,p)}}return it})();const X={name:"",onHasTask:(it,G,u,p)=>it.hasTask(u,p),onScheduleTask:(it,G,u,p)=>it.scheduleTask(u,p),onInvokeTask:(it,G,u,p,z,q)=>it.invokeTask(u,p,z,q),onCancelTask:(it,G,u,p)=>it.cancelTask(u,p)};class K{constructor(G,u,p){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=G,this._parentDelegate=u,this._forkZS=p&&(p&&p.onFork?p:u._forkZS),this._forkDlgt=p&&(p.onFork?u:u._forkDlgt),this._forkCurrZone=p&&(p.onFork?this.zone:u._forkCurrZone),this._interceptZS=p&&(p.onIntercept?p:u._interceptZS),this._interceptDlgt=p&&(p.onIntercept?u:u._interceptDlgt),this._interceptCurrZone=p&&(p.onIntercept?this.zone:u._interceptCurrZone),this._invokeZS=p&&(p.onInvoke?p:u._invokeZS),this._invokeDlgt=p&&(p.onInvoke?u:u._invokeDlgt),this._invokeCurrZone=p&&(p.onInvoke?this.zone:u._invokeCurrZone),this._handleErrorZS=p&&(p.onHandleError?p:u._handleErrorZS),this._handleErrorDlgt=p&&(p.onHandleError?u:u._handleErrorDlgt),this._handleErrorCurrZone=p&&(p.onHandleError?this.zone:u._handleErrorCurrZone),this._scheduleTaskZS=p&&(p.onScheduleTask?p:u._scheduleTaskZS),this._scheduleTaskDlgt=p&&(p.onScheduleTask?u:u._scheduleTaskDlgt),this._scheduleTaskCurrZone=p&&(p.onScheduleTask?this.zone:u._scheduleTaskCurrZone),this._invokeTaskZS=p&&(p.onInvokeTask?p:u._invokeTaskZS),this._invokeTaskDlgt=p&&(p.onInvokeTask?u:u._invokeTaskDlgt),this._invokeTaskCurrZone=p&&(p.onInvokeTask?this.zone:u._invokeTaskCurrZone),this._cancelTaskZS=p&&(p.onCancelTask?p:u._cancelTaskZS),this._cancelTaskDlgt=p&&(p.onCancelTask?u:u._cancelTaskDlgt),this._cancelTaskCurrZone=p&&(p.onCancelTask?this.zone:u._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const z=p&&p.onHasTask;(z||u&&u._hasTaskZS)&&(this._hasTaskZS=z?p:X,this._hasTaskDlgt=u,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=G,p.onScheduleTask||(this._scheduleTaskZS=X,this._scheduleTaskDlgt=u,this._scheduleTaskCurrZone=this.zone),p.onInvokeTask||(this._invokeTaskZS=X,this._invokeTaskDlgt=u,this._invokeTaskCurrZone=this.zone),p.onCancelTask||(this._cancelTaskZS=X,this._cancelTaskDlgt=u,this._cancelTaskCurrZone=this.zone))}fork(G,u){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,G,u):new A(G,u)}intercept(G,u,p){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,G,u,p):u}invoke(G,u,p,z,q){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,G,u,p,z,q):u.apply(p,z)}handleError(G,u){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,G,u)}scheduleTask(G,u){let p=u;if(this._scheduleTaskZS)this._hasTaskZS&&p._zoneDelegates.push(this._hasTaskDlgtOwner),p=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,G,u),p||(p=u);else if(u.scheduleFn)u.scheduleFn(u);else{if(u.type!=st)throw new Error("Task is missing scheduleFn.");_(u)}return p}invokeTask(G,u,p,z){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,G,u,p,z):u.callback.apply(p,z)}cancelTask(G,u){let p;if(this._cancelTaskZS)p=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,G,u);else{if(!u.cancelFn)throw Error("Task is not cancelable");p=u.cancelFn(u)}return p}hasTask(G,u){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,G,u)}catch(p){this.handleError(G,p)}}_updateTaskCount(G,u){const p=this._taskCounts,z=p[G],q=p[G]=z+u;if(q<0)throw new Error("More tasks executed then were scheduled.");0!=z&&0!=q||this.hasTask(this.zone,{microTask:p.microTask>0,macroTask:p.macroTask>0,eventTask:p.eventTask>0,change:G})}}class U{constructor(G,u,p,z,q,jt){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=G,this.source=u,this.data=z,this.scheduleFn=q,this.cancelFn=jt,!p)throw new Error("callback is not defined");this.callback=p;const D=this;this.invoke=G===Ct&&z&&z.useG?U.invokeTask:function(){return U.invokeTask.call(a,D,this,arguments)}}static invokeTask(G,u,p){G||(G=this),kt++;try{return G.runCount++,G.zone.runTask(G,u,p)}finally{1==kt&&F(),kt--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(ft,Rt)}_transitionTo(G,u,p){if(this._state!==u&&this._state!==p)throw new Error(`${this.type} '${this.source}': can not transition to '${G}', expecting state '${u}'${p?" or '"+p+"'":""}, was '${this._state}'.`);this._state=G,G==ft&&(this._zoneDelegates=null)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const at=S("setTimeout"),rt=S("Promise"),ot=S("then");let Mt,yt=[],ct=!1;function Ot(it){if(Mt||a[rt]&&(Mt=a[rt].resolve(0)),Mt){let G=Mt[ot];G||(G=Mt.then),G.call(Mt,it)}else a[at](it,0)}function _(it){0===kt&&0===yt.length&&Ot(F),it&&yt.push(it)}function F(){if(!ct){for(ct=!0;yt.length;){const it=yt;yt=[];for(let G=0;G<it.length;G++){const u=it[G];try{u.zone.runTask(u,null,null)}catch(p){St.onUnhandledError(p)}}}St.microtaskDrainDone(),ct=!1}}const Dt={name:"NO ZONE"},ft="notScheduled",Rt="scheduling",ut="scheduled",H="running",vt="canceling",w="unknown",st="microTask",Y="macroTask",Ct="eventTask",Ft={},St={symbol:S,currentZoneFrame:()=>mt,onUnhandledError:Tt,microtaskDrainDone:Tt,scheduleMicroTask:_,showUncaughtError:()=>!A[S("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:Tt,patchMethod:()=>Tt,bindArguments:()=>[],patchThen:()=>Tt,patchMacroTask:()=>Tt,patchEventPrototype:()=>Tt,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>Tt,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>Tt,wrapWithCurrentZone:()=>Tt,filterProperties:()=>[],attachOriginToPatched:()=>Tt,_redefineProperty:()=>Tt,patchCallbacks:()=>Tt,nativeScheduleMicroTask:Ot};let mt={parent:null,zone:new A(null,null)},wt=null,kt=0;function Tt(){}g("Zone","Zone"),a.Zone=A}(typeof window<"u"&&window||typeof self<"u"&&self||global);const i=Object.getOwnPropertyDescriptor,l=Object.defineProperty,t=Object.getPrototypeOf,e=Object.create,n=Array.prototype.slice,s="addEventListener",o="removeEventListener",r=Zone.__symbol__(s),c=Zone.__symbol__(o),v="true",f="false",h=Zone.__symbol__("");function y(a,d){return Zone.current.wrap(a,d)}function x(a,d,m,g,O){return Zone.current.scheduleMacroTask(a,d,m,g,O)}const T=Zone.__symbol__,P=typeof window<"u",N=P?window:void 0,R=P&&N||"object"==typeof self&&self||global,j="removeAttribute";function L(a,d){for(let m=a.length-1;m>=0;m--)"function"==typeof a[m]&&(a[m]=y(a[m],d+"_"+m));return a}function Z(a){return!a||!1!==a.writable&&!("function"==typeof a.get&&typeof a.set>"u")}const b=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,k=!("nw"in R)&&typeof R.process<"u"&&"[object process]"==={}.toString.call(R.process),B=!k&&!b&&!(!P||!N.HTMLElement),Q=typeof R.process<"u"&&"[object process]"==={}.toString.call(R.process)&&!b&&!(!P||!N.HTMLElement),gt={},bt=function(a){if(!(a=a||R.event))return;let d=gt[a.type];d||(d=gt[a.type]=T("ON_PROPERTY"+a.type));const m=this||a.target||R,g=m[d];let O;return B&&m===N&&"error"===a.type?(O=g&&g.call(this,a.message,a.filename,a.lineno,a.colno,a.error),!0===O&&a.preventDefault()):(O=g&&g.apply(this,arguments),null!=O&&!O&&a.preventDefault()),O};function It(a,d,m){let g=i(a,d);if(!g&&m&&i(m,d)&&(g={enumerable:!0,configurable:!0}),!g||!g.configurable)return;const O=T("on"+d+"patched");if(a.hasOwnProperty(O)&&a[O])return;delete g.writable,delete g.value;const S=g.get,$=g.set,A=d.slice(2);let X=gt[A];X||(X=gt[A]=T("ON_PROPERTY"+A)),g.set=function(K){let U=this;!U&&a===R&&(U=R),U&&("function"==typeof U[X]&&U.removeEventListener(A,bt),$&&$.call(U,null),U[X]=K,"function"==typeof K&&U.addEventListener(A,bt,!1))},g.get=function(){let K=this;if(!K&&a===R&&(K=R),!K)return null;const U=K[X];if(U)return U;if(S){let at=S.call(this);if(at)return g.set.call(this,at),"function"==typeof K[j]&&K.removeAttribute(d),at}return null},l(a,d,g),a[O]=!0}function Nt(a,d,m){if(d)for(let g=0;g<d.length;g++)It(a,"on"+d[g],m);else{const g=[];for(const O in a)"on"==O.slice(0,2)&&g.push(O);for(let O=0;O<g.length;O++)It(a,g[O],m)}}const xt=T("originalInstance");function At(a){const d=R[a];if(!d)return;R[T(a)]=d,R[a]=function(){const O=L(arguments,a);switch(O.length){case 0:this[xt]=new d;break;case 1:this[xt]=new d(O[0]);break;case 2:this[xt]=new d(O[0],O[1]);break;case 3:this[xt]=new d(O[0],O[1],O[2]);break;case 4:this[xt]=new d(O[0],O[1],O[2],O[3]);break;default:throw new Error("Arg list too long.")}},dt(R[a],d);const m=new d(function(){});let g;for(g in m)"XMLHttpRequest"===a&&"responseBlob"===g||function(O){"function"==typeof m[O]?R[a].prototype[O]=function(){return this[xt][O].apply(this[xt],arguments)}:l(R[a].prototype,O,{set:function(S){"function"==typeof S?(this[xt][O]=y(S,a+"."+O),dt(this[xt][O],S)):this[xt][O]=S},get:function(){return this[xt][O]}})}(g);for(g in d)"prototype"!==g&&d.hasOwnProperty(g)&&(R[a][g]=d[g])}function lt(a,d,m){let g=a;for(;g&&!g.hasOwnProperty(d);)g=t(g);!g&&a[d]&&(g=a);const O=T(d);let S=null;if(g&&(!(S=g[O])||!g.hasOwnProperty(O))&&(S=g[O]=g[d],Z(g&&i(g,d)))){const A=m(S,O,d);g[d]=function(){return A(this,arguments)},dt(g[d],S)}return S}function Pt(a,d,m){let g=null;function O(S){const $=S.data;return $.args[$.cbIdx]=function(){S.invoke.apply(this,arguments)},g.apply($.target,$.args),S}g=lt(a,d,S=>function($,A){const X=m($,A);return X.cbIdx>=0&&"function"==typeof A[X.cbIdx]?x(X.name,A[X.cbIdx],X,O):S.apply($,A)})}function dt(a,d){a[T("OriginalDelegate")]=d}let Et=!1,Zt=!1;function le(){if(Et)return Zt;Et=!0;try{const a=N.navigator.userAgent;(-1!==a.indexOf("MSIE ")||-1!==a.indexOf("Trident/")||-1!==a.indexOf("Edge/"))&&(Zt=!0)}catch{}return Zt}Zone.__load_patch("ZoneAwarePromise",(a,d,m)=>{const g=Object.getOwnPropertyDescriptor,O=Object.defineProperty,$=m.symbol,A=[],X=!0===a[$("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],K=$("Promise"),U=$("then"),at="__creationTrace__";m.onUnhandledError=D=>{if(m.showUncaughtError()){const I=D&&D.rejection;I?console.error("Unhandled Promise rejection:",I instanceof Error?I.message:I,"; Zone:",D.zone.name,"; Task:",D.task&&D.task.source,"; Value:",I,I instanceof Error?I.stack:void 0):console.error(D)}},m.microtaskDrainDone=()=>{for(;A.length;){const D=A.shift();try{D.zone.runGuarded(()=>{throw D.throwOriginal?D.rejection:D})}catch(I){ot(I)}}};const rt=$("unhandledPromiseRejectionHandler");function ot(D){m.onUnhandledError(D);try{const I=d[rt];"function"==typeof I&&I.call(this,D)}catch{}}function yt(D){return D&&D.then}function ct(D){return D}function Mt(D){return u.reject(D)}const Ot=$("state"),_=$("value"),F=$("finally"),Dt=$("parentPromiseValue"),ft=$("parentPromiseState"),Rt="Promise.then",ut=null,H=!0,vt=!1,w=0;function st(D,I){return E=>{try{St(D,I,E)}catch(C){St(D,!1,C)}}}const Y=function(){let D=!1;return function(E){return function(){D||(D=!0,E.apply(null,arguments))}}},Ct="Promise resolved with itself",Ft=$("currentTaskTrace");function St(D,I,E){const C=Y();if(D===E)throw new TypeError(Ct);if(D[Ot]===ut){let V=null;try{("object"==typeof E||"function"==typeof E)&&(V=E&&E.then)}catch(J){return C(()=>{St(D,!1,J)})(),D}if(I!==vt&&E instanceof u&&E.hasOwnProperty(Ot)&&E.hasOwnProperty(_)&&E[Ot]!==ut)wt(E),St(D,E[Ot],E[_]);else if(I!==vt&&"function"==typeof V)try{V.call(E,C(st(D,I)),C(st(D,!1)))}catch(J){C(()=>{St(D,!1,J)})()}else{D[Ot]=I;const J=D[_];if(D[_]=E,D[F]===F&&I===H&&(D[Ot]=D[ft],D[_]=D[Dt]),I===vt&&E instanceof Error){const W=d.currentTask&&d.currentTask.data&&d.currentTask.data[at];W&&O(E,Ft,{configurable:!0,enumerable:!1,writable:!0,value:W})}for(let W=0;W<J.length;)kt(D,J[W++],J[W++],J[W++],J[W++]);if(0==J.length&&I==vt){D[Ot]=w;let W=E;try{throw new Error("Uncaught (in promise): "+function S(D){return D&&D.toString===Object.prototype.toString?(D.constructor&&D.constructor.name||"")+": "+JSON.stringify(D):D?D.toString():Object.prototype.toString.call(D)}(E)+(E&&E.stack?"\n"+E.stack:""))}catch(tt){W=tt}X&&(W.throwOriginal=!0),W.rejection=E,W.promise=D,W.zone=d.current,W.task=d.currentTask,A.push(W),m.scheduleMicroTask()}}}return D}const mt=$("rejectionHandledHandler");function wt(D){if(D[Ot]===w){try{const I=d[mt];I&&"function"==typeof I&&I.call(this,{rejection:D[_],promise:D})}catch{}D[Ot]=vt;for(let I=0;I<A.length;I++)D===A[I].promise&&A.splice(I,1)}}function kt(D,I,E,C,V){wt(D);const J=D[Ot],W=J?"function"==typeof C?C:ct:"function"==typeof V?V:Mt;I.scheduleMicroTask(Rt,()=>{try{const tt=D[_],et=!!E&&F===E[F];et&&(E[Dt]=tt,E[ft]=J);const nt=I.run(W,void 0,et&&W!==Mt&&W!==ct?[]:[tt]);St(E,!0,nt)}catch(tt){St(E,!1,tt)}},E)}const it=function(){},G=a.AggregateError;class u{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(I){return St(new this(null),H,I)}static reject(I){return St(new this(null),vt,I)}static any(I){if(!I||"function"!=typeof I[Symbol.iterator])return Promise.reject(new G([],"All promises were rejected"));const E=[];let C=0;try{for(let W of I)C++,E.push(u.resolve(W))}catch{return Promise.reject(new G([],"All promises were rejected"))}if(0===C)return Promise.reject(new G([],"All promises were rejected"));let V=!1;const J=[];return new u((W,tt)=>{for(let et=0;et<E.length;et++)E[et].then(nt=>{V||(V=!0,W(nt))},nt=>{J.push(nt),C--,0===C&&(V=!0,tt(new G(J,"All promises were rejected")))})})}static race(I){let E,C,V=new this((tt,et)=>{E=tt,C=et});function J(tt){E(tt)}function W(tt){C(tt)}for(let tt of I)yt(tt)||(tt=this.resolve(tt)),tt.then(J,W);return V}static all(I){return u.allWithCallback(I)}static allSettled(I){return(this&&this.prototype instanceof u?this:u).allWithCallback(I,{thenCallback:C=>({status:"fulfilled",value:C}),errorCallback:C=>({status:"rejected",reason:C})})}static allWithCallback(I,E){let C,V,J=new this((nt,ht)=>{C=nt,V=ht}),W=2,tt=0;const et=[];for(let nt of I){yt(nt)||(nt=this.resolve(nt));const ht=tt;try{nt.then(pt=>{et[ht]=E?E.thenCallback(pt):pt,W--,0===W&&C(et)},pt=>{E?(et[ht]=E.errorCallback(pt),W--,0===W&&C(et)):V(pt)})}catch(pt){V(pt)}W++,tt++}return W-=2,0===W&&C(et),J}constructor(I){const E=this;if(!(E instanceof u))throw new Error("Must be an instanceof Promise.");E[Ot]=ut,E[_]=[];try{const C=Y();I&&I(C(st(E,H)),C(st(E,vt)))}catch(C){St(E,!1,C)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return u}then(I,E){let C=this.constructor?.[Symbol.species];(!C||"function"!=typeof C)&&(C=this.constructor||u);const V=new C(it),J=d.current;return this[Ot]==ut?this[_].push(J,V,I,E):kt(this,J,V,I,E),V}catch(I){return this.then(null,I)}finally(I){let E=this.constructor?.[Symbol.species];(!E||"function"!=typeof E)&&(E=u);const C=new E(it);C[F]=F;const V=d.current;return this[Ot]==ut?this[_].push(V,C,I,I):kt(this,V,C,I,I),C}}u.resolve=u.resolve,u.reject=u.reject,u.race=u.race,u.all=u.all;const p=a[K]=a.Promise;a.Promise=u;const z=$("thenPatched");function q(D){const I=D.prototype,E=g(I,"then");if(E&&(!1===E.writable||!E.configurable))return;const C=I.then;I[U]=C,D.prototype.then=function(V,J){return new u((tt,et)=>{C.call(this,tt,et)}).then(V,J)},D[z]=!0}return m.patchThen=q,p&&(q(p),lt(a,"fetch",D=>function jt(D){return function(I,E){let C=D.apply(I,E);if(C instanceof u)return C;let V=C.constructor;return V[z]||q(V),C}}(D))),Promise[d.__symbol__("uncaughtPromiseErrors")]=A,u}),Zone.__load_patch("toString",a=>{const d=Function.prototype.toString,m=T("OriginalDelegate"),g=T("Promise"),O=T("Error"),S=function(){if("function"==typeof this){const K=this[m];if(K)return"function"==typeof K?d.call(K):Object.prototype.toString.call(K);if(this===Promise){const U=a[g];if(U)return d.call(U)}if(this===Error){const U=a[O];if(U)return d.call(U)}}return d.call(this)};S[m]=d,Function.prototype.toString=S;const $=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":$.call(this)}});let Ut=!1;if(typeof window<"u")try{const a=Object.defineProperty({},"passive",{get:function(){Ut=!0}});window.addEventListener("test",a,a),window.removeEventListener("test",a,a)}catch{Ut=!1}const de={useG:!0},Lt={},qt={},te=new RegExp("^"+h+"(\\w+)(true|false)$"),ee=T("propagationStopped");function ne(a,d){const m=(d?d(a):a)+f,g=(d?d(a):a)+v,O=h+m,S=h+g;Lt[a]={},Lt[a][f]=O,Lt[a][v]=S}function ve(a,d,m,g){const O=g&&g.add||s,S=g&&g.rm||o,$=g&&g.listeners||"eventListeners",A=g&&g.rmAll||"removeAllListeners",X=T(O),K="."+O+":",U="prependListener",at="."+U+":",rt=function(_,F,Dt){if(_.isRemoved)return;const ft=_.callback;let Rt;"object"==typeof ft&&ft.handleEvent&&(_.callback=H=>ft.handleEvent(H),_.originalDelegate=ft);try{_.invoke(_,F,[Dt])}catch(H){Rt=H}const ut=_.options;return ut&&"object"==typeof ut&&ut.once&&F[S].call(F,Dt.type,_.originalDelegate?_.originalDelegate:_.callback,ut),Rt};function ot(_,F,Dt){if(!(F=F||a.event))return;const ft=_||F.target||a,Rt=ft[Lt[F.type][Dt?v:f]];if(Rt){const ut=[];if(1===Rt.length){const H=rt(Rt[0],ft,F);H&&ut.push(H)}else{const H=Rt.slice();for(let vt=0;vt<H.length&&(!F||!0!==F[ee]);vt++){const w=rt(H[vt],ft,F);w&&ut.push(w)}}if(1===ut.length)throw ut[0];for(let H=0;H<ut.length;H++){const vt=ut[H];d.nativeScheduleMicroTask(()=>{throw vt})}}}const yt=function(_){return ot(this,_,!1)},ct=function(_){return ot(this,_,!0)};function Mt(_,F){if(!_)return!1;let Dt=!0;F&&void 0!==F.useG&&(Dt=F.useG);const ft=F&&F.vh;let Rt=!0;F&&void 0!==F.chkDup&&(Rt=F.chkDup);let ut=!1;F&&void 0!==F.rt&&(ut=F.rt);let H=_;for(;H&&!H.hasOwnProperty(O);)H=t(H);if(!H&&_[O]&&(H=_),!H||H[X])return!1;const vt=F&&F.eventNameToString,w={},st=H[X]=H[O],Y=H[T(S)]=H[S],Ct=H[T($)]=H[$],Ft=H[T(A)]=H[A];let St;F&&F.prepend&&(St=H[T(F.prepend)]=H[F.prepend]);const u=Dt?function(E){if(!w.isExisting)return st.call(w.target,w.eventName,w.capture?ct:yt,w.options)}:function(E){return st.call(w.target,w.eventName,E.invoke,w.options)},p=Dt?function(E){if(!E.isRemoved){const C=Lt[E.eventName];let V;C&&(V=C[E.capture?v:f]);const J=V&&E.target[V];if(J)for(let W=0;W<J.length;W++)if(J[W]===E){J.splice(W,1),E.isRemoved=!0,0===J.length&&(E.allRemoved=!0,E.target[V]=null);break}}if(E.allRemoved)return Y.call(E.target,E.eventName,E.capture?ct:yt,E.options)}:function(E){return Y.call(E.target,E.eventName,E.invoke,E.options)},q=F&&F.diff?F.diff:function(E,C){const V=typeof C;return"function"===V&&E.callback===C||"object"===V&&E.originalDelegate===C},jt=Zone[T("UNPATCHED_EVENTS")],D=a[T("PASSIVE_EVENTS")],I=function(E,C,V,J,W=!1,tt=!1){return function(){const et=this||a;let nt=arguments[0];F&&F.transferEventName&&(nt=F.transferEventName(nt));let ht=arguments[1];if(!ht)return E.apply(this,arguments);if(k&&"uncaughtException"===nt)return E.apply(this,arguments);let pt=!1;if("function"!=typeof ht){if(!ht.handleEvent)return E.apply(this,arguments);pt=!0}if(ft&&!ft(E,ht,et,arguments))return;const Gt=Ut&&!!D&&-1!==D.indexOf(nt),Ht=function mt(E,C){return!Ut&&"object"==typeof E&&E?!!E.capture:Ut&&C?"boolean"==typeof E?{capture:E,passive:!0}:E?"object"==typeof E&&!1!==E.passive?{...E,passive:!0}:E:{passive:!0}:E}(arguments[2],Gt);if(jt)for(let Bt=0;Bt<jt.length;Bt++)if(nt===jt[Bt])return Gt?E.call(et,nt,ht,Ht):E.apply(this,arguments);const Qt=!!Ht&&("boolean"==typeof Ht||Ht.capture),ae=!(!Ht||"object"!=typeof Ht)&&Ht.once,Oe=Zone.current;let _t=Lt[nt];_t||(ne(nt,vt),_t=Lt[nt]);const ie=_t[Qt?v:f];let Yt,Vt=et[ie],ue=!1;if(Vt){if(ue=!0,Rt)for(let Bt=0;Bt<Vt.length;Bt++)if(q(Vt[Bt],ht))return}else Vt=et[ie]=[];const ce=et.constructor.name,fe=qt[ce];fe&&(Yt=fe[nt]),Yt||(Yt=ce+C+(vt?vt(nt):nt)),w.options=Ht,ae&&(w.options.once=!1),w.target=et,w.capture=Qt,w.eventName=nt,w.isExisting=ue;const zt=Dt?de:void 0;zt&&(zt.taskData=w);const $t=Oe.scheduleEventTask(Yt,ht,zt,V,J);return w.target=null,zt&&(zt.taskData=null),ae&&(Ht.once=!0),!Ut&&"boolean"==typeof $t.options||($t.options=Ht),$t.target=et,$t.capture=Qt,$t.eventName=nt,pt&&($t.originalDelegate=ht),tt?Vt.unshift($t):Vt.push($t),W?et:void 0}};return H[O]=I(st,K,u,p,ut),St&&(H[U]=I(St,at,function(E){return St.call(w.target,w.eventName,E.invoke,w.options)},p,ut,!0)),H[S]=function(){const E=this||a;let C=arguments[0];F&&F.transferEventName&&(C=F.transferEventName(C));const V=arguments[2],J=!!V&&("boolean"==typeof V||V.capture),W=arguments[1];if(!W)return Y.apply(this,arguments);if(ft&&!ft(Y,W,E,arguments))return;const tt=Lt[C];let et;tt&&(et=tt[J?v:f]);const nt=et&&E[et];if(nt)for(let ht=0;ht<nt.length;ht++){const pt=nt[ht];if(q(pt,W))return nt.splice(ht,1),pt.isRemoved=!0,0===nt.length&&(pt.allRemoved=!0,E[et]=null,"string"==typeof C)&&(E[h+"ON_PROPERTY"+C]=null),pt.zone.cancelTask(pt),ut?E:void 0}return Y.apply(this,arguments)},H[$]=function(){const E=this||a;let C=arguments[0];F&&F.transferEventName&&(C=F.transferEventName(C));const V=[],J=re(E,vt?vt(C):C);for(let W=0;W<J.length;W++){const tt=J[W];V.push(tt.originalDelegate?tt.originalDelegate:tt.callback)}return V},H[A]=function(){const E=this||a;let C=arguments[0];if(C){F&&F.transferEventName&&(C=F.transferEventName(C));const V=Lt[C];if(V){const tt=E[V[f]],et=E[V[v]];if(tt){const nt=tt.slice();for(let ht=0;ht<nt.length;ht++){const pt=nt[ht];this[S].call(this,C,pt.originalDelegate?pt.originalDelegate:pt.callback,pt.options)}}if(et){const nt=et.slice();for(let ht=0;ht<nt.length;ht++){const pt=nt[ht];this[S].call(this,C,pt.originalDelegate?pt.originalDelegate:pt.callback,pt.options)}}}}else{const V=Object.keys(E);for(let J=0;J<V.length;J++){const tt=te.exec(V[J]);let et=tt&&tt[1];et&&"removeListener"!==et&&this[A].call(this,et)}this[A].call(this,"removeListener")}if(ut)return this},dt(H[O],st),dt(H[S],Y),Ft&&dt(H[A],Ft),Ct&&dt(H[$],Ct),!0}let Ot=[];for(let _=0;_<m.length;_++)Ot[_]=Mt(m[_],g);return Ot}function re(a,d){if(!d){const S=[];for(let $ in a){const A=te.exec($);let X=A&&A[1];if(X&&(!d||X===d)){const K=a[$];if(K)for(let U=0;U<K.length;U++)S.push(K[U])}}return S}let m=Lt[d];m||(ne(d),m=Lt[d]);const g=a[m[f]],O=a[m[v]];return g?O?g.concat(O):g.slice():O?O.slice():[]}function he(a,d){const m=a.Event;m&&m.prototype&&d.patchMethod(m.prototype,"stopImmediatePropagation",g=>function(O,S){O[ee]=!0,g&&g.apply(O,S)})}function pe(a,d,m,g,O){const S=Zone.__symbol__(g);if(d[S])return;const $=d[S]=d[g];d[g]=function(A,X,K){return X&&X.prototype&&O.forEach(function(U){const at=`${m}.${g}::`+U,rt=X.prototype;try{if(rt.hasOwnProperty(U)){const ot=a.ObjectGetOwnPropertyDescriptor(rt,U);ot&&ot.value?(ot.value=a.wrapWithCurrentZone(ot.value,at),a._redefineProperty(X.prototype,U,ot)):rt[U]&&(rt[U]=a.wrapWithCurrentZone(rt[U],at))}else rt[U]&&(rt[U]=a.wrapWithCurrentZone(rt[U],at))}catch{}}),$.call(d,A,X,K)},a.attachOriginToPatched(d[g],$)}function oe(a,d,m){if(!m||0===m.length)return d;const g=m.filter(S=>S.target===a);if(!g||0===g.length)return d;const O=g[0].ignoreProperties;return d.filter(S=>-1===O.indexOf(S))}function se(a,d,m,g){a&&Nt(a,oe(a,d,m),g)}function Jt(a){return Object.getOwnPropertyNames(a).filter(d=>d.startsWith("on")&&d.length>2).map(d=>d.substring(2))}Zone.__load_patch("util",(a,d,m)=>{const g=Jt(a);m.patchOnProperties=Nt,m.patchMethod=lt,m.bindArguments=L,m.patchMacroTask=Pt;const O=d.__symbol__("BLACK_LISTED_EVENTS"),S=d.__symbol__("UNPATCHED_EVENTS");a[S]&&(a[O]=a[S]),a[O]&&(d[O]=d[S]=a[O]),m.patchEventPrototype=he,m.patchEventTarget=ve,m.isIEOrEdge=le,m.ObjectDefineProperty=l,m.ObjectGetOwnPropertyDescriptor=i,m.ObjectCreate=e,m.ArraySlice=n,m.patchClass=At,m.wrapWithCurrentZone=y,m.filterProperties=oe,m.attachOriginToPatched=dt,m._redefineProperty=Object.defineProperty,m.patchCallbacks=pe,m.getGlobalObjects=()=>({globalSources:qt,zoneSymbolEventNames:Lt,eventNames:g,isBrowser:B,isMix:Q,isNode:k,TRUE_STR:v,FALSE_STR:f,ZONE_SYMBOL_PREFIX:h,ADD_EVENT_LISTENER_STR:s,REMOVE_EVENT_LISTENER_STR:o})});const Xt=T("zoneTask");function Wt(a,d,m,g){let O=null,S=null;m+=g;const $={};function A(K){const U=K.data;return U.args[0]=function(){return K.invoke.apply(this,arguments)},U.handleId=O.apply(a,U.args),K}function X(K){return S.call(a,K.data.handleId)}O=lt(a,d+=g,K=>function(U,at){if("function"==typeof at[0]){const rt={isPeriodic:"Interval"===g,delay:"Timeout"===g||"Interval"===g?at[1]||0:void 0,args:at},ot=at[0];at[0]=function(){try{return ot.apply(this,arguments)}finally{rt.isPeriodic||("number"==typeof rt.handleId?delete $[rt.handleId]:rt.handleId&&(rt.handleId[Xt]=null))}};const yt=x(d,at[0],rt,A,X);if(!yt)return yt;const ct=yt.data.handleId;return"number"==typeof ct?$[ct]=yt:ct&&(ct[Xt]=yt),ct&&ct.ref&&ct.unref&&"function"==typeof ct.ref&&"function"==typeof ct.unref&&(yt.ref=ct.ref.bind(ct),yt.unref=ct.unref.bind(ct)),"number"==typeof ct||ct?ct:yt}return K.apply(a,at)}),S=lt(a,m,K=>function(U,at){const rt=at[0];let ot;"number"==typeof rt?ot=$[rt]:(ot=rt&&rt[Xt],ot||(ot=rt)),ot&&"string"==typeof ot.type?"notScheduled"!==ot.state&&(ot.cancelFn&&ot.data.isPeriodic||0===ot.runCount)&&("number"==typeof rt?delete $[rt]:rt&&(rt[Xt]=null),ot.zone.cancelTask(ot)):K.apply(a,at)})}Zone.__load_patch("legacy",a=>{const d=a[Zone.__symbol__("legacyPatch")];d&&d()}),Zone.__load_patch("timers",a=>{const d="set",m="clear";Wt(a,d,m,"Timeout"),Wt(a,d,m,"Interval"),Wt(a,d,m,"Immediate")}),Zone.__load_patch("requestAnimationFrame",a=>{Wt(a,"request","cancel","AnimationFrame"),Wt(a,"mozRequest","mozCancel","AnimationFrame"),Wt(a,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(a,d)=>{const m=["alert","prompt","confirm"];for(let g=0;g<m.length;g++)lt(a,m[g],(S,$,A)=>function(X,K){return d.current.run(S,a,K,A)})}),Zone.__load_patch("EventTarget",(a,d,m)=>{(function Te(a,d){d.patchEventPrototype(a,d)})(a,m),function me(a,d){if(Zone[d.symbol("patchEventTarget")])return;const{eventNames:m,zoneSymbolEventNames:g,TRUE_STR:O,FALSE_STR:S,ZONE_SYMBOL_PREFIX:$}=d.getGlobalObjects();for(let X=0;X<m.length;X++){const K=m[X],rt=$+(K+S),ot=$+(K+O);g[K]={},g[K][S]=rt,g[K][O]=ot}const A=a.EventTarget;A&&A.prototype&&d.patchEventTarget(a,d,[A&&A.prototype])}(a,m);const g=a.XMLHttpRequestEventTarget;g&&g.prototype&&m.patchEventTarget(a,m,[g.prototype])}),Zone.__load_patch("MutationObserver",(a,d,m)=>{At("MutationObserver"),At("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(a,d,m)=>{At("IntersectionObserver")}),Zone.__load_patch("FileReader",(a,d,m)=>{At("FileReader")}),Zone.__load_patch("on_property",(a,d,m)=>{!function ye(a,d){if(k&&!Q||Zone[a.symbol("patchEvents")])return;const m=d.__Zone_ignore_on_properties;let g=[];if(B){const O=window;g=g.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);const S=function Kt(){try{const a=N.navigator.userAgent;if(-1!==a.indexOf("MSIE ")||-1!==a.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:O,ignoreProperties:["error"]}]:[];se(O,Jt(O),m&&m.concat(S),t(O))}g=g.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(let O=0;O<g.length;O++){const S=d[g[O]];S&&S.prototype&&se(S.prototype,Jt(S.prototype),m)}}(m,a)}),Zone.__load_patch("customElements",(a,d,m)=>{!function Ee(a,d){const{isBrowser:m,isMix:g}=d.getGlobalObjects();(m||g)&&a.customElements&&"customElements"in a&&d.patchCallbacks(d,a.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(a,m)}),Zone.__load_patch("XHR",(a,d)=>{!function X(K){const U=K.XMLHttpRequest;if(!U)return;const at=U.prototype;let ot=at[r],yt=at[c];if(!ot){const w=K.XMLHttpRequestEventTarget;if(w){const st=w.prototype;ot=st[r],yt=st[c]}}const ct="readystatechange",Mt="scheduled";function Ot(w){const st=w.data,Y=st.target;Y[S]=!1,Y[A]=!1;const Ct=Y[O];ot||(ot=Y[r],yt=Y[c]),Ct&&yt.call(Y,ct,Ct);const Ft=Y[O]=()=>{if(Y.readyState===Y.DONE)if(!st.aborted&&Y[S]&&w.state===Mt){const mt=Y[d.__symbol__("loadfalse")];if(0!==Y.status&&mt&&mt.length>0){const wt=w.invoke;w.invoke=function(){const kt=Y[d.__symbol__("loadfalse")];for(let Tt=0;Tt<kt.length;Tt++)kt[Tt]===w&&kt.splice(Tt,1);!st.aborted&&w.state===Mt&&wt.call(w)},mt.push(w)}else w.invoke()}else!st.aborted&&!1===Y[S]&&(Y[A]=!0)};return ot.call(Y,ct,Ft),Y[m]||(Y[m]=w),H.apply(Y,st.args),Y[S]=!0,w}function _(){}function F(w){const st=w.data;return st.aborted=!0,vt.apply(st.target,st.args)}const Dt=lt(at,"open",()=>function(w,st){return w[g]=0==st[2],w[$]=st[1],Dt.apply(w,st)}),Rt=T("fetchTaskAborting"),ut=T("fetchTaskScheduling"),H=lt(at,"send",()=>function(w,st){if(!0===d.current[ut]||w[g])return H.apply(w,st);{const Y={target:w,url:w[$],isPeriodic:!1,args:st,aborted:!1},Ct=x("XMLHttpRequest.send",_,Y,Ot,F);w&&!0===w[A]&&!Y.aborted&&Ct.state===Mt&&Ct.invoke()}}),vt=lt(at,"abort",()=>function(w,st){const Y=function rt(w){return w[m]}(w);if(Y&&"string"==typeof Y.type){if(null==Y.cancelFn||Y.data&&Y.data.aborted)return;Y.zone.cancelTask(Y)}else if(!0===d.current[Rt])return vt.apply(w,st)})}(a);const m=T("xhrTask"),g=T("xhrSync"),O=T("xhrListener"),S=T("xhrScheduled"),$=T("xhrURL"),A=T("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",a=>{a.navigator&&a.navigator.geolocation&&function M(a,d){const m=a.constructor.name;for(let g=0;g<d.length;g++){const O=d[g],S=a[O];if(S){if(!Z(i(a,O)))continue;a[O]=(A=>{const X=function(){return A.apply(this,L(arguments,m+"."+O))};return dt(X,A),X})(S)}}}(a.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(a,d)=>{function m(g){return function(O){re(a,g).forEach($=>{const A=a.PromiseRejectionEvent;if(A){const X=new A(g,{promise:O.promise,reason:O.rejection});$.invoke(X)}})}}a.PromiseRejectionEvent&&(d[T("unhandledPromiseRejectionHandler")]=m("unhandledrejection"),d[T("rejectionHandledHandler")]=m("rejectionhandled"))}),Zone.__load_patch("queueMicrotask",(a,d,m)=>{!function ge(a,d){d.patchMethod(a,"queueMicrotask",m=>function(g,O){Zone.current.scheduleMicroTask("queueMicrotask",O[0])})}(a,m)})},5846:(i,l,t)=>{t(7103),t(2586),t(2552),t(4376),t(5153),t(1879),t(2650),t(1104),t(1883),t(5433),t(5e3),t(5932),t(5443),t(6316),t(6094)},8509:(i,l,t)=>{t(9087),t(9766),t(1390),t(6094)},8681:(i,l,t)=>{t(4614),t(7594),t(7146),t(7531),t(5039),t(4300),t(6328),t(6094)},9353:(i,l,t)=>{t(7491),t(4907),t(9100),t(9269),t(1319),t(9732),t(1176),t(3107),t(1691),t(6094)},3387:i=>{i.exports=function(l){if("function"!=typeof l)throw TypeError(l+" is not a function!");return l}},8184:(i,l,t)=>{var e=t(7574)("unscopables"),n=Array.prototype;null==n[e]&&t(3341)(n,e,{}),i.exports=function(s){n[e][s]=!0}},6440:i=>{i.exports=function(l,t,e,n){if(!(l instanceof t)||void 0!==n&&n in l)throw TypeError(e+": incorrect invocation!");return l}},4228:(i,l,t)=>{var e=t(3305);i.exports=function(n){if(!e(n))throw TypeError(n+" is not an object!");return n}},956:(i,l,t)=>{var e=t(8790);i.exports=function(n,s){var o=[];return e(n,!1,o.push,o,s),o}},1464:(i,l,t)=>{var e=t(7221),n=t(1485),s=t(157);i.exports=function(o){return function(r,c,v){var x,f=e(r),h=n(f.length),y=s(v,h);if(o&&c!=c){for(;h>y;)if((x=f[y++])!=x)return!0}else for(;h>y;y++)if((o||y in f)&&f[y]===c)return o||y||0;return!o&&-1}}},6179:(i,l,t)=>{var e=t(5052),n=t(1249),s=t(8270),o=t(1485),r=t(5572);i.exports=function(c,v){var f=1==c,h=2==c,y=3==c,x=4==c,T=6==c,P=5==c||T,N=v||r;return function(R,j,L){for(var gt,bt,M=s(R),Z=n(M),b=e(j,L,3),k=o(Z.length),B=0,Q=f?N(R,k):h?N(R,0):void 0;k>B;B++)if((P||B in Z)&&(bt=b(gt=Z[B],B,M),c))if(f)Q[B]=bt;else if(bt)switch(c){case 3:return!0;case 5:return gt;case 6:return B;case 2:Q.push(gt)}else if(x)return!1;return T?-1:y||x?x:Q}}},3606:(i,l,t)=>{var e=t(3305),n=t(7981),s=t(7574)("species");i.exports=function(o){var r;return n(o)&&("function"==typeof(r=o.constructor)&&(r===Array||n(r.prototype))&&(r=void 0),e(r)&&null===(r=r[s])&&(r=void 0)),void 0===r?Array:r}},5572:(i,l,t)=>{var e=t(3606);i.exports=function(n,s){return new(e(n))(s)}},5538:(i,l,t)=>{"use strict";var e=t(3387),n=t(3305),s=t(4877),o=[].slice,r={};i.exports=Function.bind||function(f){var h=e(this),y=o.call(arguments,1),x=function(){var T=y.concat(o.call(arguments));return this instanceof x?function(v,f,h){if(!(f in r)){for(var y=[],x=0;x<f;x++)y[x]="a["+x+"]";r[f]=Function("F,a","return new F("+y.join(",")+")")}return r[f](v,h)}(h,T.length,T):s(h,T,f)};return n(h.prototype)&&(x.prototype=h.prototype),x}},4848:(i,l,t)=>{var e=t(5089),n=t(7574)("toStringTag"),s="Arguments"==e(function(){return arguments}());i.exports=function(r){var c,v,f;return void 0===r?"Undefined":null===r?"Null":"string"==typeof(v=function(r,c){try{return r[c]}catch{}}(c=Object(r),n))?v:s?e(c):"Object"==(f=e(c))&&"function"==typeof c.callee?"Arguments":f}},5089:i=>{var l={}.toString;i.exports=function(t){return l.call(t).slice(8,-1)}},6197:(i,l,t)=>{"use strict";var e=t(7967).f,n=t(4719),s=t(6065),o=t(5052),r=t(6440),c=t(8790),v=t(8175),f=t(4970),h=t(5762),y=t(1763),x=t(2988).fastKey,T=t(2888),P=y?"_s":"size",N=function(R,j){var M,L=x(j);if("F"!==L)return R._i[L];for(M=R._f;M;M=M.n)if(M.k==j)return M};i.exports={getConstructor:function(R,j,L,M){var Z=R(function(b,k){r(b,Z,j,"_i"),b._t=j,b._i=n(null),b._f=void 0,b._l=void 0,b[P]=0,null!=k&&c(k,L,b[M],b)});return s(Z.prototype,{clear:function(){for(var k=T(this,j),B=k._i,Q=k._f;Q;Q=Q.n)Q.r=!0,Q.p&&(Q.p=Q.p.n=void 0),delete B[Q.i];k._f=k._l=void 0,k[P]=0},delete:function(b){var k=T(this,j),B=N(k,b);if(B){var Q=B.n,gt=B.p;delete k._i[B.i],B.r=!0,gt&&(gt.n=Q),Q&&(Q.p=gt),k._f==B&&(k._f=Q),k._l==B&&(k._l=gt),k[P]--}return!!B},forEach:function(k){T(this,j);for(var Q,B=o(k,arguments.length>1?arguments[1]:void 0,3);Q=Q?Q.n:this._f;)for(B(Q.v,Q.k,this);Q&&Q.r;)Q=Q.p},has:function(k){return!!N(T(this,j),k)}}),y&&e(Z.prototype,"size",{get:function(){return T(this,j)[P]}}),Z},def:function(R,j,L){var Z,b,M=N(R,j);return M?M.v=L:(R._l=M={i:b=x(j,!0),k:j,v:L,p:Z=R._l,n:void 0,r:!1},R._f||(R._f=M),Z&&(Z.n=M),R[P]++,"F"!==b&&(R._i[b]=M)),R},getEntry:N,setStrong:function(R,j,L){v(R,j,function(M,Z){this._t=T(M,j),this._k=Z,this._l=void 0},function(){for(var M=this,Z=M._k,b=M._l;b&&b.r;)b=b.p;return M._t&&(M._l=b=b?b.n:M._t._f)?f(0,"keys"==Z?b.k:"values"==Z?b.v:[b.k,b.v]):(M._t=void 0,f(1))},L?"entries":"values",!L,!0),h(j)}}},9882:(i,l,t)=>{"use strict";var e=t(6065),n=t(2988).getWeak,s=t(4228),o=t(3305),r=t(6440),c=t(8790),v=t(6179),f=t(7917),h=t(2888),y=v(5),x=v(6),T=0,P=function(j){return j._l||(j._l=new N)},N=function(){this.a=[]},R=function(j,L){return y(j.a,function(M){return M[0]===L})};N.prototype={get:function(j){var L=R(this,j);if(L)return L[1]},has:function(j){return!!R(this,j)},set:function(j,L){var M=R(this,j);M?M[1]=L:this.a.push([j,L])},delete:function(j){var L=x(this.a,function(M){return M[0]===j});return~L&&this.a.splice(L,1),!!~L}},i.exports={getConstructor:function(j,L,M,Z){var b=j(function(k,B){r(k,b,L,"_i"),k._t=L,k._i=T++,k._l=void 0,null!=B&&c(B,M,k[Z],k)});return e(b.prototype,{delete:function(k){if(!o(k))return!1;var B=n(k);return!0===B?P(h(this,L)).delete(k):B&&f(B,this._i)&&delete B[this._i]},has:function(B){if(!o(B))return!1;var Q=n(B);return!0===Q?P(h(this,L)).has(B):Q&&f(Q,this._i)}}),b},def:function(j,L,M){var Z=n(s(L),!0);return!0===Z?P(j).set(L,M):Z[j._i]=M,j},ufstore:P}},8933:(i,l,t)=>{"use strict";var e=t(7526),n=t(2127),s=t(8859),o=t(6065),r=t(2988),c=t(8790),v=t(6440),f=t(3305),h=t(9448),y=t(8931),x=t(3844),T=t(8880);i.exports=function(P,N,R,j,L,M){var Z=e[P],b=Z,k=L?"set":"add",B=b&&b.prototype,Q={},gt=function(lt){var Pt=B[lt];s(B,lt,"delete"==lt?function(dt){return!(M&&!f(dt))&&Pt.call(this,0===dt?0:dt)}:"has"==lt?function(Et){return!(M&&!f(Et))&&Pt.call(this,0===Et?0:Et)}:"get"==lt?function(Et){return M&&!f(Et)?void 0:Pt.call(this,0===Et?0:Et)}:"add"==lt?function(Et){return Pt.call(this,0===Et?0:Et),this}:function(Et,Zt){return Pt.call(this,0===Et?0:Et,Zt),this})};if("function"==typeof b&&(M||B.forEach&&!h(function(){(new b).entries().next()}))){var bt=new b,It=bt[k](M?{}:-0,1)!=bt,Nt=h(function(){bt.has(1)}),xt=y(function(lt){new b(lt)}),At=!M&&h(function(){for(var lt=new b,Pt=5;Pt--;)lt[k](Pt,Pt);return!lt.has(-0)});xt||((b=N(function(lt,Pt){v(lt,b,P);var dt=T(new Z,lt,b);return null!=Pt&&c(Pt,L,dt[k],dt),dt})).prototype=B,B.constructor=b),(Nt||At)&&(gt("delete"),gt("has"),L&>("get")),(At||It)&>(k),M&&B.clear&&delete B.clear}else b=j.getConstructor(N,P,L,k),o(b.prototype,R),r.NEED=!0;return x(b,P),Q[P]=b,n(n.G+n.W+n.F*(b!=Z),Q),M||j.setStrong(b,P,L),b}},6094:i=>{var l=i.exports={version:"2.5.7"};"number"==typeof __e&&(__e=l)},7227:(i,l,t)=>{"use strict";var e=t(7967),n=t(1996);i.exports=function(s,o,r){o in s?e.f(s,o,n(0,r)):s[o]=r}},5052:(i,l,t)=>{var e=t(3387);i.exports=function(n,s,o){if(e(n),void 0===s)return n;switch(o){case 1:return function(r){return n.call(s,r)};case 2:return function(r,c){return n.call(s,r,c)};case 3:return function(r,c,v){return n.call(s,r,c,v)}}return function(){return n.apply(s,arguments)}}},3344:i=>{i.exports=function(l){if(null==l)throw TypeError("Can't call method on "+l);return l}},1763:(i,l,t)=>{i.exports=!t(9448)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},6034:(i,l,t)=>{var e=t(3305),n=t(7526).document,s=e(n)&&e(n.createElement);i.exports=function(o){return s?n.createElement(o):{}}},6140:i=>{i.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},2127:(i,l,t)=>{var e=t(7526),n=t(6094),s=t(3341),o=t(8859),r=t(5052),c="prototype",v=function(f,h,y){var Z,b,k,B,x=f&v.F,T=f&v.G,N=f&v.P,R=f&v.B,j=T?e:f&v.S?e[h]||(e[h]={}):(e[h]||{})[c],L=T?n:n[h]||(n[h]={}),M=L[c]||(L[c]={});for(Z in T&&(y=h),y)k=((b=!x&&j&&void 0!==j[Z])?j:y)[Z],B=R&&b?r(k,e):N&&"function"==typeof k?r(Function.call,k):k,j&&o(j,Z,k,f&v.U),L[Z]!=k&&s(L,Z,B),N&&M[Z]!=k&&(M[Z]=k)};e.core=n,v.F=1,v.G=2,v.S=4,v.P=8,v.B=16,v.W=32,v.U=64,v.R=128,i.exports=v},9448:i=>{i.exports=function(l){try{return!!l()}catch{return!0}}},2322:(i,l,t)=>{"use strict";var e=t(7981),n=t(3305),s=t(1485),o=t(5052),r=t(7574)("isConcatSpreadable");i.exports=function c(v,f,h,y,x,T,P,N){for(var M,Z,R=x,j=0,L=!!P&&o(P,N,3);j<y;){if(j in h){if(M=L?L(h[j],j,f):h[j],Z=!1,n(M)&&(Z=void 0!==(Z=M[r])?!!Z:e(M)),Z&&T>0)R=c(v,f,M,s(M.length),R,T-1)-1;else{if(R>=9007199254740991)throw TypeError();v[R]=M}R++}j++}return R}},8790:(i,l,t)=>{var e=t(5052),n=t(7368),s=t(1508),o=t(4228),r=t(1485),c=t(762),v={},f={},h=i.exports=function(y,x,T,P,N){var M,Z,b,k,R=N?function(){return y}:c(y),j=e(T,P,x?2:1),L=0;if("function"!=typeof R)throw TypeError(y+" is not iterable!");if(s(R)){for(M=r(y.length);M>L;L++)if((k=x?j(o(Z=y[L])[0],Z[1]):j(y[L]))===v||k===f)return k}else for(b=R.call(y);!(Z=b.next()).done;)if((k=n(b,j,Z.value,x))===v||k===f)return k};h.BREAK=v,h.RETURN=f},7526:i=>{var l=i.exports=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=l)},7917:i=>{var l={}.hasOwnProperty;i.exports=function(t,e){return l.call(t,e)}},3341:(i,l,t)=>{var e=t(7967),n=t(1996);i.exports=t(1763)?function(s,o,r){return e.f(s,o,n(1,r))}:function(s,o,r){return s[o]=r,s}},1308:(i,l,t)=>{var e=t(7526).document;i.exports=e&&e.documentElement},2956:(i,l,t)=>{i.exports=!t(1763)&&!t(9448)(function(){return 7!=Object.defineProperty(t(6034)("div"),"a",{get:function(){return 7}}).a})},8880:(i,l,t)=>{var e=t(3305),n=t(5170).set;i.exports=function(s,o,r){var v,c=o.constructor;return c!==r&&"function"==typeof c&&(v=c.prototype)!==r.prototype&&e(v)&&n&&n(s,v),s}},4877:i=>{i.exports=function(l,t,e){var n=void 0===e;switch(t.length){case 0:return n?l():l.call(e);case 1:return n?l(t[0]):l.call(e,t[0]);case 2:return n?l(t[0],t[1]):l.call(e,t[0],t[1]);case 3:return n?l(t[0],t[1],t[2]):l.call(e,t[0],t[1],t[2]);case 4:return n?l(t[0],t[1],t[2],t[3]):l.call(e,t[0],t[1],t[2],t[3])}return l.apply(e,t)}},1249:(i,l,t)=>{var e=t(5089);i.exports=Object("z").propertyIsEnumerable(0)?Object:function(n){return"String"==e(n)?n.split(""):Object(n)}},1508:(i,l,t)=>{var e=t(906),n=t(7574)("iterator"),s=Array.prototype;i.exports=function(o){return void 0!==o&&(e.Array===o||s[n]===o)}},7981:(i,l,t)=>{var e=t(5089);i.exports=Array.isArray||function(s){return"Array"==e(s)}},3305:i=>{i.exports=function(l){return"object"==typeof l?null!==l:"function"==typeof l}},7368:(i,l,t)=>{var e=t(4228);i.exports=function(n,s,o,r){try{return r?s(e(o)[0],o[1]):s(o)}catch(v){var c=n.return;throw void 0!==c&&e(c.call(n)),v}}},6032:(i,l,t)=>{"use strict";var e=t(4719),n=t(1996),s=t(3844),o={};t(3341)(o,t(7574)("iterator"),function(){return this}),i.exports=function(r,c,v){r.prototype=e(o,{next:n(1,v)}),s(r,c+" Iterator")}},8175:(i,l,t)=>{"use strict";var e=t(2750),n=t(2127),s=t(8859),o=t(3341),r=t(906),c=t(6032),v=t(3844),f=t(627),h=t(7574)("iterator"),y=!([].keys&&"next"in[].keys()),T="keys",P="values",N=function(){return this};i.exports=function(R,j,L,M,Z,b,k){c(L,j,M);var Pt,dt,Et,B=function(Zt){if(!y&&Zt in It)return It[Zt];switch(Zt){case T:case P:return function(){return new L(this,Zt)}}return function(){return new L(this,Zt)}},Q=j+" Iterator",gt=Z==P,bt=!1,It=R.prototype,Nt=It[h]||It["@@iterator"]||Z&&It[Z],xt=Nt||B(Z),At=Z?gt?B("entries"):xt:void 0,lt="Array"==j&&It.entries||Nt;if(lt&&(Et=f(lt.call(new R)))!==Object.prototype&&Et.next&&(v(Et,Q,!0),!e&&"function"!=typeof Et[h]&&o(Et,h,N)),gt&&Nt&&Nt.name!==P&&(bt=!0,xt=function(){return Nt.call(this)}),(!e||k)&&(y||bt||!It[h])&&o(It,h,xt),r[j]=xt,r[Q]=N,Z)if(Pt={values:gt?xt:B(P),keys:b?xt:B(T),entries:At},k)for(dt in Pt)dt in It||s(It,dt,Pt[dt]);else n(n.P+n.F*(y||bt),j,Pt);return Pt}},8931:(i,l,t)=>{var e=t(7574)("iterator"),n=!1;try{var s=[7][e]();s.return=function(){n=!0},Array.from(s,function(){throw 2})}catch{}i.exports=function(o,r){if(!r&&!n)return!1;var c=!1;try{var v=[7],f=v[e]();f.next=function(){return{done:c=!0}},v[e]=function(){return f},o(v)}catch{}return c}},4970:i=>{i.exports=function(l,t){return{value:t,done:!!l}}},906:i=>{i.exports={}},2750:i=>{i.exports=!1},2988:(i,l,t)=>{var e=t(4415)("meta"),n=t(3305),s=t(7917),o=t(7967).f,r=0,c=Object.isExtensible||function(){return!0},v=!t(9448)(function(){return c(Object.preventExtensions({}))}),f=function(P){o(P,e,{value:{i:"O"+ ++r,w:{}}})},T=i.exports={KEY:e,NEED:!1,fastKey:function(P,N){if(!n(P))return"symbol"==typeof P?P:("string"==typeof P?"S":"P")+P;if(!s(P,e)){if(!c(P))return"F";if(!N)return"E";f(P)}return P[e].i},getWeak:function(P,N){if(!s(P,e)){if(!c(P))return!0;if(!N)return!1;f(P)}return P[e].w},onFreeze:function(P){return v&&T.NEED&&c(P)&&!s(P,e)&&f(P),P}}},7380:(i,l,t)=>{var e=t(3386),n=t(2127),s=t(4556)("metadata"),o=s.store||(s.store=new(t(9397))),r=function(T,P,N){var R=o.get(T);if(!R){if(!N)return;o.set(T,R=new e)}var j=R.get(P);if(!j){if(!N)return;R.set(P,j=new e)}return j};i.exports={store:o,map:r,has:function(T,P,N){var R=r(P,N,!1);return void 0!==R&&R.has(T)},get:function(T,P,N){var R=r(P,N,!1);return void 0===R?void 0:R.get(T)},set:function(T,P,N,R){r(N,R,!0).set(T,P)},keys:function(T,P){var N=r(T,P,!1),R=[];return N&&N.forEach(function(j,L){R.push(L)}),R},key:function(T){return void 0===T||"symbol"==typeof T?T:String(T)},exp:function(T){n(n.S,"Reflect",T)}}},8206:(i,l,t)=>{"use strict";var e=t(1311),n=t(1060),s=t(8449),o=t(8270),r=t(1249),c=Object.assign;i.exports=!c||t(9448)(function(){var v={},f={},h=Symbol(),y="abcdefghijklmnopqrst";return v[h]=7,y.split("").forEach(function(x){f[x]=x}),7!=c({},v)[h]||Object.keys(c({},f)).join("")!=y})?function(f,h){for(var y=o(f),x=arguments.length,T=1,P=n.f,N=s.f;x>T;)for(var Z,R=r(arguments[T++]),j=P?e(R).concat(P(R)):e(R),L=j.length,M=0;L>M;)N.call(R,Z=j[M++])&&(y[Z]=R[Z]);return y}:c},4719:(i,l,t)=>{var e=t(4228),n=t(1626),s=t(6140),o=t(766)("IE_PROTO"),r=function(){},c="prototype",v=function(){var T,f=t(6034)("iframe"),h=s.length;for(f.style.display="none",t(1308).appendChild(f),f.src="javascript:",(T=f.contentWindow.document).open(),T.write("<script>document.F=Object<\/script>"),T.close(),v=T.F;h--;)delete v[c][s[h]];return v()};i.exports=Object.create||function(h,y){var x;return null!==h?(r[c]=e(h),x=new r,r[c]=null,x[o]=h):x=v(),void 0===y?x:n(x,y)}},7967:(i,l,t)=>{var e=t(4228),n=t(2956),s=t(3048),o=Object.defineProperty;l.f=t(1763)?Object.defineProperty:function(c,v,f){if(e(c),v=s(v,!0),e(f),n)try{return o(c,v,f)}catch{}if("get"in f||"set"in f)throw TypeError("Accessors not supported!");return"value"in f&&(c[v]=f.value),c}},1626:(i,l,t)=>{var e=t(7967),n=t(4228),s=t(1311);i.exports=t(1763)?Object.defineProperties:function(r,c){n(r);for(var y,v=s(c),f=v.length,h=0;f>h;)e.f(r,y=v[h++],c[y]);return r}},1913:(i,l,t)=>{"use strict";i.exports=t(2750)||!t(9448)(function(){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete t(7526)[e]})},8641:(i,l,t)=>{var e=t(8449),n=t(1996),s=t(7221),o=t(3048),r=t(7917),c=t(2956),v=Object.getOwnPropertyDescriptor;l.f=t(1763)?v:function(h,y){if(h=s(h),y=o(y,!0),c)try{return v(h,y)}catch{}if(r(h,y))return n(!e.f.call(h,y),h[y])}},9415:(i,l,t)=>{var e=t(4561),n=t(6140).concat("length","prototype");l.f=Object.getOwnPropertyNames||function(o){return e(o,n)}},1060:(i,l)=>{l.f=Object.getOwnPropertySymbols},627:(i,l,t)=>{var e=t(7917),n=t(8270),s=t(766)("IE_PROTO"),o=Object.prototype;i.exports=Object.getPrototypeOf||function(r){return r=n(r),e(r,s)?r[s]:"function"==typeof r.constructor&&r instanceof r.constructor?r.constructor.prototype:r instanceof Object?o:null}},4561:(i,l,t)=>{var e=t(7917),n=t(7221),s=t(1464)(!1),o=t(766)("IE_PROTO");i.exports=function(r,c){var y,v=n(r),f=0,h=[];for(y in v)y!=o&&e(v,y)&&h.push(y);for(;c.length>f;)e(v,y=c[f++])&&(~s(h,y)||h.push(y));return h}},1311:(i,l,t)=>{var e=t(4561),n=t(6140);i.exports=Object.keys||function(o){return e(o,n)}},8449:(i,l)=>{l.f={}.propertyIsEnumerable},3854:(i,l,t)=>{var e=t(1311),n=t(7221),s=t(8449).f;i.exports=function(o){return function(r){for(var x,c=n(r),v=e(c),f=v.length,h=0,y=[];f>h;)s.call(c,x=v[h++])&&y.push(o?[x,c[x]]:c[x]);return y}}},6222:(i,l,t)=>{var e=t(9415),n=t(1060),s=t(4228),o=t(7526).Reflect;i.exports=o&&o.ownKeys||function(c){var v=e.f(s(c)),f=n.f;return f?v.concat(f(c)):v}},1996:i=>{i.exports=function(l,t){return{enumerable:!(1&l),configurable:!(2&l),writable:!(4&l),value:t}}},6065:(i,l,t)=>{var e=t(8859);i.exports=function(n,s,o){for(var r in s)e(n,r,s[r],o);return n}},8859:(i,l,t)=>{var e=t(7526),n=t(3341),s=t(7917),o=t(4415)("src"),r="toString",c=Function[r],v=(""+c).split(r);t(6094).inspectSource=function(f){return c.call(f)},(i.exports=function(f,h,y,x){var T="function"==typeof y;T&&(s(y,"name")||n(y,"name",h)),f[h]!==y&&(T&&(s(y,o)||n(y,o,f[h]?""+f[h]:v.join(String(h)))),f===e?f[h]=y:x?f[h]?f[h]=y:n(f,h,y):(delete f[h],n(f,h,y)))})(Function.prototype,r,function(){return"function"==typeof this&&this[o]||c.call(this)})},5170:(i,l,t)=>{var e=t(3305),n=t(4228),s=function(o,r){if(n(o),!e(r)&&null!==r)throw TypeError(r+": can't set as prototype!")};i.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(o,r,c){try{(c=t(5052)(Function.call,t(8641).f(Object.prototype,"__proto__").set,2))(o,[]),r=!(o instanceof Array)}catch{r=!0}return function(f,h){return s(f,h),r?f.__proto__=h:c(f,h),f}}({},!1):void 0),check:s}},5762:(i,l,t)=>{"use strict";var e=t(7526),n=t(7967),s=t(1763),o=t(7574)("species");i.exports=function(r){var c=e[r];s&&c&&!c[o]&&n.f(c,o,{configurable:!0,get:function(){return this}})}},3844:(i,l,t)=>{var e=t(7967).f,n=t(7917),s=t(7574)("toStringTag");i.exports=function(o,r,c){o&&!n(o=c?o:o.prototype,s)&&e(o,s,{configurable:!0,value:r})}},766:(i,l,t)=>{var e=t(4556)("keys"),n=t(4415);i.exports=function(s){return e[s]||(e[s]=n(s))}},4556:(i,l,t)=>{var e=t(6094),n=t(7526),s="__core-js_shared__",o=n[s]||(n[s]={});(i.exports=function(r,c){return o[r]||(o[r]=void 0!==c?c:{})})("versions",[]).push({version:e.version,mode:t(2750)?"pure":"global",copyright:"\xa9 2018 Denis Pushkarev (zloirock.ru)"})},157:(i,l,t)=>{var e=t(7087),n=Math.max,s=Math.min;i.exports=function(o,r){return(o=e(o))<0?n(o+r,0):s(o,r)}},7087:i=>{var l=Math.ceil,t=Math.floor;i.exports=function(e){return isNaN(e=+e)?0:(e>0?t:l)(e)}},7221:(i,l,t)=>{var e=t(1249),n=t(3344);i.exports=function(s){return e(n(s))}},1485:(i,l,t)=>{var e=t(7087),n=Math.min;i.exports=function(s){return s>0?n(e(s),9007199254740991):0}},8270:(i,l,t)=>{var e=t(3344);i.exports=function(n){return Object(e(n))}},3048:(i,l,t)=>{var e=t(3305);i.exports=function(n,s){if(!e(n))return n;var o,r;if(s&&"function"==typeof(o=n.toString)&&!e(r=o.call(n))||"function"==typeof(o=n.valueOf)&&!e(r=o.call(n))||!s&&"function"==typeof(o=n.toString)&&!e(r=o.call(n)))return r;throw TypeError("Can't convert object to primitive value")}},4415:i=>{var l=0,t=Math.random();i.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++l+t).toString(36))}},2888:(i,l,t)=>{var e=t(3305);i.exports=function(n,s){if(!e(n)||n._t!==s)throw TypeError("Incompatible receiver, "+s+" required!");return n}},7574:(i,l,t)=>{var e=t(4556)("wks"),n=t(4415),s=t(7526).Symbol,o="function"==typeof s;(i.exports=function(c){return e[c]||(e[c]=o&&s[c]||(o?s:n)("Symbol."+c))}).store=e},762:(i,l,t)=>{var e=t(4848),n=t(7574)("iterator"),s=t(906);i.exports=t(6094).getIteratorMethod=function(o){if(null!=o)return o[n]||o["@@iterator"]||s[e(o)]}},3386:(i,l,t)=>{"use strict";var e=t(6197),n=t(2888),s="Map";i.exports=t(8933)(s,function(o){return function(){return o(this,arguments.length>0?arguments[0]:void 0)}},{get:function(r){var c=e.getEntry(n(this,s),r);return c&&c.v},set:function(r,c){return e.def(n(this,s),0===r?0:r,c)}},e,!0)},7103:(i,l,t)=>{var e=t(2127),n=t(3387),s=t(4228),o=(t(7526).Reflect||{}).apply,r=Function.apply;e(e.S+e.F*!t(9448)(function(){o(function(){})}),"Reflect",{apply:function(v,f,h){var y=n(v),x=s(h);return o?o(y,f,x):r.call(y,f,x)}})},2586:(i,l,t)=>{var e=t(2127),n=t(4719),s=t(3387),o=t(4228),r=t(3305),c=t(9448),v=t(5538),f=(t(7526).Reflect||{}).construct,h=c(function(){function x(){}return!(f(function(){},[],x)instanceof x)}),y=!c(function(){f(function(){})});e(e.S+e.F*(h||y),"Reflect",{construct:function(T,P){s(T),o(P);var N=arguments.length<3?T:s(arguments[2]);if(y&&!h)return f(T,P,N);if(T==N){switch(P.length){case 0:return new T;case 1:return new T(P[0]);case 2:return new T(P[0],P[1]);case 3:return new T(P[0],P[1],P[2]);case 4:return new T(P[0],P[1],P[2],P[3])}var R=[null];return R.push.apply(R,P),new(v.apply(T,R))}var j=N.prototype,L=n(r(j)?j:Object.prototype),M=Function.apply.call(T,L,P);return r(M)?M:L}})},2552:(i,l,t)=>{var e=t(7967),n=t(2127),s=t(4228),o=t(3048);n(n.S+n.F*t(9448)(function(){Reflect.defineProperty(e.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(c,v,f){s(c),v=o(v,!0),s(f);try{return e.f(c,v,f),!0}catch{return!1}}})},4376:(i,l,t)=>{var e=t(2127),n=t(8641).f,s=t(4228);e(e.S,"Reflect",{deleteProperty:function(r,c){var v=n(s(r),c);return!(v&&!v.configurable)&&delete r[c]}})},5153:(i,l,t)=>{"use strict";var e=t(2127),n=t(4228),s=function(o){this._t=n(o),this._i=0;var c,r=this._k=[];for(c in o)r.push(c)};t(6032)(s,"Object",function(){var c,o=this,r=o._k;do{if(o._i>=r.length)return{value:void 0,done:!0}}while(!((c=r[o._i++])in o._t));return{value:c,done:!1}}),e(e.S,"Reflect",{enumerate:function(r){return new s(r)}})},2650:(i,l,t)=>{var e=t(8641),n=t(2127),s=t(4228);n(n.S,"Reflect",{getOwnPropertyDescriptor:function(r,c){return e.f(s(r),c)}})},1104:(i,l,t)=>{var e=t(2127),n=t(627),s=t(4228);e(e.S,"Reflect",{getPrototypeOf:function(r){return n(s(r))}})},1879:(i,l,t)=>{var e=t(8641),n=t(627),s=t(7917),o=t(2127),r=t(3305),c=t(4228);o(o.S,"Reflect",{get:function v(f,h){var x,T,y=arguments.length<3?f:arguments[2];return c(f)===y?f[h]:(x=e.f(f,h))?s(x,"value")?x.value:void 0!==x.get?x.get.call(y):void 0:r(T=n(f))?v(T,h,y):void 0}})},1883:(i,l,t)=>{var e=t(2127);e(e.S,"Reflect",{has:function(s,o){return o in s}})},5433:(i,l,t)=>{var e=t(2127),n=t(4228),s=Object.isExtensible;e(e.S,"Reflect",{isExtensible:function(r){return n(r),!s||s(r)}})},5e3:(i,l,t)=>{var e=t(2127);e(e.S,"Reflect",{ownKeys:t(6222)})},5932:(i,l,t)=>{var e=t(2127),n=t(4228),s=Object.preventExtensions;e(e.S,"Reflect",{preventExtensions:function(r){n(r);try{return s&&s(r),!0}catch{return!1}}})},6316:(i,l,t)=>{var e=t(2127),n=t(5170);n&&e(e.S,"Reflect",{setPrototypeOf:function(o,r){n.check(o,r);try{return n.set(o,r),!0}catch{return!1}}})},5443:(i,l,t)=>{var e=t(7967),n=t(8641),s=t(627),o=t(7917),r=t(2127),c=t(1996),v=t(4228),f=t(3305);r(r.S,"Reflect",{set:function h(y,x,T){var R,j,P=arguments.length<4?y:arguments[3],N=n.f(v(y),x);if(!N){if(f(j=s(y)))return h(j,x,T,P);N=c(0)}if(o(N,"value")){if(!1===N.writable||!f(P))return!1;if(R=n.f(P,x)){if(R.get||R.set||!1===R.writable)return!1;R.value=T,e.f(P,x,R)}else e.f(P,x,c(0,T));return!0}return void 0!==N.set&&(N.set.call(P,T),!0)}})},1632:(i,l,t)=>{"use strict";var e=t(6197),n=t(2888);i.exports=t(8933)("Set",function(o){return function(){return o(this,arguments.length>0?arguments[0]:void 0)}},{add:function(r){return e.def(n(this,"Set"),r=0===r?0:r,r)}},e)},9397:(i,l,t)=>{"use strict";var N,e=t(6179)(0),n=t(8859),s=t(2988),o=t(8206),r=t(9882),c=t(3305),v=t(9448),f=t(2888),h="WeakMap",y=s.getWeak,x=Object.isExtensible,T=r.ufstore,P={},R=function(M){return function(){return M(this,arguments.length>0?arguments[0]:void 0)}},j={get:function(Z){if(c(Z)){var b=y(Z);return!0===b?T(f(this,h)).get(Z):b?b[this._i]:void 0}},set:function(Z,b){return r.def(f(this,h),Z,b)}},L=i.exports=t(8933)(h,R,j,r,!0,!0);v(function(){return 7!=(new L).set((Object.freeze||Object)(P),7).get(P)})&&(o((N=r.getConstructor(R,h)).prototype,j),s.NEED=!0,e(["delete","has","get","set"],function(M){var Z=L.prototype,b=Z[M];n(Z,M,function(k,B){if(c(k)&&!x(k)){this._f||(this._f=new N);var Q=this._f[M](k,B);return"set"==M?this:Q}return b.call(this,k,B)})}))},9766:(i,l,t)=>{"use strict";var e=t(2127),n=t(2322),s=t(8270),o=t(1485),r=t(3387),c=t(5572);e(e.P,"Array",{flatMap:function(f){var y,x,h=s(this);return r(f),y=o(h.length),x=c(h,0),n(x,h,h,y,0,1,f,arguments[1]),x}}),t(8184)("flatMap")},1390:(i,l,t)=>{"use strict";var e=t(2127),n=t(2322),s=t(8270),o=t(1485),r=t(7087),c=t(5572);e(e.P,"Array",{flatten:function(){var f=arguments[0],h=s(this),y=o(h.length),x=c(h,0);return n(x,h,h,y,0,void 0===f?1:r(f)),x}}),t(8184)("flatten")},9087:(i,l,t)=>{"use strict";var e=t(2127),n=t(1464)(!0);e(e.P,"Array",{includes:function(o){return n(this,o,arguments.length>1?arguments[1]:void 0)}}),t(8184)("includes")},7531:(i,l,t)=>{"use strict";var e=t(2127),n=t(8270),s=t(3387),o=t(7967);t(1763)&&e(e.P+t(1913),"Object",{__defineGetter__:function(c,v){o.f(n(this),c,{get:s(v),enumerable:!0,configurable:!0})}})},5039:(i,l,t)=>{"use strict";var e=t(2127),n=t(8270),s=t(3387),o=t(7967);t(1763)&&e(e.P+t(1913),"Object",{__defineSetter__:function(c,v){o.f(n(this),c,{set:s(v),enumerable:!0,configurable:!0})}})},7146:(i,l,t)=>{var e=t(2127),n=t(3854)(!0);e(e.S,"Object",{entries:function(o){return n(o)}})},4614:(i,l,t)=>{var e=t(2127),n=t(6222),s=t(7221),o=t(8641),r=t(7227);e(e.S,"Object",{getOwnPropertyDescriptors:function(v){for(var P,N,f=s(v),h=o.f,y=n(f),x={},T=0;y.length>T;)void 0!==(N=h(f,P=y[T++]))&&r(x,P,N);return x}})},4300:(i,l,t)=>{"use strict";var e=t(2127),n=t(8270),s=t(3048),o=t(627),r=t(8641).f;t(1763)&&e(e.P+t(1913),"Object",{__lookupGetter__:function(v){var y,f=n(this),h=s(v,!0);do{if(y=r(f,h))return y.get}while(f=o(f))}})},6328:(i,l,t)=>{"use strict";var e=t(2127),n=t(8270),s=t(3048),o=t(627),r=t(8641).f;t(1763)&&e(e.P+t(1913),"Object",{__lookupSetter__:function(v){var y,f=n(this),h=s(v,!0);do{if(y=r(f,h))return y.set}while(f=o(f))}})},7594:(i,l,t)=>{var e=t(2127),n=t(3854)(!1);e(e.S,"Object",{values:function(o){return n(o)}})},7491:(i,l,t)=>{var e=t(7380),n=t(4228),s=e.key,o=e.set;e.exp({defineMetadata:function(c,v,f,h){o(c,v,n(f),s(h))}})},4907:(i,l,t)=>{var e=t(7380),n=t(4228),s=e.key,o=e.map,r=e.store;e.exp({deleteMetadata:function(v,f){var h=arguments.length<3?void 0:s(arguments[2]),y=o(n(f),h,!1);if(void 0===y||!y.delete(v))return!1;if(y.size)return!0;var x=r.get(f);return x.delete(h),!!x.size||r.delete(f)}})},9269:(i,l,t)=>{var e=t(1632),n=t(956),s=t(7380),o=t(4228),r=t(627),c=s.keys,v=s.key,f=function(h,y){var x=c(h,y),T=r(h);if(null===T)return x;var P=f(T,y);return P.length?x.length?n(new e(x.concat(P))):P:x};s.exp({getMetadataKeys:function(y){return f(o(y),arguments.length<2?void 0:v(arguments[1]))}})},9100:(i,l,t)=>{var e=t(7380),n=t(4228),s=t(627),o=e.has,r=e.get,c=e.key,v=function(f,h,y){if(o(f,h,y))return r(f,h,y);var T=s(h);return null!==T?v(f,T,y):void 0};e.exp({getMetadata:function(h,y){return v(h,n(y),arguments.length<3?void 0:c(arguments[2]))}})},9732:(i,l,t)=>{var e=t(7380),n=t(4228),s=e.keys,o=e.key;e.exp({getOwnMetadataKeys:function(c){return s(n(c),arguments.length<2?void 0:o(arguments[1]))}})},1319:(i,l,t)=>{var e=t(7380),n=t(4228),s=e.get,o=e.key;e.exp({getOwnMetadata:function(c,v){return s(c,n(v),arguments.length<3?void 0:o(arguments[2]))}})},1176:(i,l,t)=>{var e=t(7380),n=t(4228),s=t(627),o=e.has,r=e.key,c=function(v,f,h){if(o(v,f,h))return!0;var x=s(f);return null!==x&&c(v,x,h)};e.exp({hasMetadata:function(f,h){return c(f,n(h),arguments.length<3?void 0:r(arguments[2]))}})},3107:(i,l,t)=>{var e=t(7380),n=t(4228),s=e.has,o=e.key;e.exp({hasOwnMetadata:function(c,v){return s(c,n(v),arguments.length<3?void 0:o(arguments[2]))}})},1691:(i,l,t)=>{var e=t(7380),n=t(4228),s=t(3387),o=e.key,r=e.set;e.exp({metadata:function(v,f){return function(y,x){r(v,f,(void 0!==x?n:s)(y),o(x))}}})}},i=>{i(i.s=8829)}]); No newline at end of file | |||
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check for web client build configuration files
echo "=== Checking for web client build configuration ==="
fd -t f 'package\.json|angular\.json|webpack\.config' Ginger/GingerCoreNET/Reports/Ginger-Web-Client
# Check the .csproj to see how this file is referenced
echo -e "\n=== Checking how polyfills are referenced in .csproj ==="
rg -A 3 -B 3 'polyfills.*\.js' Ginger/GingerCoreNET/GingerCoreNET.csproj
# Check if there are other similar bundled files
echo -e "\n=== Checking for other bundled files in the same directory ==="
fd -t f '\.js$' Ginger/GingerCoreNET/Reports/Ginger-Web-Client | head -20
# Check if the old polyfills file was removed in this PR
echo -e "\n=== Checking git history for polyfills files ==="
git log --oneline --all --full-history -- '**/polyfills*.js' | head -10Repository: Ginger-Automation/Ginger
Length of output: 2214
Remove the old polyfills file and document the source of this dependency.
This file is a pre-built web client asset intentionally included in source control (as confirmed by the .csproj setup with CopyToOutputDirectory=Always). However, two issues need addressing:
-
Old file still referenced: The
.csprojshows the old polyfills file (polyfills.ab6619d5cdfdf12c.js) should be removed. Ensure it's deleted from both the directory and the.csprojfile. -
Source documentation: Add a comment or documentation file (e.g.,
README.mdinGinger/GingerCoreNET/Reports/Ginger-Web-Client/) indicating the source and version of these pre-built web assets, so future maintainers understand where these files originate and how to update them.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Ginger/GingerCoreNET/Reports/Ginger-Web-Client/polyfills.af067c955617ac11.js`
at line 1, Remove the stale pre-built polyfills file reference by deleting
polyfills.ab6619d5cdfdf12c.js from the repository and removing its
Include/ItemGroup entry that uses CopyToOutputDirectory=Always from the project
file (the .csproj entry that references the old polyfills). Then add a short
README.md to the Ginger-Web-Client folder documenting the source/version/hash of
the shipped pre-built asset (e.g., that polyfills.af067c955617ac11.js is a
pre-built bundle, its upstream build/source and version, and instructions on how
to rebuild/update it), and commit the deletion and the documentation together so
future maintainers can find and update the polyfills asset.
Not up to standards ⛔🔴 Issues
|
| Category | Results |
|---|---|
| BestPractice | 8 medium 1 high |
| ErrorProne | 2 medium 8 high |
| Security | 2 high |
| CodeStyle | 13 minor |
| Complexity | 2 medium |
🟢 Metrics 1230 complexity
Metric Results Complexity 1230
TIP This summary will be updated as you push new changes. Give us feedback
Description
Type of Change
Checklist
[IsSerializedForLocalRepository]where neededReporter.ToLog()patternSummary by CodeRabbit
Release Notes
New Features
Bug Fixes
Improvements
Chores