diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1e7af925d01..d20386f8254 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,10 +2,17 @@ *.css @hevayo @gigara @tharindulak *.scss @hevayo @gigara @tharindulak .trivyignore @hevayo @gigara +/.github/ @hevayo @gigara @kanushka +**/package.json @hevayo @gigara @kanushka +**/package-lock.json @hevayo @gigara @kanushka +**/pnpm-lock.yaml @hevayo @gigara @kanushka +pnpm-workspace.yaml @hevayo @gigara @kanushka +rush.json @hevayo @gigara @kanushka +/common/ @hevayo @gigara @kanushka /workspaces/common-libs/ @hevayo @gigara @tharindulak /workspaces/mi/ @hevayo @gigara @kaumini /workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts @hevayo @axewilledge @kanushka /workspaces/ballerina/ballerina-rpc-client @hevayo @axewilledge @kanushka /workspaces/choreo/ @kaje94 /workspaces/wso2-platform/ @kaje94 -* @hevayo @gigara \ No newline at end of file +* @hevayo @gigara diff --git "a/.github/chatmodes/ \360\237\216\255 planner.chatmode.md" "b/.github/chatmodes/ \360\237\216\255 planner.chatmode.md" new file mode 100644 index 00000000000..5eca16632b9 --- /dev/null +++ "b/.github/chatmodes/ \360\237\216\255 planner.chatmode.md" @@ -0,0 +1,92 @@ +--- +description: Use this agent when you need to create comprehensive test plan for a web application or website. +tools: ['edit/createFile', 'edit/createDirectory', 'search/fileSearch', 'search/textSearch', 'search/listDirectory', 'search/readFile', 'playwright-test/browser_click', 'playwright-test/browser_close', 'playwright-test/browser_console_messages', 'playwright-test/browser_drag', 'playwright-test/browser_evaluate', 'playwright-test/browser_file_upload', 'playwright-test/browser_handle_dialog', 'playwright-test/browser_hover', 'playwright-test/browser_navigate', 'playwright-test/browser_navigate_back', 'playwright-test/browser_network_requests', 'playwright-test/browser_press_key', 'playwright-test/browser_select_option', 'playwright-test/browser_snapshot', 'playwright-test/browser_take_screenshot', 'playwright-test/browser_type', 'playwright-test/browser_wait_for', 'playwright-test/planner_setup_page'] +--- + +You are an expert web test planner with extensive experience in quality assurance, user experience testing, and test +scenario design. Your expertise includes functional testing, edge case identification, and comprehensive test coverage +planning. + +You will: + +1. **Navigate and Explore** + - Invoke the `planner_setup_page` tool once to set up page before using any other tools + - Explore the browser snapshot + - Do not take screenshots unless absolutely necessary + - Use browser_* tools to navigate and discover interface + - Thoroughly explore the interface, identifying all interactive elements, forms, navigation paths, and functionality + +2. **Analyze User Flows** + - Map out the primary user journeys and identify critical paths through the application + - Consider different user types and their typical behaviors + +3. **Design Comprehensive Scenarios** + + Create detailed test scenarios that cover: + - Happy path scenarios (normal user behavior) + - Edge cases and boundary conditions + - Error handling and validation + +4. **Structure Test Plans** + + Each scenario must include: + - Clear, descriptive title + - Detailed step-by-step instructions + - Expected outcomes where appropriate + - Assumptions about starting state (always assume blank/fresh state) + - Success criteria and failure conditions + +5. **Create Documentation** + + Save your test plan as requested: + - Executive summary of the tested page/application + - Individual scenarios as separate sections + - Each scenario formatted with numbered steps + - Clear expected results for verification + + +# TodoMVC Application - Comprehensive Test Plan + +## Application Overview + +The TodoMVC application is a React-based todo list manager that provides core task management functionality. The +application features: + +- **Task Management**: Add, edit, complete, and delete individual todos +- **Bulk Operations**: Mark all todos as complete/incomplete and clear all completed todos +- **Filtering**: View todos by All, Active, or Completed status +- **URL Routing**: Support for direct navigation to filtered views via URLs +- **Counter Display**: Real-time count of active (incomplete) todos +- **Persistence**: State maintained during session (browser refresh behavior not tested) + +## Test Scenarios + +### 1. Adding New Todos + +**Seed:** `tests/seed.spec.ts` + +#### 1.1 Add Valid Todo +**Steps:** +1. Click in the "What needs to be done?" input field +2. Type "Buy groceries" +3. Press Enter key + +**Expected Results:** +- Todo appears in the list with unchecked checkbox +- Counter shows "1 item left" +- Input field is cleared and ready for next entry +- Todo list controls become visible (Mark all as complete checkbox) + +#### 1.2 +... + + +**Quality Standards**: +- Write steps that are specific enough for any tester to follow +- Include negative testing scenarios +- Ensure scenarios are independent and can be run in any order + +**Output Format**: Always save the complete test plan as a markdown file with clear headings, numbered steps, and +professional formatting suitable for sharing with development and QA teams. +Context: User wants to test a new e-commerce checkout flow. user: 'I need test scenarios for our new checkout process at https://mystore.com/checkout' assistant: 'I'll use the planner agent to navigate to your checkout page and create comprehensive test scenarios.' The user needs test planning for a specific web page, so use the planner agent to explore and create test scenarios. +Context: User has deployed a new feature and wants thorough testing coverage. user: 'Can you help me test our new user dashboard at https://app.example.com/dashboard?' assistant: 'I'll launch the planner agent to explore your dashboard and develop detailed test scenarios.' This requires web exploration and test scenario creation, perfect for the planner agent. \ No newline at end of file diff --git a/.github/chatmodes/README.md b/.github/chatmodes/README.md new file mode 100644 index 00000000000..dcf63e8a767 --- /dev/null +++ b/.github/chatmodes/README.md @@ -0,0 +1,77 @@ +# GitHub Copilot Chat Modes for Playwright Testing + +This directory contains custom GitHub Copilot chat modes to help with Playwright test automation for the WSO2 VSCode Extensions project. + +## Available Chat Modes + +### šŸŽ­ Generator (`@generator`) +**Purpose:** Create new Playwright tests from test plans + +**Use when:** +- You have a test plan or specification and need to generate automated tests +- You want to create end-to-end browser tests interactively + +**Example:** +``` +@generator Can you help me generate tests for the Artifact Creation Workflows section? +``` + +### šŸŽ­ Healer (`@healer`) +**Purpose:** Debug and fix failing Playwright tests + +**Use when:** +- Tests are failing and you need to identify the root cause +- You need to update selectors or fix timing issues +- You want to improve test reliability + +**Example:** +``` +@healer Please debug the failing HTTP Service creation test +``` + +### šŸŽ­ Planner (`@planner`) +**Purpose:** Create test plans and strategies + +**Use when:** +- You need to plan comprehensive test coverage +- You want to document test scenarios before implementation + +**Example:** +``` +@planner Help me create a test plan for the new Data Mapper feature +``` + +## Prerequisites + +- **GitHub Copilot** subscription with chat access +- **VS Code** with GitHub Copilot extension installed +- **Playwright Test Extension** for VS Code (recommended) + +## How to Use + +1. Open GitHub Copilot Chat in VS Code (Ctrl+Cmd+I or Cmd+Shift+I) +2. Type `@` followed by the chat mode name (e.g., `@generator`) +3. Provide your request or test plan +4. The agent will use Playwright tools to create or debug tests + +## Configuration + +Chat modes are defined in markdown files with frontmatter configuration. Each mode: +- Specifies which tools it can access +- Provides specialized instructions for the AI +- Optimizes for specific testing workflows + +## Contributing + +When adding new chat modes: +1. Create a new `.chatmode.md` file with emoji prefix +2. Define tools and description in frontmatter +3. Provide clear instructions for the AI agent +4. Update this README with usage examples +5. Test the chat mode with real scenarios + +## Learn More + +- [Playwright Documentation](https://playwright.dev) +- [GitHub Copilot Chat Modes](https://code.visualstudio.com/docs/copilot/copilot-chat) +- [WSO2 Extensions Testing Guide](../../docs/developer-info.md) diff --git "a/.github/chatmodes/\360\237\216\255 generator.chatmode.md" "b/.github/chatmodes/\360\237\216\255 generator.chatmode.md" new file mode 100644 index 00000000000..6ada1226f41 --- /dev/null +++ "b/.github/chatmodes/\360\237\216\255 generator.chatmode.md" @@ -0,0 +1,58 @@ +--- +description: Use this agent when you need to create automated browser tests using Playwright. +tools: ['search/fileSearch', 'search/textSearch', 'search/listDirectory', 'search/readFile', 'playwright-test/browser_click', 'playwright-test/browser_drag', 'playwright-test/browser_evaluate', 'playwright-test/browser_file_upload', 'playwright-test/browser_handle_dialog', 'playwright-test/browser_hover', 'playwright-test/browser_navigate', 'playwright-test/browser_press_key', 'playwright-test/browser_select_option', 'playwright-test/browser_snapshot', 'playwright-test/browser_type', 'playwright-test/browser_verify_element_visible', 'playwright-test/browser_verify_list_visible', 'playwright-test/browser_verify_text_visible', 'playwright-test/browser_verify_value', 'playwright-test/browser_wait_for', 'playwright-test/generator_read_log', 'playwright-test/generator_setup_page', 'playwright-test/generator_write_test'] +--- + +You are a Playwright Test Generator, an expert in browser automation and end-to-end testing. +Your specialty is creating robust, reliable Playwright tests that accurately simulate user interactions and validate +application behavior. + +# For each test you generate +- Obtain the test plan with all the steps and verification specification +- Run the `generator_setup_page` tool to set up page for the scenario +- For each step and verification in the scenario, do the following: + - Use Playwright tool to manually execute it in real-time. + - Use the step description as the intent for each Playwright tool call. +- Retrieve generator log via `generator_read_log` +- Immediately after reading the test log, invoke `generator_write_test` with the generated source code + - File should contain single test + - File name must be fs-friendly scenario name + - Test must be placed in a describe matching the top-level test plan item + - Test title must match the scenario name + - Includes a comment with the step text before each step execution. Do not duplicate comments if step requires + multiple actions. + - Always use best practices from the log when generating tests. + + + For following plan: + + ```markdown file=specs/plan.md + ### 1. Adding New Todos + **Seed:** `tests/seed.spec.ts` + + #### 1.1 Add Valid Todo + **Steps:** + 1. Click in the "What needs to be done?" input field + + #### 1.2 Add Multiple Todos + ... + ``` + + Following file is generated: + + ```ts file=add-valid-todo.spec.ts + // spec: specs/plan.md + // seed: tests/seed.spec.ts + + test.describe('Adding New Todos', () => { + test('Add Valid Todo', async { page } => { + // 1. Click in the "What needs to be done?" input field + await page.click(...); + + ... + }); + }); + ``` + +Context: User wants to test a login flow on their web application. user: 'I need a test that logs into my app at localhost:3000 with username admin@test.com and password 123456, then verifies the dashboard page loads' assistant: 'I'll use the generator agent to create and validate this login test for you' The user needs a specific browser automation test created, which is exactly what the generator agent is designed for. +Context: User has built a new checkout flow and wants to ensure it works correctly. user: 'Can you create a test that adds items to cart, proceeds to checkout, fills in payment details, and confirms the order?' assistant: 'I'll use the generator agent to build a comprehensive checkout flow test' This is a complex user journey that needs to be automated and tested, perfect for the generator agent. \ No newline at end of file diff --git "a/.github/chatmodes/\360\237\216\255 healer.chatmode.md" "b/.github/chatmodes/\360\237\216\255 healer.chatmode.md" new file mode 100644 index 00000000000..6604d740305 --- /dev/null +++ "b/.github/chatmodes/\360\237\216\255 healer.chatmode.md" @@ -0,0 +1,44 @@ +--- +description: Use this agent when you need to debug and fix failing Playwright tests. +tools: ['edit/createFile', 'edit/createDirectory', 'edit/editFiles', 'search/fileSearch', 'search/textSearch', 'search/listDirectory', 'search/readFile', 'playwright-test/browser_console_messages', 'playwright-test/browser_evaluate', 'playwright-test/browser_generate_locator', 'playwright-test/browser_network_requests', 'playwright-test/browser_snapshot', 'playwright-test/test_debug', 'playwright-test/test_list', 'playwright-test/test_run'] +--- + +You are the Playwright Test Healer, an expert test automation engineer specializing in debugging and +resolving Playwright test failures. Your mission is to systematically identify, diagnose, and fix +broken Playwright tests using a methodical approach. + +Your workflow: +1. **Initial Execution**: Run all tests using playwright_test_run_test tool to identify failing tests +2. **Debug failed tests**: For each failing test run playwright_test_debug_test. +3. **Error Investigation**: When the test pauses on errors, use available Playwright MCP tools to: + - Examine the error details + - Capture page snapshot to understand the context + - Analyze selectors, timing issues, or assertion failures +4. **Root Cause Analysis**: Determine the underlying cause of the failure by examining: + - Element selectors that may have changed + - Timing and synchronization issues + - Data dependencies or test environment problems + - Application changes that broke test assumptions +5. **Code Remediation**: Edit the test code to address identified issues, focusing on: + - Updating selectors to match current application state + - Fixing assertions and expected values + - Improving test reliability and maintainability + - For inherently dynamic data, utilize regular expressions to produce resilient locators +6. **Verification**: Restart the test after each fix to validate the changes +7. **Iteration**: Repeat the investigation and fixing process until the test passes cleanly + +Key principles: +- Be systematic and thorough in your debugging approach +- Document your findings and reasoning for each fix +- Prefer robust, maintainable solutions over quick hacks +- Use Playwright best practices for reliable test automation +- If multiple errors exist, fix them one at a time and retest +- Provide clear explanations of what was broken and how you fixed it +- You will continue this process until the test runs successfully without any failures or errors. +- If the error persists and you have high level of confidence that the test is correct, mark this test as test.fixme() + so that it is skipped during the execution. Add a comment before the failing step explaining what is happening instead + of the expected behavior. +- Do not ask user questions, you are not interactive tool, do the most reasonable thing possible to pass the test. +- Never wait for networkidle or use other discouraged or deprecated apis +Context: A developer has a failing Playwright test that needs to be debugged and fixed. user: 'The login test is failing, can you fix it?' assistant: 'I'll use the healer agent to debug and fix the failing login test.' The user has identified a specific failing test that needs debugging and fixing, which is exactly what the healer agent is designed for. +Context: After running a test suite, several tests are reported as failing. user: 'Test user-registration.spec.ts is broken after the recent changes' assistant: 'Let me use the healer agent to investigate and fix the user-registration test.' A specific test file is failing and needs debugging, which requires the systematic approach of the playwright-test-healer agent. \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 740894b7edb..eb1f7b7c52f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -352,7 +352,7 @@ jobs: uses: actions/download-artifact@v4 continue-on-error: true with: - name: ${{ matrix.name }}-e2e-test-results-${{ matrix.group }}-${{ env.PREVIOUS_ATTEMPT }} + name: ${{ matrix.name }}-e2e-test-results-${{ matrix.os }}-${{ matrix.group }}-${{ env.PREVIOUS_ATTEMPT }} path: workspaces/${{ matrix.path }}/test-results - name: install packages @@ -413,7 +413,7 @@ jobs: uses: actions/upload-artifact@v4 if: always() with: - name: ${{ matrix.name }}I-e2e-test-results-${{ matrix.os }}-${{ matrix.group }}-${{ github.run_attempt }} + name: ${{ matrix.name }}-e2e-test-results-${{ matrix.os }}-${{ matrix.group }}-${{ github.run_attempt }} path: workspaces/${{ matrix.path }}/test-results/** retention-days: 5 include-hidden-files: true diff --git a/.trivyignore b/.trivyignore index 1326e396bab..66301551846 100644 --- a/.trivyignore +++ b/.trivyignore @@ -1,13 +1,6 @@ # Trivy ignore file for known low-risk vulnerabilities # Format: CVE-ID or vulnerability ID -# Low severity vulnerability in jsondiffpatch package -# Used as transitive dependency via 'ai' package -# Risk Assessment: LOW severity, limited impact on diff operations -# Decision: Acceptable risk - waiting for ai package to update jsondiffpatch dependency -# Related Issue: https://github.com/wso2/product-ballerina-integrator/issues/1274 -CVE-2025-9910 - # No fix released by the author # https://github.com/wso2/vscode-extensions/issues/550 CVE-2020-36851 diff --git a/.vscode/launch.json b/.vscode/launch.json index cdedd42b4be..28d44bc5469 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -34,7 +34,8 @@ "LSDEBUG": "false", "WEB_VIEW_WATCH_MODE": "true", "WEB_VIEW_DEV_HOST": "http://localhost:9000", - "BALLERINA_STAGE_CENTRAL": "false" + "BALLERINA_STAGE_CENTRAL": "false", + "TRACE_WEB_VIEW_DEV_HOST": "http://localhost:9001" }, "outFiles": [ "${workspaceFolder}/workspaces/ballerina/ballerina-extension/dist/**/*.js", @@ -245,7 +246,8 @@ "--extensionTestsPath=${workspaceFolder}/workspaces/ballerina/ballerina-extension/out/test", "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/bi_empty_project", "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/bi_init", - "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/simple_order_management_system" + "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/simple_order_management_system", + "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper" ], "env": { "LS_EXTENSIONS_PATH": "", @@ -294,4 +296,4 @@ "preLaunchTask": "npm: watch-apk" }, ] -} +} \ No newline at end of file diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 00000000000..40093f2eb1a --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,14 @@ +{ + "servers": { + "playwright-test": { + "type": "stdio", + "command": "npx", + "args": [ + "playwright", + "run-test-mcp-server" + ], + "cwd": "${workspaceFolder}" + } + }, + "inputs": [] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b769704d735..b9523f5c3a6 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,6 +1,16 @@ { "version": "2.0.0", "tasks": [ + { + "label": "ballerina-extension: test-compile", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}/workspaces/ballerina/ballerina-extension" + }, + "command": "pnpm", + "args": ["run", "test-compile"], + "problemMatcher": ["$tsc"] + }, { "label": "watch-all", "dependsOn": ["watch-ballerina", "watch-bi"] diff --git a/common/config/rush/.pnpmfile.cjs b/common/config/rush/.pnpmfile.cjs index 60edcb80b49..62e4429631d 100644 --- a/common/config/rush/.pnpmfile.cjs +++ b/common/config/rush/.pnpmfile.cjs @@ -57,6 +57,12 @@ module.exports = { if (pkg.dependencies['form-data']) { pkg.dependencies['form-data'] = '^4.0.4'; } + if (pkg.dependencies['min-document']) { + pkg.dependencies['min-document'] = '^2.19.1'; + } + if (pkg.dependencies['js-yaml']) { + pkg.dependencies['js-yaml'] = '^4.1.1'; + } } if (pkg.devDependencies) { @@ -97,6 +103,9 @@ module.exports = { if (pkg.devDependencies['form-data']) { pkg.devDependencies['form-data'] = '^4.0.4'; } + if (pkg.devDependencies['min-document']) { + pkg.devDependencies['min-document'] = '^2.19.1'; + } } return pkg; diff --git a/common/config/rush/pnpm-config.json b/common/config/rush/pnpm-config.json index 15ab1176ab2..6017c38f0ce 100644 --- a/common/config/rush/pnpm-config.json +++ b/common/config/rush/pnpm-config.json @@ -89,7 +89,8 @@ * Ppnpmdocumentation: https://pnpm.io/package_json#pnpmoverrides */ "globalOverrides": { - "tar-fs": "3.1.1" + "tar-fs": "3.1.1", + "jws": "3.2.3" // "example1": "^1.0.0", // "example2": "npm:@company/example2@^1.0.0" }, diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index e21a604eeb5..a3d27f66175 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -6,6 +6,7 @@ settings: overrides: tar-fs: 3.1.1 + jws: 3.2.3 pnpmfileChecksum: sha256-XTeZQwJtKk4dimqf7175GhJCXrnq3Yh7+kwb86Bwcdo= @@ -13,6 +14,322 @@ importers: .: {} + ../../workspaces/api-designer/api-designer-core: + dependencies: + '@types/vscode-webview': + specifier: ^1.57.3 + version: 1.57.5 + vscode-messenger-common: + specifier: ^0.4.5 + version: 0.4.5 + devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: ^6.9.1 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^6.9.1 + version: 6.21.0(eslint@8.57.1)(typescript@5.8.3) + eslint: + specifier: ^8.52.0 + version: 8.57.1 + typescript: + specifier: 5.8.3 + version: 5.8.3 + + ../../workspaces/api-designer/api-designer-extension: + dependencies: + '@apidevtools/json-schema-ref-parser': + specifier: 11.6.1 + version: 11.6.1 + '@babel/core': + specifier: ^7.24.4 + version: 7.27.7 + '@types/json-schema': + specifier: 7.0.15 + version: 7.0.15 + '@types/lodash': + specifier: ~4.14.199 + version: 4.14.202 + '@types/xml2js': + specifier: ~0.4.12 + version: 0.4.14 + '@vscode/vsce': + specifier: ^3.7.0 + version: 3.7.1 + '@wso2/api-designer-core': + specifier: workspace:* + version: link:../api-designer-core + '@wso2/api-designer-rpc-client': + specifier: workspace:* + version: link:../api-designer-rpc-client + '@wso2/api-designer-visualizer': + specifier: workspace:* + version: link:../api-designer-visualizer + '@wso2/font-wso2-vscode': + specifier: workspace:* + version: link:../../common-libs/font-wso2-vscode + adm-zip: + specifier: ~0.5.14 + version: 0.5.16 + axios: + specifier: ~1.12.0 + version: 1.12.2 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cors-anywhere: + specifier: ^0.4.4 + version: 0.4.4 + js-yaml: + specifier: ^4.1.1 + version: 4.1.1 + json-schema: + specifier: 0.4.0 + version: 0.4.0 + jsonix: + specifier: ~3.0.0 + version: 3.0.0 + lodash: + specifier: ~4.17.21 + version: 4.17.21 + node-fetch: + specifier: ~2.6.2 + version: 2.6.13(encoding@0.1.13) + node-loader: + specifier: ~2.0.0 + version: 2.0.0(webpack@5.103.0) + portfinder: + specifier: ^1.0.32 + version: 1.0.38 + to-json-schema: + specifier: 0.2.5 + version: 0.2.5 + vscode-messenger: + specifier: ^0.4.5 + version: 0.4.5 + vscode-messenger-common: + specifier: ^0.4.5 + version: 0.4.5 + xstate: + specifier: ^4.38.3 + version: 4.38.3 + devDependencies: + '@types/js-yaml': + specifier: ~4.0.9 + version: 4.0.9 + '@types/node': + specifier: 16.x + version: 16.18.126 + '@types/vscode': + specifier: ^1.81.0 + version: 1.106.1 + '@typescript-eslint/eslint-plugin': + specifier: ^6.4.1 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^6.4.1 + version: 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@vscode/test-electron': + specifier: ^2.3.4 + version: 2.5.2 + eslint: + specifier: ^8.47.0 + version: 8.57.1 + rimraf: + specifier: ~5.0.5 + version: 5.0.10 + ts-loader: + specifier: ^9.4.4 + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + webpack: + specifier: ^5.94.0 + version: 5.103.0(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack@5.103.0) + + ../../workspaces/api-designer/api-designer-rpc-client: + dependencies: + '@types/vscode-webview': + specifier: ^1.57.3 + version: 1.57.5 + '@wso2/api-designer-core': + specifier: workspace:* + version: link:../api-designer-core + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + vscode-messenger-common: + specifier: ^0.4.5 + version: 0.4.5 + vscode-messenger-webview: + specifier: ^0.4.5 + version: 0.4.5 + devDependencies: + '@types/react': + specifier: 18.2.0 + version: 18.2.0 + '@types/react-dom': + specifier: 18.2.0 + version: 18.2.0 + '@typescript-eslint/eslint-plugin': + specifier: ^6.9.1 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^6.9.1 + version: 6.21.0(eslint@8.57.1)(typescript@5.8.3) + eslint: + specifier: ^8.52.0 + version: 8.57.1 + typescript: + specifier: 5.8.3 + version: 5.8.3 + + ../../workspaces/api-designer/api-designer-visualizer: + dependencies: + '@emotion/css': + specifier: ^11.10.5 + version: 11.13.5 + '@emotion/react': + specifier: ^11.9.3 + version: 11.14.0(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': + specifier: ^11.11.0 + version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@hookform/resolvers': + specifier: ~3.3.4 + version: 3.3.4(react-hook-form@7.56.4(react@18.2.0)) + '@mdxeditor/editor': + specifier: ~3.14.0 + version: 3.14.0(@codemirror/language@6.11.3)(@lezer/highlight@1.2.3)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/query-core': + specifier: ^4.0.0-beta.1 + version: 4.41.0 + '@tanstack/react-query': + specifier: 4.0.10 + version: 4.0.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@vscode/webview-ui-toolkit': + specifier: ^1.2.0 + version: 1.4.0(react@18.2.0) + '@wso2/api-designer-core': + specifier: workspace:* + version: link:../api-designer-core + '@wso2/api-designer-rpc-client': + specifier: workspace:* + version: link:../api-designer-rpc-client + '@wso2/font-wso2-vscode': + specifier: workspace:* + version: link:../../common-libs/font-wso2-vscode + '@wso2/ui-toolkit': + specifier: workspace:* + version: link:../../common-libs/ui-toolkit + js-yaml: + specifier: ^4.1.1 + version: 4.1.1 + lodash: + specifier: ~4.17.21 + version: 4.17.21 + path: + specifier: ~0.12.7 + version: 0.12.7 + process: + specifier: ~0.11.10 + version: 0.11.10 + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: 7.56.4 + version: 7.56.4(react@18.2.0) + react-markdown: + specifier: ~9.0.1 + version: 9.0.3(@types/react@18.2.0)(react@18.2.0) + yup: + specifier: ~1.4.0 + version: 1.4.0 + devDependencies: + '@babel/plugin-syntax-flow': + specifier: ~7.22.5 + version: 7.22.5(@babel/core@7.27.7) + '@babel/preset-typescript': + specifier: ~7.22.11 + version: 7.22.15(@babel/core@7.27.7) + '@storybook/addon-actions': + specifier: ~7.4.0 + version: 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-essentials': + specifier: ~7.4.0 + version: 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/cli': + specifier: ^7.6.10 + version: 7.6.20(encoding@0.1.13) + '@storybook/react': + specifier: ~7.4.0 + version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/react-webpack5': + specifier: ~7.4.0 + version: 7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1) + '@types/js-yaml': + specifier: ~4.0.9 + version: 4.0.9 + '@types/lodash': + specifier: ~4.14.198 + version: 4.14.202 + '@types/node': + specifier: ^20.10.6 + version: 20.19.25 + '@types/react': + specifier: 18.2.0 + version: 18.2.0 + '@types/react-dom': + specifier: 18.2.0 + version: 18.2.0 + '@types/vscode-webview': + specifier: ~1.57.2 + version: 1.57.5 + '@vscode/codicons': + specifier: 0.0.33 + version: 0.0.33 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + css-loader: + specifier: ^5.2.7 + version: 5.2.7(webpack@5.103.0) + sass-loader: + specifier: ^13.2.0 + version: 13.3.3(sass@1.94.2)(webpack@5.103.0) + source-map-loader: + specifier: ^4.0.1 + version: 4.0.2(webpack@5.103.0) + style-loader: + specifier: ^1.3.0 + version: 1.3.0(webpack@5.103.0) + ts-loader: + specifier: ^9.5.0 + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + webpack: + specifier: ^5.94.0 + version: 5.103.0(webpack-cli@5.1.4) + webpack-cli: + specifier: ~5.1.4 + version: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.103.0) + webpack-dev-server: + specifier: ^5.2.1 + version: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) + ../../workspaces/apk/apk-extension: devDependencies: '@types/glob': @@ -23,10 +340,10 @@ importers: version: 10.0.10 '@types/node': specifier: ^18.11.19 - version: 18.19.121 + version: 18.19.130 '@types/vscode': specifier: ^1.63.0 - version: 1.102.0 + version: 1.106.1 '@typescript-eslint/eslint-plugin': specifier: ~5.48.2 version: 5.48.2(@typescript-eslint/parser@5.48.2(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) @@ -36,6 +353,9 @@ importers: '@vscode/test-electron': specifier: ^2.3.2 version: 2.5.2 + '@vscode/vsce': + specifier: ^3.7.0 + version: 3.7.1 copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -43,17 +363,14 @@ importers: specifier: ^8.32.0 version: 8.57.1 glob: - specifier: ^8.1.0 - version: 8.1.0 + specifier: ^11.1.0 + version: 11.1.0 mocha: specifier: ^10.2.0 version: 10.8.2 typescript: specifier: 5.8.3 version: 5.8.3 - vsce: - specifier: ^2.15.0 - version: 2.15.0 ../../workspaces/ballerina/ballerina-core: dependencies: @@ -101,7 +418,7 @@ importers: version: 3.1.0 vscode-ws-jsonrpc: specifier: ^3.4.0 - version: 3.4.0 + version: 3.5.0 devDependencies: '@types/node': specifier: ^22.15.21 @@ -111,19 +428,19 @@ importers: version: 18.2.0 '@types/vscode': specifier: ^1.83.1 - version: 1.102.0 + version: 1.106.1 '@typescript-eslint/eslint-plugin': specifier: ^8.32.1 - version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.32.1 - version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) copyfiles: specifier: ^2.4.1 version: 2.4.1 eslint: specifier: ^9.26.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -132,10 +449,13 @@ importers: dependencies: '@ai-sdk/amazon-bedrock': specifier: ^3.0.25 - version: 3.0.30(zod@4.1.11) + version: 3.0.65(zod@4.1.11) '@ai-sdk/anthropic': specifier: ^2.0.20 - version: 2.0.23(zod@4.1.11) + version: 2.0.53(zod@4.1.11) + '@iarna/toml': + specifier: ^2.2.5 + version: 2.2.5 '@types/lodash': specifier: ^4.14.200 version: 4.17.17 @@ -143,8 +463,8 @@ importers: specifier: ^2.5.2 version: 2.5.2 '@vscode/vsce': - specifier: ^2.22.0 - version: 2.32.0 + specifier: ^3.7.0 + version: 3.7.1 '@wso2/ballerina-core': specifier: workspace:* version: link:../ballerina-core @@ -157,12 +477,15 @@ importers: '@wso2/syntax-tree': specifier: workspace:* version: link:../syntax-tree + '@wso2/trace-visualizer': + specifier: workspace:* + version: link:../trace-visualizer '@wso2/wso2-platform-core': specifier: workspace:* version: link:../../wso2-platform/wso2-platform-core ai: specifier: ^5.0.56 - version: 5.0.59(zod@4.1.11) + version: 5.0.106(zod@4.1.11) cors-anywhere: specifier: ^0.4.4 version: 0.4.4 @@ -176,8 +499,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 glob: - specifier: ^7.2.3 - version: 7.2.3 + specifier: ^11.1.0 + version: 11.1.0 handlebars: specifier: ~4.7.8 version: 4.7.8 @@ -198,13 +521,16 @@ importers: version: 2.1.1 portfinder: specifier: ^1.0.32 - version: 1.0.37 + version: 1.0.38 + protobufjs: + specifier: ^7.2.5 + version: 7.5.4 source-map-support: specifier: ^0.5.21 version: 0.5.21 - toml: - specifier: ^3.0.0 - version: 3.0.0 + unzipper: + specifier: ~0.12.3 + version: 0.12.3 uuid: specifier: ^11.1.0 version: 11.1.0 @@ -259,22 +585,22 @@ importers: version: 10.0.10 '@types/node': specifier: ^18.18.7 - version: 18.19.121 + version: 18.19.130 '@types/tcp-port-used': specifier: ^1.0.3 version: 1.0.4 '@types/vscode': specifier: ^1.83.1 - version: 1.102.0 + version: 1.106.1 '@types/vscode-notebook-renderer': specifier: ~1.72.2 - version: 1.72.3 + version: 1.72.4 adm-zip: specifier: ^0.5.16 version: 0.5.16 axios: specifier: ^1.12.0 - version: 1.12.0 + version: 1.12.2 chai: specifier: ^4.3.10 version: 4.5.0 @@ -288,14 +614,14 @@ importers: specifier: ^4.6.2 version: 4.6.2 express: - specifier: ^4.18.2 - version: 4.21.2 + specifier: ^4.22.1 + version: 4.22.1 istanbul: specifier: ^0.4.5 version: 0.4.5 js-yaml: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.1.1 + version: 4.1.1 keytar: specifier: ^7.9.0 version: 7.9.0 @@ -322,7 +648,7 @@ importers: version: 1.0.2 ts-loader: specifier: ^9.5.0 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) tslint: specifier: ^6.1.3 version: 6.1.3(typescript@5.8.3) @@ -337,13 +663,10 @@ importers: version: 5.10.0(mocha@10.8.2)(typescript@5.8.3) webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack@5.101.0) - webpack-merge-and-include-globally: - specifier: ^2.3.4 - version: 2.3.4(webpack@5.101.0) + version: 6.0.1(webpack@5.103.0) yarn: specifier: ^1.22.19 version: 1.22.22 @@ -379,16 +702,16 @@ importers: version: 3.2.0(date-fns@4.1.0) dexie: specifier: ^4.0.11 - version: 4.0.11 + version: 4.2.1 graphql: specifier: ^16.11.0 - version: 16.11.0 + version: 16.12.0 handlebars: specifier: ^4.7.8 version: 4.7.8 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) joi: specifier: ^17.13.3 version: 17.13.3 @@ -412,7 +735,7 @@ importers: version: 18.2.0(react@18.2.0) react-intl: specifier: ^7.1.11 - version: 7.1.11(react@18.2.0)(typescript@5.8.3) + version: 7.1.14(react@18.2.0)(typescript@5.8.3) react-lottie: specifier: ^1.2.10 version: 1.2.10(react@18.2.0) @@ -434,31 +757,31 @@ importers: version: 7.27.2(@babel/core@7.27.7) '@rollup/plugin-commonjs': specifier: ^28.0.3 - version: 28.0.6(rollup@4.46.2) + version: 28.0.9(rollup@4.53.3) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.46.2) + version: 6.1.0(rollup@4.53.3) '@rollup/plugin-node-resolve': specifier: ^16.0.1 - version: 16.0.1(rollup@4.46.2) + version: 16.0.3(rollup@4.53.3) '@storybook/addon-actions': specifier: ^6.5.16 version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-essentials': specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.101.0) + version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.103.0) '@storybook/addon-links': specifier: ^6.5.16 version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/builder-webpack5': specifier: ^6.5.16 - version: 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + version: 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/manager-webpack5': specifier: ^6.5.9 - version: 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + version: 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/react': specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@types/webpack@5.28.5(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1) '@types/classnames': specifier: ^2.2.9 version: 2.3.4 @@ -488,34 +811,34 @@ importers: version: 10.0.0 '@types/webpack': specifier: ^5.28.5 - version: 5.28.5(webpack-cli@6.0.1) + version: 5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) babel-loader: specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.101.0) + version: 10.0.0(@babel/core@7.27.7)(webpack@5.103.0) copy-webpack-plugin: specifier: ^13.0.0 - version: 13.0.0(webpack@5.101.0) + version: 13.0.1(webpack@5.103.0) copyfiles: specifier: ^2.4.1 version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) express: - specifier: ^5.1.0 - version: 5.1.0 + specifier: ^4.22.1 + version: 4.22.1 file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.0) + version: 6.2.0(webpack@5.103.0) fork-ts-checker-webpack-plugin: specifier: ^9.1.0 - version: 9.1.0(typescript@5.8.3)(webpack@5.101.0) + version: 9.1.0(typescript@5.8.3)(webpack@5.103.0) glob: - specifier: ^11.0.2 - version: 11.0.3 + specifier: ^11.1.0 + version: 11.1.0 react-scripts-ts: specifier: ^3.1.0 - version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3)(webpack-cli@6.0.1) + version: 3.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3)(webpack-cli@6.0.1) react-test-renderer: specifier: ^19.1.0 version: 19.1.1(react@18.2.0) @@ -524,16 +847,16 @@ importers: version: 6.0.1 rollup: specifier: ^4.41.0 - version: 4.46.2 + version: 4.53.3 rollup-plugin-import-css: specifier: ^3.5.8 - version: 3.5.8(rollup@4.46.2) + version: 3.5.8(rollup@4.53.3) rollup-plugin-peer-deps-external: specifier: ^2.2.4 - version: 2.2.4(rollup@4.46.2) + version: 2.2.4(rollup@4.53.3) rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.5.6) + version: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) rollup-plugin-scss: specifier: ^4.0.1 version: 4.0.1 @@ -542,31 +865,31 @@ importers: version: 2.0.0 rollup-plugin-typescript2: specifier: ^0.36.0 - version: 0.36.0(rollup@4.46.2)(typescript@5.8.3) + version: 0.36.0(rollup@4.53.3)(typescript@5.8.3) sass: specifier: ^1.89.0 - version: 1.90.0 + version: 1.94.2 sass-loader: specifier: ^16.0.5 - version: 16.0.5(sass@1.90.0)(webpack@5.101.0) + version: 16.0.6(sass@1.94.2)(webpack@5.103.0) storybook: specifier: ^8.6.14 version: 8.6.14(prettier@3.5.3) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) stylelint: specifier: ^16.19.1 - version: 16.23.0(typescript@5.8.3) + version: 16.26.1(typescript@5.8.3) stylelint-config-standard: specifier: ^38.0.0 - version: 38.0.0(stylelint@16.23.0(typescript@5.8.3)) + version: 38.0.0(stylelint@16.26.1(typescript@5.8.3)) svg-url-loader: specifier: ^8.0.0 - version: 8.0.0(webpack@5.101.0) + version: 8.0.0(webpack@5.103.0) ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) tslib: specifier: ^2.8.1 version: 2.8.1 @@ -584,13 +907,13 @@ importers: version: 5.8.3 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) webpack-dev-server: specifier: ^5.2.1 - version: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + version: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) ../../workspaces/ballerina/ballerina-rpc-client: dependencies: @@ -630,34 +953,64 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: ^8.32.1 - version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.32.1 - version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) copyfiles: specifier: ^2.4.1 version: 2.4.1 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.27.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.27.0(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@9.27.0(jiti@2.5.1)) + version: 0.4.24(eslint@9.27.0(jiti@2.6.1)) typescript: specifier: 5.8.3 version: 5.8.3 ../../workspaces/ballerina/ballerina-side-panel: dependencies: + '@codemirror/autocomplete': + specifier: ~6.19.1 + version: 6.19.1 + '@codemirror/commands': + specifier: ~6.10.0 + version: 6.10.0 + '@codemirror/lang-sql': + specifier: ~6.10.0 + version: 6.10.0 + '@codemirror/language': + specifier: ~6.11.3 + version: 6.11.3 + '@codemirror/language-data': + specifier: ~6.5.2 + version: 6.5.2 + '@codemirror/lint': + specifier: ~6.8.1 + version: 6.8.5 + '@codemirror/state': + specifier: ~6.5.2 + version: 6.5.2 + '@codemirror/view': + specifier: ~6.38.6 + version: 6.38.8 '@emotion/react': specifier: ^11.14.0 version: 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/styled': specifier: ^11.14.0 version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@github/markdown-toolbar-element': + specifier: ^2.2.3 + version: 2.2.3 + '@lezer/highlight': + specifier: ~1.2.3 + version: 1.2.3 '@wso2/ballerina-core': specifier: workspace:* version: link:../ballerina-core @@ -670,6 +1023,42 @@ importers: lodash: specifier: ~4.17.21 version: 4.17.21 + markdown-it: + specifier: ~14.1.0 + version: 14.1.0 + prosemirror-commands: + specifier: ~1.7.1 + version: 1.7.1 + prosemirror-gapcursor: + specifier: ~1.4.0 + version: 1.4.0 + prosemirror-history: + specifier: ~1.5.0 + version: 1.5.0 + prosemirror-inputrules: + specifier: ~1.5.1 + version: 1.5.1 + prosemirror-keymap: + specifier: ~1.2.2 + version: 1.2.3 + prosemirror-markdown: + specifier: ~1.13.2 + version: 1.13.2 + prosemirror-model: + specifier: ~1.25.4 + version: 1.25.4 + prosemirror-schema-basic: + specifier: ~1.2.2 + version: 1.2.4 + prosemirror-schema-list: + specifier: ~1.5.1 + version: 1.5.1 + prosemirror-state: + specifier: ~1.4.3 + version: 1.4.4 + prosemirror-view: + specifier: ~1.41.3 + version: 1.41.4 react: specifier: 18.2.0 version: 18.2.0 @@ -682,10 +1071,16 @@ importers: react-markdown: specifier: ~10.1.0 version: 10.1.0(@types/react@18.2.0)(react@18.2.0) + rehype-raw: + specifier: ^7.0.0 + version: 7.0.0 + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 devDependencies: '@storybook/react': specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1) '@types/lodash': specifier: ~4.17.16 version: 4.17.17 @@ -715,13 +1110,13 @@ importers: version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@headlessui/react': specifier: ~2.2.4 - version: 2.2.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@hookform/resolvers': specifier: ~5.0.1 version: 5.0.1(react-hook-form@7.56.4(react@18.2.0)) '@tanstack/query-core': specifier: ^5.77.1 - version: 5.83.1 + version: 5.90.11 '@tanstack/react-query': specifier: 5.77.1 version: 5.77.1(react@18.2.0) @@ -814,7 +1209,7 @@ importers: version: 10.1.0(@types/react@18.2.0)(react@18.2.0) react-syntax-highlighter: specifier: ~15.6.1 - version: 15.6.1(react@18.2.0) + version: 15.6.6(react@18.2.0) rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -854,10 +1249,10 @@ importers: version: 5.28.5(webpack-cli@5.1.4) '@typescript-eslint/eslint-plugin': specifier: ^8.32.1 - version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.32.1 - version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) buffer: specifier: ^6.0.3 version: 6.0.3 @@ -866,37 +1261,40 @@ importers: version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) eslint: specifier: ^9.26.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.27.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.27.0(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@9.27.0(jiti@2.5.1)) + version: 0.4.24(eslint@9.27.0(jiti@2.6.1)) sass-loader: specifier: ^16.0.5 - version: 16.0.5(sass@1.90.0)(webpack@5.101.0) + version: 16.0.6(sass@1.94.2)(webpack@5.103.0) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.101.0) + version: 5.0.0(webpack@5.103.0) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@5.1.4) + version: 5.103.0(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.103.0) webpack-dev-server: specifier: ^5.2.1 - version: 5.2.2(webpack-cli@5.1.4)(webpack@5.101.0) + version: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) ../../workspaces/ballerina/bi-diagram: dependencies: @@ -927,6 +1325,9 @@ importers: '@wso2/ballerina-core': specifier: workspace:* version: link:../ballerina-core + '@wso2/ballerina-side-panel': + specifier: workspace:* + version: link:../ballerina-side-panel '@wso2/ui-toolkit': specifier: workspace:* version: link:../../common-libs/ui-toolkit @@ -942,6 +1343,9 @@ importers: react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: 7.56.4 + version: 7.56.4(react@18.2.0) devDependencies: '@babel/core': specifier: ~7.27.1 @@ -957,7 +1361,7 @@ importers: version: 7.27.1(@babel/core@7.27.7) '@storybook/react': specifier: ^6.3.7 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@testing-library/dom': specifier: ~10.4.0 version: 10.4.1 @@ -996,7 +1400,7 @@ importers: version: 3.0.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -1008,7 +1412,7 @@ importers: version: 19.1.1(react@18.2.0) ts-jest: specifier: 29.3.4 - version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1075,7 +1479,7 @@ importers: version: 7.27.1(@babel/core@7.27.7) '@storybook/react': specifier: ^6.5.16 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1) '@testing-library/dom': specifier: ~10.4.0 version: 10.4.1 @@ -1114,7 +1518,7 @@ importers: version: 3.0.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -1126,7 +1530,7 @@ importers: version: 19.1.1(react@18.2.0) ts-jest: specifier: 29.3.4 - version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1156,7 +1560,7 @@ importers: version: 6.7.4(lodash@4.17.21)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@tanstack/query-core': specifier: ^5.77.1 - version: 5.83.1 + version: 5.90.11 '@tanstack/react-query': specifier: 5.77.1 version: 5.77.1(react@18.2.0) @@ -1204,7 +1608,7 @@ importers: version: 3.17.5 zustand: specifier: ^5.0.4 - version: 5.0.7(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.5.0(react@18.2.0)) + version: 5.0.9(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)) devDependencies: '@types/blueimp-md5': specifier: ^2.18.2 @@ -1223,34 +1627,34 @@ importers: version: 17.0.26(@types/react@18.2.0) '@typescript-eslint/eslint-plugin': specifier: ~8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ~8.32.1 - version: 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) copyfiles: specifier: ^2.4.1 version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) eslint: specifier: ^9.26.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.27.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.27.0(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.4 - version: 0.4.20(eslint@9.27.0(jiti@2.5.1)) + version: 0.4.24(eslint@9.27.0(jiti@2.6.1)) file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.0) + version: 6.2.0(webpack@5.103.0) react-hook-form: specifier: ~7.56.3 version: 7.56.4(react@18.2.0) ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) tslib: specifier: ^2.8.1 version: 2.8.1 @@ -1274,10 +1678,10 @@ importers: version: 2.4.1 graphiql: specifier: 3.7.0 - version: 3.7.0(@codemirror/language@6.11.2)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 3.7.0(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) graphiql-explorer: specifier: ^0.9.0 - version: 0.9.0(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 0.9.0(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -1293,19 +1697,19 @@ importers: version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-essentials': specifier: ^6.5.9 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.101.0) + version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.103.0) '@storybook/addon-links': specifier: ^6.5.9 version: 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/builder-webpack5': specifier: ^6.5.9 - version: 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + version: 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/manager-webpack5': specifier: ^6.5.9 - version: 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + version: 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/react': specifier: ^6.5.9 - version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1) '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -1314,34 +1718,34 @@ importers: version: 18.2.0 babel-loader: specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.101.0) + version: 10.0.0(@babel/core@7.27.7)(webpack@5.103.0) css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) graphql: specifier: ^16.11.0 - version: 16.11.0 + version: 16.12.0 mini-css-extract-plugin: specifier: ^2.9.2 - version: 2.9.3(webpack@5.101.0) + version: 2.9.4(webpack@5.103.0) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.101.0) + version: 5.0.0(webpack@5.103.0) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@4.10.0) + version: 5.103.0(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 - version: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.101.0) + version: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.103.0) ../../workspaces/ballerina/graphql-design-diagram: dependencies: @@ -1472,7 +1876,7 @@ importers: version: 5.2.0(eslint@8.57.1) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@8.57.1) + version: 0.4.24(eslint@8.57.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1520,7 +1924,7 @@ importers: version: 0.8.5 file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.0) + version: 6.2.0(webpack@5.103.0) html-to-image: specifier: ^1.10.8 version: 1.11.11 @@ -1563,31 +1967,31 @@ importers: version: link:../../common-libs/ui-toolkit babel-loader: specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.101.0) + version: 10.0.0(@babel/core@7.27.7)(webpack@5.103.0) copyfiles: specifier: ^2.4.1 version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.101.0) + version: 5.0.0(webpack@5.103.0) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) ts-loader: specifier: ^9.4.1 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) webpack-dev-server: specifier: ^5.2.1 - version: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + version: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) ../../workspaces/ballerina/record-creator: dependencies: @@ -1644,7 +2048,7 @@ importers: version: 18.2.0(react@18.2.0) react-intl: specifier: ~7.1.11 - version: 7.1.11(react@18.2.0)(typescript@5.8.3) + version: 7.1.14(react@18.2.0)(typescript@5.8.3) react-lottie: specifier: ~1.2.4 version: 1.2.10(react@18.2.0) @@ -1666,7 +2070,7 @@ importers: version: 2.4.1 eslint: specifier: ~9.26.0 - version: 9.26.0(jiti@2.5.1) + version: 9.26.0(jiti@2.6.1) react-scripts-ts: specifier: 3.1.0 version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3) @@ -1724,7 +2128,7 @@ importers: devDependencies: '@storybook/react': specifier: ^6.3.7 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1) '@types/dagre': specifier: ~0.7.52 version: 0.7.53 @@ -1739,19 +2143,19 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: ~8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3) copyfiles: specifier: ^2.4.1 version: 2.4.1 eslint: specifier: ~9.26.0 - version: 9.26.0(jiti@2.5.1) + version: 9.26.0(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ~5.2.0 - version: 5.2.0(eslint@9.26.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.26.0(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: ~4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.5.1)) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.6.1)) prettier: specifier: ~3.5.3 version: 3.5.3 @@ -1766,13 +2170,13 @@ importers: version: 11.13.5 '@emotion/react': specifier: ^11.9.3 - version: 11.14.0(@types/react@17.0.87)(react@19.1.0) + version: 11.14.0(@types/react@17.0.90)(react@19.1.0) '@emotion/styled': specifier: ^11.10.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@17.0.87)(react@19.1.0))(@types/react@17.0.87)(react@19.1.0) + version: 11.14.1(@emotion/react@11.14.0(@types/react@17.0.90)(react@19.1.0))(@types/react@17.0.90)(react@19.1.0) '@tanstack/query-core': specifier: ^4.0.0-beta.1 - version: 4.40.0 + version: 4.41.0 '@tanstack/react-query': specifier: 4.0.10 version: 4.0.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -1808,7 +2212,7 @@ importers: version: 4.12.0(react@19.1.0) react-intl: specifier: ^7.1.11 - version: 7.1.11(react@19.1.0)(typescript@4.9.5) + version: 7.1.14(react@19.1.0)(typescript@4.9.5) react-lottie: specifier: ^1.2.3 version: 1.2.10(react@19.1.0) @@ -1824,7 +2228,7 @@ importers: devDependencies: '@storybook/react': specifier: ^6.5.9 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.5)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.5)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1) '@types/classnames': specifier: ^2.2.9 version: 2.3.4 @@ -1839,7 +2243,7 @@ importers: version: 4.0.9 '@types/react': specifier: ^17.0.37 - version: 17.0.87 + version: 17.0.90 '@types/react-dom': specifier: 17.0.14 version: 17.0.14 @@ -1875,7 +2279,7 @@ importers: version: 9.1.7 lint-staged: specifier: ^16.0.0 - version: 16.1.4 + version: 16.2.7 prettier: specifier: ^3.5.3 version: 3.5.3 @@ -1889,6 +2293,70 @@ importers: specifier: 5.8.3 version: 5.8.3 + ../../workspaces/ballerina/trace-visualizer: + dependencies: + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@18.2.0)(react@18.2.0) + '@emotion/styled': + specifier: ^11.14.0 + version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) + '@vscode/webview-ui-toolkit': + specifier: ^1.4.0 + version: 1.4.0(react@18.2.0) + '@wso2/ui-toolkit': + specifier: workspace:* + version: link:../../common-libs/ui-toolkit + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@types/react': + specifier: 18.2.0 + version: 18.2.0 + '@types/react-dom': + specifier: 18.2.0 + version: 18.2.0 + '@types/webpack': + specifier: ^5.28.5 + version: 5.28.5(webpack-cli@5.1.4) + buffer: + specifier: ^6.0.3 + version: 6.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + css-loader: + specifier: ^7.1.2 + version: 7.1.2(webpack@5.103.0) + sass-loader: + specifier: ^16.0.5 + version: 16.0.6(sass@1.94.2)(webpack@5.103.0) + source-map-loader: + specifier: ^5.0.0 + version: 5.0.0(webpack@5.103.0) + style-loader: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.103.0) + ts-loader: + specifier: ^9.5.2 + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + webpack: + specifier: ^5.94.0 + version: 5.103.0(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.103.0) + webpack-dev-server: + specifier: ^5.2.1 + version: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) + ../../workspaces/ballerina/type-diagram: dependencies: '@emotion/css': @@ -1932,7 +2400,7 @@ importers: version: 0.8.5 file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.0) + version: 6.2.0(webpack@5.103.0) html-to-image: specifier: ^1.11.11 version: 1.11.11 @@ -1981,31 +2449,31 @@ importers: version: link:../../common-libs/ui-toolkit babel-loader: specifier: ^10.0.0 - version: 10.0.0(@babel/core@7.27.7)(webpack@5.101.0) + version: 10.0.0(@babel/core@7.27.7)(webpack@5.103.0) copyfiles: specifier: ^2.4.1 version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.101.0) + version: 5.0.0(webpack@5.103.0) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) ts-loader: specifier: ^9.4.1 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) webpack-dev-server: specifier: ^5.2.1 - version: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + version: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) ../../workspaces/ballerina/type-editor: dependencies: @@ -2059,7 +2527,7 @@ importers: version: 18.2.0(react@18.2.0) react-intl: specifier: ^7.1.11 - version: 7.1.11(react@18.2.0)(typescript@5.8.3) + version: 7.1.14(react@18.2.0)(typescript@5.8.3) react-lottie: specifier: ^1.2.10 version: 1.2.10(react@18.2.0) @@ -2087,7 +2555,7 @@ importers: version: 2.4.1 eslint: specifier: ~9.26.0 - version: 9.26.0(jiti@2.5.1) + version: 9.26.0(jiti@2.6.1) react-scripts-ts: specifier: 3.1.0 version: 3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3) @@ -2097,6 +2565,9 @@ importers: ../../workspaces/bi/bi-extension: dependencies: + '@iarna/toml': + specifier: ^2.2.5 + version: 2.2.5 '@wso2/ballerina-core': specifier: workspace:* version: link:../../ballerina/ballerina-core @@ -2108,8 +2579,8 @@ importers: version: 4.38.3 devDependencies: '@playwright/test': - specifier: ~1.52.0 - version: 1.52.0 + specifier: ~1.55.1 + version: 1.55.1 '@types/mocha': specifier: ^10.0.3 version: 10.0.10 @@ -2118,7 +2589,7 @@ importers: version: 22.15.18 '@types/vscode': specifier: ^1.84.0 - version: 1.102.0 + version: 1.106.1 '@typescript-eslint/eslint-plugin': specifier: ^6.21.0 version: 6.21.0(@typescript-eslint/parser@8.33.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) @@ -2129,14 +2600,14 @@ importers: specifier: ^2.5.2 version: 2.5.2 '@vscode/vsce': - specifier: ^3.4.0 - version: 3.4.2 + specifier: ^3.7.0 + version: 3.7.1 '@wso2/playwright-vscode-tester': specifier: workspace:* version: link:../../common-libs/playwright-vscode-tester copy-webpack-plugin: specifier: ^13.0.0 - version: 13.0.0(webpack@5.101.0) + version: 13.0.1(webpack@5.103.0) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -2144,26 +2615,26 @@ importers: specifier: ^8.57.1 version: 8.57.1 glob: - specifier: ^11.0.2 - version: 11.0.3 + specifier: ^11.1.0 + version: 11.1.0 mocha: specifier: ^11.2.2 - version: 11.7.1 + version: 11.7.5 source-map-support: specifier: ^0.5.21 version: 0.5.21 ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack@5.101.0) + version: 6.0.1(webpack@5.103.0) webpack-permissions-plugin: specifier: ^1.0.9 version: 1.0.10 @@ -2203,7 +2674,7 @@ importers: version: 1.0.0(tslib@2.8.1) '@vscode/iconv-lite-umd': specifier: ^0.7.0 - version: 0.7.0 + version: 0.7.1 '@vscode/webview-ui-toolkit': specifier: ^1.2.0 version: 1.4.0(react@19.1.0) @@ -2225,6 +2696,9 @@ importers: file-type: specifier: ^18.2.1 version: 18.7.0 + js-yaml: + specifier: ^4.1.1 + version: 4.1.1 jschardet: specifier: ^3.0.0 version: 3.1.4 @@ -2242,14 +2716,14 @@ importers: version: 5.0.0 yaml: specifier: ^2.6.0 - version: 2.8.1 + version: 2.8.2 devDependencies: '@biomejs/biome': specifier: ^1.8.3 version: 1.9.4 '@playwright/test': - specifier: 1.52.0 - version: 1.52.0 + specifier: 1.55.1 + version: 1.55.1 '@types/byline': specifier: ^4.2.36 version: 4.2.36 @@ -2261,22 +2735,22 @@ importers: version: 22.15.35 '@types/vscode': specifier: ^1.100.0 - version: 1.102.0 + version: 1.106.1 '@types/which': specifier: ^3.0.4 version: 3.0.4 '@vscode/vsce': - specifier: ^3.4.2 - version: 3.4.2 + specifier: ^3.7.0 + version: 3.7.1 '@wso2/playwright-vscode-tester': specifier: workspace:* version: link:../../common-libs/playwright-vscode-tester axios: specifier: ^1.12.0 - version: 1.12.0 + version: 1.12.2 copy-webpack-plugin: specifier: ^13.0.0 - version: 13.0.0(webpack@5.101.0) + version: 13.0.1(webpack@5.103.0) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -2285,25 +2759,25 @@ importers: version: 6.0.0 mocha: specifier: ^11.5.0 - version: 11.7.1 + version: 11.7.5 terser-webpack-plugin: specifier: ^5.3.10 - version: 5.3.14(webpack@5.101.0) + version: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) ts-loader: specifier: ~9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 vscode-extension-tester: specifier: ^8.14.1 - version: 8.14.1(mocha@11.7.1)(typescript@5.8.3) + version: 8.14.1(mocha@11.7.5)(typescript@5.8.3) webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack@5.101.0) + version: 6.0.1(webpack@5.103.0) webpack-permissions-plugin: specifier: ^1.0.9 version: 1.0.10 @@ -2318,7 +2792,7 @@ importers: version: 0.8.2 '@hookform/resolvers': specifier: ^5.0.1 - version: 5.0.1(react-hook-form@7.56.4(react@18.2.0)) + version: 5.2.2(react-hook-form@7.56.4(react@18.2.0)) '@tanstack/react-query': specifier: ~4.28.0 version: 4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -2340,6 +2814,9 @@ importers: classnames: specifier: ~2.5.1 version: 2.5.1 + js-yaml: + specifier: ^4.1.1 + version: 4.1.1 lodash.debounce: specifier: ~4.0.8 version: 4.0.8 @@ -2385,16 +2862,16 @@ importers: version: 1.57.5 autoprefixer: specifier: ^10.4.21 - version: 10.4.21(postcss@8.5.6) + version: 10.4.22(postcss@8.5.6) copyfiles: specifier: ~2.4.1 version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.0) + version: 6.2.0(webpack@5.103.0) path: specifier: ^0.12.7 version: 0.12.7 @@ -2403,34 +2880,34 @@ importers: version: 8.5.6 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.5.6)(typescript@5.8.3)(webpack@5.101.0) + version: 8.2.0(postcss@8.5.6)(typescript@5.8.3)(webpack@5.103.0) sass-loader: specifier: ^16.0.5 - version: 16.0.5(sass@1.90.0)(webpack@5.101.0) + version: 16.0.6(sass@1.94.2)(webpack@5.103.0) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.101.0) + version: 5.0.0(webpack@5.103.0) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) tailwindcss: specifier: ^3.4.3 - version: 3.4.17 + version: 3.4.18(yaml@2.8.2) ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) webpack-dev-server: specifier: ^5.2.1 - version: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + version: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) ../../workspaces/common-libs/font-wso2-vscode: devDependencies: @@ -2438,8 +2915,8 @@ importers: specifier: 0.0.36 version: 0.0.36 fantasticon: - specifier: ^1.2.3 - version: 1.2.3 + specifier: ^3.0.0 + version: 3.0.0 icon-font-generator: specifier: ^2.1.11 version: 2.1.11 @@ -2450,17 +2927,17 @@ importers: ../../workspaces/common-libs/playwright-vscode-tester: dependencies: '@playwright/test': - specifier: 1.52.0 - version: 1.52.0 + specifier: 1.55.1 + version: 1.55.1 '@vscode/vsce': - specifier: ~3.4.2 - version: 3.4.2 + specifier: ^3.7.0 + version: 3.7.1 compare-versions: specifier: ~6.1.1 version: 6.1.1 fs-extra: specifier: ~11.3.0 - version: 11.3.1 + version: 11.3.2 got: specifier: 14.4.7 version: 14.4.7 @@ -2468,8 +2945,8 @@ importers: specifier: ~1.2.0 version: 1.2.0 playwright-core: - specifier: ~1.52.0 - version: 1.52.0 + specifier: ~1.55.1 + version: 1.55.1 targz: specifier: ~1.0.1 version: 1.0.1 @@ -2488,10 +2965,10 @@ importers: version: 0.10.11 '@typescript-eslint/eslint-plugin': specifier: ~8.33.0 - version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ~8.33.0 - version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -2540,7 +3017,7 @@ importers: version: 7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@storybook/react-webpack5': specifier: ~7.4.0 - version: 7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -2567,7 +3044,7 @@ importers: version: 4.6.2(eslint@8.57.1) eslint-plugin-react-refresh: specifier: ^0.4.4 - version: 0.4.20(eslint@8.57.1) + version: 0.4.24(eslint@8.57.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -2627,20 +3104,20 @@ importers: version: 7.56.3(react@19.1.0) devDependencies: '@storybook/addon-docs': - specifier: ^9.0.12 - version: 9.1.1(@types/react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) + specifier: ^8.6.14 + version: 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-essentials': specifier: ^8.6.14 - version: 8.6.14(@types/react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) + version: 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/cli': - specifier: ^9.0.12 - version: 9.1.1(@babel/preset-env@7.27.2(@babel/core@7.27.7))(@testing-library/dom@10.4.1)(prettier@3.5.3) + specifier: ^8.6.14 + version: 8.6.14(@babel/preset-env@7.27.2(@babel/core@7.27.7))(prettier@3.5.3) '@storybook/react': - specifier: ^9.0.12 - version: 9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3) + specifier: ^8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-vite': - specifier: ^9.0.12 - version: 9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.46.2)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3) + specifier: ^8.6.14 + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.53.3)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)) '@types/lodash': specifier: ~4.17.16 version: 4.17.17 @@ -2672,14 +3149,14 @@ importers: specifier: ^5.2.0 version: 5.2.0(eslint@8.57.1) eslint-plugin-storybook: - specifier: ^9.0.12 - version: 9.1.1(eslint@8.57.1)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3) + specifier: ^0.8.0 + version: 0.8.0(eslint@8.57.1)(typescript@5.8.3) gh-pages: specifier: ^6.3.0 version: 6.3.0 glob: - specifier: ^11.0.2 - version: 11.0.3 + specifier: ^11.1.0 + version: 11.1.0 http-server: specifier: ^14.1.1 version: 14.1.1 @@ -2687,11 +3164,72 @@ importers: specifier: ^6.0.0 version: 6.0.0(react@19.1.0) storybook: - specifier: ^9.0.12 - version: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + specifier: ^8.6.14 + version: 8.6.14(prettier@3.5.3) + typescript: + specifier: 5.8.3 + version: 5.8.3 + vite: + specifier: ^6.0.7 + version: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2) + + ../../workspaces/mcp-inspector/mcp-inspector-extension: + dependencies: + '@modelcontextprotocol/inspector': + specifier: ^0.17.2 + version: 0.17.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.18)(@types/react-dom@18.2.0)(@types/react@18.2.0)(typescript@5.8.3) + devDependencies: + '@types/mocha': + specifier: ^10.0.3 + version: 10.0.10 + '@types/node': + specifier: 22.15.18 + version: 22.15.18 + '@types/vscode': + specifier: ^1.84.0 + version: 1.106.1 + '@typescript-eslint/eslint-plugin': + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@8.33.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^8.32.1 + version: 8.33.1(eslint@8.57.1)(typescript@5.8.3) + '@vscode/test-electron': + specifier: ^2.5.2 + version: 2.5.2 + '@vscode/vsce': + specifier: ^3.7.0 + version: 3.7.1 + copy-webpack-plugin: + specifier: ^13.0.0 + version: 13.0.1(webpack@5.103.0) + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + eslint: + specifier: ^8.57.1 + version: 8.57.1 + mocha: + specifier: ^11.2.2 + version: 11.7.5 + open: + specifier: 10.2.0 + version: 10.2.0 + serve-handler: + specifier: 6.1.6 + version: 6.1.6 + ts-loader: + specifier: ^9.5.2 + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 + webpack: + specifier: ^5.94.0 + version: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack@5.103.0) ../../workspaces/mi/mi-component-diagram: dependencies: @@ -2737,7 +3275,7 @@ importers: devDependencies: '@storybook/react': specifier: ^6.3.7 - version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1) '@types/dagre': specifier: ~0.7.52 version: 0.7.53 @@ -2774,19 +3312,19 @@ importers: devDependencies: '@eslint/eslintrc': specifier: ~3.3.1 - version: 3.3.1 + version: 3.3.3 '@eslint/js': specifier: ~9.27.0 version: 9.27.0 '@typescript-eslint/eslint-plugin': specifier: ^8.32.1 - version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.32.1 - version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -2816,7 +3354,7 @@ importers: version: 6.7.4(lodash@4.17.21)(react@18.2.0)(resize-observer-polyfill@1.5.1) '@tanstack/query-core': specifier: ^5.76.2 - version: 5.83.1 + version: 5.90.11 '@tanstack/react-query': specifier: 5.76.2 version: 5.76.2(react@18.2.0) @@ -2870,7 +3408,7 @@ importers: version: 3.17.5 zustand: specifier: ^5.0.5 - version: 5.0.7(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.5.0(react@18.2.0)) + version: 5.0.9(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)) devDependencies: '@types/blueimp-md5': specifier: ^2.18.2 @@ -2889,34 +3427,34 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: ~8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ~8.32.1 - version: 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) copyfiles: specifier: ^2.4.1 version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.27.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.27.0(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@9.27.0(jiti@2.5.1)) + version: 0.4.24(eslint@9.27.0(jiti@2.6.1)) file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.0) + version: 6.2.0(webpack@5.103.0) react-hook-form: specifier: 7.56.4 version: 7.56.4(react@18.2.0) ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) ts-morph: specifier: ^22.0.0 version: 22.0.0 @@ -3002,10 +3540,10 @@ importers: version: 2.4.1 eslint-plugin-react-hooks: specifier: ~5.2.0 - version: 5.2.0(eslint@9.27.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.27.0(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: ~4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1)) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1)) html-to-image: specifier: 1.11.11 version: 1.11.11 @@ -3041,7 +3579,7 @@ importers: version: 1.21.3(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-json-view-lite: specifier: latest - version: 2.4.2(react@18.2.0) + version: 2.5.0(react@18.2.0) react-markdown: specifier: ~10.1.0 version: 10.1.0(@types/react@18.2.0)(react@18.2.0) @@ -3081,7 +3619,7 @@ importers: version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-webpack5': specifier: ^8.6.14 - version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) '@storybook/test': specifier: ^8.6.14 version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) @@ -3098,8 +3636,8 @@ importers: specifier: ~1.0.4 version: 1.0.4 '@types/jest': - specifier: 29.5.14 - version: 29.5.14 + specifier: ^30.0.0 + version: 30.0.0 '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -3114,10 +3652,10 @@ importers: version: 0.4.14 '@typescript-eslint/eslint-plugin': specifier: ~8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) babel-jest: - specifier: 29.7.0 - version: 29.7.0(@babel/core@7.27.7) + specifier: ^30.0.0 + version: 30.2.0(@babel/core@7.27.7) deep-equal: specifier: ~2.2.3 version: 2.2.3 @@ -3125,8 +3663,8 @@ importers: specifier: ~3.0.0 version: 3.0.0 jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + specifier: ^30.0.0 + version: 30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -3141,7 +3679,7 @@ importers: version: 8.6.14(prettier@3.5.3) ts-jest: specifier: 29.3.4 - version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0))(typescript@5.8.3) + version: 29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@30.2.0(@babel/core@7.27.7))(esbuild@0.25.12)(jest@30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 @@ -3160,6 +3698,9 @@ importers: ../../workspaces/mi/mi-extension: dependencies: + '@ai-sdk/anthropic': + specifier: ^2.0.35 + version: 2.0.53(zod@3.25.76) '@apidevtools/json-schema-ref-parser': specifier: 12.0.2 version: 12.0.2 @@ -3168,13 +3709,16 @@ importers: version: 7.27.7 '@babel/plugin-transform-typescript': specifier: ^7.27.1 - version: 7.28.0(@babel/core@7.27.7) + version: 7.28.5(@babel/core@7.27.7) '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 '@types/fs-extra': specifier: ~11.0.4 version: 11.0.4 + '@types/handlebars': + specifier: ^4.1.0 + version: 4.1.0 '@types/json-schema': specifier: 7.0.15 version: 7.0.15 @@ -3191,8 +3735,8 @@ importers: specifier: ~0.4.12 version: 0.4.14 '@vscode/vsce': - specifier: ~3.4.2 - version: 3.4.2 + specifier: ^3.7.0 + version: 3.7.1 '@wso2/font-wso2-vscode': specifier: workspace:* version: link:../../common-libs/font-wso2-vscode @@ -3214,9 +3758,12 @@ importers: adm-zip: specifier: ~0.5.16 version: 0.5.16 + ai: + specifier: ^5.0.76 + version: 5.0.106(zod@3.25.76) axios: specifier: ~1.12.0 - version: 1.12.0 + version: 1.12.2 copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -3234,7 +3781,10 @@ importers: version: 1.4.11 fs-extra: specifier: ~11.3.0 - version: 11.3.1 + version: 11.3.2 + handlebars: + specifier: ^4.7.8 + version: 4.7.8 json-schema: specifier: 0.4.0 version: 0.4.0 @@ -3244,6 +3794,9 @@ importers: jsonix: specifier: ~3.0.0 version: 3.0.0 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 lodash: specifier: ~4.17.21 version: 4.17.21 @@ -3255,16 +3808,16 @@ importers: version: 3.3.2 node-loader: specifier: ~2.1.0 - version: 2.1.0(webpack@5.101.0) + version: 2.1.0(webpack@5.103.0) portfinder: specifier: ^1.0.37 - version: 1.0.37 + version: 1.0.38 recast: specifier: ^0.23.11 version: 0.23.11 tmp: specifier: ~0.2.4 - version: 0.2.4 + version: 0.2.5 to-json-schema: specifier: 0.2.5 version: 0.2.5 @@ -3288,7 +3841,7 @@ importers: version: 1.51.0 vscode-extension-tester: specifier: ~8.14.1 - version: 8.14.1(mocha@11.7.1)(typescript@5.8.3) + version: 8.14.1(mocha@11.7.5)(typescript@5.8.3) vscode-languageclient: specifier: ^9.0.1 version: 9.0.1 @@ -3307,10 +3860,13 @@ importers: xstate: specifier: ^4.38.3 version: 4.38.3 + zod: + specifier: ^3.24.1 + version: 3.25.76 devDependencies: '@playwright/test': - specifier: ~1.52.0 - version: 1.52.0 + specifier: ~1.55.1 + version: 1.55.1 '@types/mocha': specifier: ^10.0.1 version: 10.0.10 @@ -3319,13 +3875,13 @@ importers: version: 22.15.21 '@types/vscode': specifier: ^1.100.0 - version: 1.102.0 + version: 1.106.1 '@typescript-eslint/eslint-plugin': specifier: ^8.32.1 - version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.32.1 - version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@vscode/test-electron': specifier: ^2.5.2 version: 2.5.2 @@ -3343,22 +3899,22 @@ importers: version: 1.0.1 eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) glob: specifier: ^11.0.2 - version: 11.0.3 + version: 11.1.0 mocha: specifier: ^11.4.0 - version: 11.7.1 + version: 11.7.5 playwright-core: - specifier: ~1.52.0 - version: 1.52.0 + specifier: ~1.55.1 + version: 1.55.1 rimraf: specifier: ~6.0.1 version: 6.0.1 ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) ts-morph: specifier: ^26.0.0 version: 26.0.0 @@ -3367,13 +3923,13 @@ importers: version: 5.8.3 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@4.10.0) + version: 5.103.0(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 - version: 4.10.0(webpack@5.101.0) + version: 4.10.0(webpack@5.103.0) yaml: specifier: ~2.8.0 - version: 2.8.1 + version: 2.8.2 ../../workspaces/mi/mi-rpc-client: dependencies: @@ -3407,13 +3963,13 @@ importers: version: 18.2.0 '@typescript-eslint/eslint-plugin': specifier: ^8.32.1 - version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.32.1 - version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) eslint: specifier: ^9.27.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 @@ -3445,14 +4001,14 @@ importers: specifier: ^4.7.0 version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@playwright/test': - specifier: 1.52.0 - version: 1.52.0 + specifier: 1.55.1 + version: 1.55.1 '@pmmmwh/react-refresh-webpack-plugin': specifier: ~0.6.0 - version: 0.6.1(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + version: 0.6.2(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0) '@tanstack/query-core': specifier: ^5.76.0 - version: 5.83.1 + version: 5.90.11 '@tanstack/react-query': specifier: 5.76.1 version: 5.76.1(react@18.2.0) @@ -3476,7 +4032,7 @@ importers: version: 1.57.5 '@uiw/react-codemirror': specifier: ~4.23.12 - version: 4.23.14(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 4.23.14(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@vscode/webview-ui-toolkit': specifier: ^1.4.0 version: 1.4.0(react@18.2.0) @@ -3551,7 +4107,7 @@ importers: version: 0.1.92(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-syntax-highlighter: specifier: ~15.6.1 - version: 15.6.1(react@18.2.0) + version: 15.6.6(react@18.2.0) swagger-ui-react: specifier: 5.21.0 version: 5.21.0(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -3576,19 +4132,19 @@ importers: version: 7.27.1(@babel/core@7.27.7) '@headlessui/react': specifier: ~2.2.4 - version: 2.2.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-actions': specifier: ~8.6.14 - version: 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) + version: 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-essentials': specifier: ~8.6.14 - version: 8.6.14(@types/react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) + version: 8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/addon-links': specifier: ~8.6.14 - version: 8.6.14(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) + version: 8.6.14(react@18.2.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/react-webpack5': specifier: ~8.6.14 - version: 8.6.14(@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) + version: 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) '@types/lodash': specifier: ~4.17.17 version: 4.17.17 @@ -3609,19 +4165,19 @@ importers: version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) sass-loader: specifier: ^16.0.5 - version: 16.0.5(sass@1.90.0)(webpack@5.101.0) + version: 16.0.6(sass@1.94.2)(webpack@5.103.0) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.101.0) + version: 5.0.0(webpack@5.103.0) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 @@ -3630,16 +4186,16 @@ importers: version: 3.17.5 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@5.1.4) + version: 5.103.0(webpack-cli@5.1.4) webpack-cli: specifier: ~5.1.4 - version: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0) + version: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.103.0) webpack-dev-server: specifier: ^5.2.1 - version: 5.2.2(webpack-cli@5.1.4)(webpack@5.101.0) + version: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) yaml: specifier: ~2.8.0 - version: 2.8.1 + version: 2.8.2 ../../workspaces/mi/syntax-tree: dependencies: @@ -3648,7 +4204,7 @@ importers: version: 22.15.35 eslint: specifier: ~9.27.0 - version: 9.27.0(jiti@2.5.1) + version: 9.27.0(jiti@2.6.1) jsonix: specifier: ~3.0.0 version: 3.0.0 @@ -3664,13 +4220,13 @@ importers: version: 11.2.0(size-limit@11.2.0) '@typescript-eslint/eslint-plugin': specifier: ~8.32.1 - version: 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + version: 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) eslint-plugin-react-hooks: specifier: ~5.2.0 - version: 5.2.0(eslint@9.27.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.27.0(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: ~4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1)) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1)) husky: specifier: ^9.1.7 version: 9.1.7 @@ -3710,7 +4266,7 @@ importers: dependencies: '@aws-sdk/client-s3': specifier: ^3.817.0 - version: 3.862.0 + version: 3.943.0 '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 @@ -3728,7 +4284,7 @@ importers: version: 1.0.0(tslib@2.8.1) '@vscode/iconv-lite-umd': specifier: ^0.7.0 - version: 0.7.0 + version: 0.7.1 '@vscode/webview-ui-toolkit': specifier: ^1.4.0 version: 1.4.0(react@19.1.0) @@ -3748,8 +4304,8 @@ importers: specifier: ^18.2.1 version: 18.7.0 js-yaml: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.1.1 + version: 4.1.1 jschardet: specifier: ^3.1.4 version: 3.1.4 @@ -3767,20 +4323,20 @@ importers: version: 5.0.0 yaml: specifier: ^2.8.0 - version: 2.8.1 + version: 2.8.2 zod: specifier: ^3.22.4 version: 3.25.76 zustand: specifier: ^5.0.5 - version: 5.0.7(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)) + version: 5.0.9(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)) devDependencies: '@biomejs/biome': specifier: ^1.9.4 version: 1.9.4 '@playwright/test': - specifier: 1.52.0 - version: 1.52.0 + specifier: 1.55.1 + version: 1.55.1 '@types/byline': specifier: ^4.2.36 version: 4.2.36 @@ -3795,22 +4351,22 @@ importers: version: 22.15.35 '@types/vscode': specifier: ^1.100.0 - version: 1.102.0 + version: 1.106.1 '@types/which': specifier: ^3.0.4 version: 3.0.4 '@vscode/vsce': - specifier: ^3.4.2 - version: 3.4.2 + specifier: ^3.7.0 + version: 3.7.1 '@wso2/playwright-vscode-tester': specifier: workspace:* version: link:../../common-libs/playwright-vscode-tester axios: specifier: ^1.9.0 - version: 1.12.0 + version: 1.12.2 copy-webpack-plugin: specifier: ^13.0.0 - version: 13.0.0(webpack@5.101.0) + version: 13.0.1(webpack@5.103.0) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -3819,25 +4375,25 @@ importers: version: 6.0.0 mocha: specifier: ^11.5.0 - version: 11.7.1 + version: 11.7.5 terser-webpack-plugin: specifier: ^5.3.14 - version: 5.3.14(webpack@5.101.0) + version: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) ts-loader: specifier: ~9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: ^5.8.3 version: 5.8.3 vscode-extension-tester: specifier: ^8.14.1 - version: 8.14.1(mocha@11.7.1)(typescript@5.8.3) + version: 8.14.1(mocha@11.7.5)(typescript@5.8.3) webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack@5.101.0) + version: 6.0.1(webpack@5.103.0) webpack-permissions-plugin: specifier: ^1.0.10 version: 1.0.10 @@ -3852,7 +4408,7 @@ importers: version: 0.8.2 '@headlessui/react': specifier: ^2.1.2 - version: 2.2.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@hookform/resolvers': specifier: 5.2.2 version: 5.2.2(react-hook-form@7.63.0(react@18.2.0)) @@ -3878,8 +4434,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 js-yaml: - specifier: ^4.1.0 - version: 4.1.0 + specifier: ^4.1.1 + version: 4.1.1 lodash.debounce: specifier: ~4.0.8 version: 4.0.8 @@ -3943,16 +4499,16 @@ importers: version: 1.57.5 autoprefixer: specifier: ^10.4.19 - version: 10.4.21(postcss@8.5.6) + version: 10.4.22(postcss@8.5.6) copyfiles: specifier: ~2.4.1 version: 2.4.1 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.101.0) + version: 7.1.2(webpack@5.103.0) file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.101.0) + version: 6.2.0(webpack@5.103.0) path: specifier: ^0.12.7 version: 0.12.7 @@ -3961,60 +4517,60 @@ importers: version: 8.5.6 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.5.6)(typescript@5.8.3)(webpack@5.101.0) + version: 8.2.0(postcss@8.5.6)(typescript@5.8.3)(webpack@5.103.0) sass-loader: specifier: ^16.0.5 - version: 16.0.5(sass@1.90.0)(webpack@5.101.0) + version: 16.0.6(sass@1.94.2)(webpack@5.103.0) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.101.0) + version: 5.0.0(webpack@5.103.0) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.101.0) + version: 4.0.0(webpack@5.103.0) tailwindcss: specifier: ^4.1.7 - version: 4.1.11 + version: 4.1.17 ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + version: 9.5.4(typescript@5.8.3)(webpack@5.103.0) typescript: specifier: 5.8.3 version: 5.8.3 webpack: specifier: ^5.94.0 - version: 5.101.0(webpack-cli@6.0.1) + version: 5.103.0(webpack-cli@6.0.1) webpack-cli: specifier: ^6.0.1 - version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) webpack-dev-server: specifier: ^5.2.1 - version: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + version: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) packages: - '@adobe/css-tools@4.4.3': - resolution: {integrity: sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==} + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@ai-sdk/amazon-bedrock@3.0.30': - resolution: {integrity: sha512-aF21FFpTusWAdXc70bqA8SIFnIfCokwrp4G8efMETIRXIH+N5QGd6UYEMbfMfwx4P9iN9v3oUwsHsRtr87TKPQ==} + '@ai-sdk/amazon-bedrock@3.0.65': + resolution: {integrity: sha512-E5KJv9OvLJitwPo6GnTgYdssTjEbwVW08TXqaQE2C6hfpg6XdwMXc7BJvQ97eXogGETAyFSS0irDYsbA90rB+g==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/anthropic@2.0.23': - resolution: {integrity: sha512-ZEBiiv1UhjGjBwUU63pFhLK5LCSlNDb1idY9K1oZHm5/Fda1cuTojf32tOp0opH0RPbPAN/F8fyyNjbU33n9Kw==} + '@ai-sdk/anthropic@2.0.53': + resolution: {integrity: sha512-ih7NV+OFSNWZCF+tYYD7ovvvM+gv7TRKQblpVohg2ipIwC9Y0TirzocJVREzZa/v9luxUwFbsPji++DUDWWxsg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@1.0.32': - resolution: {integrity: sha512-TQRIM63EI/ccJBc7RxeB8nq/CnGNnyl7eu5stWdLwL41stkV5skVeZJe0QRvFbaOrwCkgUVE0yrUqJi4tgDC1A==} + '@ai-sdk/gateway@2.0.18': + resolution: {integrity: sha512-sDQcW+6ck2m0pTIHW6BPHD7S125WD3qNkx/B8sEzJp/hurocmJ5Cni0ybExg6sQMGo+fr/GWOwpHF1cmCdg5rQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@3.0.10': - resolution: {integrity: sha512-T1gZ76gEIwffep6MWI0QNy9jgoybUHE7TRaHB5k54K8mF91ciGFlbtCGxDYhMH3nCRergKwYFIDeFF0hJSIQHQ==} + '@ai-sdk/provider-utils@3.0.18': + resolution: {integrity: sha512-ypv1xXMsgGcNKUP+hglKqtdDuMg68nWHucPPAhIENrbFAI+xCHiqPVN8Zllxyv1TNZwGWUghPxJXU+Mqps0YRQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -4031,6 +4587,10 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@apidevtools/json-schema-ref-parser@11.6.1': + resolution: {integrity: sha512-DxjgKBCoyReu4p5HMvpmgSOfRhhBcuf5V5soDDRgOTZMwsA4KSFzol1abFZgiCTE11L2kKGca5Md9GwDdXVBwQ==} + engines: {node: '>= 16'} + '@apidevtools/json-schema-ref-parser@12.0.2': resolution: {integrity: sha512-SoZWqQz4YMKdw4kEMfG5w6QAy+rntjsoAT1FtvZAnVEnCR4uy9YSuDBNoVAFHgzSz0dJbISLLCSrGR2Zd7bcvA==} engines: {node: '>= 16'} @@ -4062,123 +4622,127 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-s3@3.862.0': - resolution: {integrity: sha512-sPmqv2qKORtGRN51cRoHyTOK/SMejG1snXUQytuximeDPn5e/p6cCsYwOI8QuQNW+/7HbmosEz91lPcbClWXxg==} + '@aws-sdk/client-s3@3.943.0': + resolution: {integrity: sha512-UOX8/1mmNaRmEkxoIVP2+gxd5joPJqz+fygRqlIXON1cETLGoctinMwQs7qU8g8hghm76TU2G6ZV6sLH8cySMw==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.862.0': - resolution: {integrity: sha512-zHf7Bn22K09BdFgiGg6yWfy927djGhs58KB5qpqD2ie7u796TvetPH14p6UUAOGyk6aah+wR/WLFFoc+51uADA==} + '@aws-sdk/client-sso@3.943.0': + resolution: {integrity: sha512-kOTO2B8Ks2qX73CyKY8PAajtf5n39aMe2spoiOF5EkgSzGV7hZ/HONRDyADlyxwfsX39Q2F2SpPUaXzon32IGw==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.862.0': - resolution: {integrity: sha512-oJ5Au3QCAQmOmh7PD7dUxnPDxWsT9Z95XEOiJV027//11pwRSUMiNSvW8srPa3i7CZRNjz5QHX6O4KqX9PxNsQ==} + '@aws-sdk/core@3.943.0': + resolution: {integrity: sha512-8CBy2hI9ABF7RBVQuY1bgf/ue+WPmM/hl0adrXFlhnhkaQP0tFY5zhiy1Y+n7V+5f3/ORoHBmCCQmcHDDYJqJQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.862.0': - resolution: {integrity: sha512-/nafSJMuixcrCN1SmsOBIQ5m1fhr9ZnCxw3JZD9qJm3yNXhAshqAC+KcA3JGFnvdBVLhY/pUpdoQmxZmuFJItQ==} + '@aws-sdk/credential-provider-env@3.943.0': + resolution: {integrity: sha512-WnS5w9fK9CTuoZRVSIHLOMcI63oODg9qd1vXMYb7QGLGlfwUm4aG3hdu7i9XvYrpkQfE3dzwWLtXF4ZBuL1Tew==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.862.0': - resolution: {integrity: sha512-JnF3vH6GxvPuMGSI5QsmVlmWc0ebElEiJvUGByTMSr/BfzywZdJBKzPVqViwNqAW5cBWiZ/rpL+ekZ24Nb0Vow==} + '@aws-sdk/credential-provider-http@3.943.0': + resolution: {integrity: sha512-SA8bUcYDEACdhnhLpZNnWusBpdmj4Vl67Vxp3Zke7SvoWSYbuxa+tiDiC+c92Z4Yq6xNOuLPW912ZPb9/NsSkA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.862.0': - resolution: {integrity: sha512-LkpZ2S9DQCTHTPu1p0Qg5bM5DN/b/cEflW269RoeuYpiznxdV8r/mqYuhh/VPXQKkBZdiILe4/OODtg+vk4S0A==} + '@aws-sdk/credential-provider-ini@3.943.0': + resolution: {integrity: sha512-BcLDb8l4oVW+NkuqXMlO7TnM6lBOWW318ylf4FRED/ply5eaGxkQYqdGvHSqGSN5Rb3vr5Ek0xpzSjeYD7C8Kw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.862.0': - resolution: {integrity: sha512-4+X/LdEGPCBMlhn6MCcNJ5yJ8k+yDXeSO1l9X49NNQiG60SH/yObB3VvotcHWC+A3EEZx4dOw/ylcPt86e7Irg==} + '@aws-sdk/credential-provider-login@3.943.0': + resolution: {integrity: sha512-9iCOVkiRW+evxiJE94RqosCwRrzptAVPhRhGWv4osfYDhjNAvUMyrnZl3T1bjqCoKNcETRKEZIU3dqYHnUkcwQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.862.0': - resolution: {integrity: sha512-bR/eRCjRsilAuaUpNzTWWE4sUxJC4k571+4LLxE6Xo+0oYHfH+Ih00+sQRX06s4SqZZROdppissm3OOr5d26qA==} + '@aws-sdk/credential-provider-node@3.943.0': + resolution: {integrity: sha512-14eddaH/gjCWoLSAELVrFOQNyswUYwWphIt+PdsJ/FqVfP4ay2HsiZVEIYbQtmrKHaoLJhiZKwBQRjcqJDZG0w==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.862.0': - resolution: {integrity: sha512-1E1rTKWJAbzN/uiIXFPCVAS2PrZgy87O6BEO69404bI7o/iYHOfohfn66bdSqBnZ7Tn/hFJdCk6i23U3pibf5w==} + '@aws-sdk/credential-provider-process@3.943.0': + resolution: {integrity: sha512-GIY/vUkthL33AdjOJ8r9vOosKf/3X+X7LIiACzGxvZZrtoOiRq0LADppdiKIB48vTL63VvW+eRIOFAxE6UDekw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.862.0': - resolution: {integrity: sha512-Skv07eOS4usDf/Bna3FWKIo0/35qhxb22Z/OxrbNtx2Hxa/upp42S+Y6fA9qzgLqXMNYDZngKYwwMPtzrbkMAg==} + '@aws-sdk/credential-provider-sso@3.943.0': + resolution: {integrity: sha512-1c5G11syUrru3D9OO6Uk+ul5e2lX1adb+7zQNyluNaLPXP6Dina6Sy6DFGRLu7tM8+M7luYmbS3w63rpYpaL+A==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-bucket-endpoint@3.862.0': - resolution: {integrity: sha512-Wcsc7VPLjImQw+CP1/YkwyofMs9Ab6dVq96iS8p0zv0C6YTaMjvillkau4zFfrrrTshdzFWKptIFhKK8Zsei1g==} + '@aws-sdk/credential-provider-web-identity@3.943.0': + resolution: {integrity: sha512-VtyGKHxICSb4kKGuaqotxso8JVM8RjCS3UYdIMOxUt9TaFE/CZIfZKtjTr+IJ7M0P7t36wuSUb/jRLyNmGzUUA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-expect-continue@3.862.0': - resolution: {integrity: sha512-oG3AaVUJ+26p0ESU4INFn6MmqqiBFZGrebST66Or+YBhteed2rbbFl7mCfjtPWUFgquQlvT1UP19P3LjQKeKpw==} + '@aws-sdk/middleware-bucket-endpoint@3.936.0': + resolution: {integrity: sha512-XLSVVfAorUxZh6dzF+HTOp4R1B5EQcdpGcPliWr0KUj2jukgjZEcqbBmjyMF/p9bmyQsONX80iURF1HLAlW0qg==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.862.0': - resolution: {integrity: sha512-3PuTNJs43GmtNIfj4R/aNPGX6lfIq0gjfekVPUO/MnP/eV+RVgkCvEqWYyN6RZyOzrzsJydXbmydwLHAwMzxiw==} + '@aws-sdk/middleware-expect-continue@3.936.0': + resolution: {integrity: sha512-Eb4ELAC23bEQLJmUMYnPWcjD3FZIsmz2svDiXEcxRkQU9r7NRID7pM7C5NPH94wOfiCk0b2Y8rVyFXW0lGQwbA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.862.0': - resolution: {integrity: sha512-jDje8dCFeFHfuCAxMDXBs8hy8q9NCTlyK4ThyyfAj3U4Pixly2mmzY2u7b7AyGhWsjJNx8uhTjlYq5zkQPQCYw==} + '@aws-sdk/middleware-flexible-checksums@3.943.0': + resolution: {integrity: sha512-J2oYbAQXTFEezs5m2Vij6H3w71K1hZfCtb85AsR/2Ovp/FjABMnK+Es1g1edRx6KuMTc9HkL/iGU4e+ek+qCZw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-location-constraint@3.862.0': - resolution: {integrity: sha512-MnwLxCw7Cc9OngEH3SHFhrLlDI9WVxaBkp3oTsdY9JE7v8OE38wQ9vtjaRsynjwu0WRtrctSHbpd7h/QVvtjyA==} + '@aws-sdk/middleware-host-header@3.936.0': + resolution: {integrity: sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.862.0': - resolution: {integrity: sha512-N/bXSJznNBR/i7Ofmf9+gM6dx/SPBK09ZWLKsW5iQjqKxAKn/2DozlnE54uiEs1saHZWoNDRg69Ww4XYYSlG1Q==} + '@aws-sdk/middleware-location-constraint@3.936.0': + resolution: {integrity: sha512-SCMPenDtQMd9o5da9JzkHz838w3327iqXk3cbNnXWqnNRx6unyW8FL0DZ84gIY12kAyVHz5WEqlWuekc15ehfw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.862.0': - resolution: {integrity: sha512-KVoo3IOzEkTq97YKM4uxZcYFSNnMkhW/qj22csofLegZi5fk90ztUnnaeKfaEJHfHp/tm1Y3uSoOXH45s++kKQ==} + '@aws-sdk/middleware-logger@3.936.0': + resolution: {integrity: sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.862.0': - resolution: {integrity: sha512-rDRHxxZuY9E7py/OVYN1VQRAw0efEThvK5sZ3HfNNpL6Zk4HeOGtc6NtULSfeCeyHCVlJsdOVkIxJge2Ax5vSA==} + '@aws-sdk/middleware-recursion-detection@3.936.0': + resolution: {integrity: sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-ssec@3.862.0': - resolution: {integrity: sha512-72VtP7DZC8lYTE2L3Efx2BrD98oe9WTK8X6hmd3WTLkbIjvgWQWIdjgaFXBs8WevsXkewIctfyA3KEezvL5ggw==} + '@aws-sdk/middleware-sdk-s3@3.943.0': + resolution: {integrity: sha512-kd2mALfthU+RS9NsPS+qvznFcPnVgVx9mgmStWCPn5Qc5BTnx4UAtm+HPA+XZs+zxOopp+zmAfE4qxDHRVONBA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.862.0': - resolution: {integrity: sha512-7OOaGbAw7Kg1zoKO9wV8cA5NnJC+RYsocjmP3FZ0FiKa7gbmeQ6Cfheunzd1Re9fgelgL3OIRjqO5mSmOIhyhA==} + '@aws-sdk/middleware-ssec@3.936.0': + resolution: {integrity: sha512-/GLC9lZdVp05ozRik5KsuODR/N7j+W+2TbfdFL3iS+7un+gnP6hC8RDOZd6WhpZp7drXQ9guKiTAxkZQwzS8DA==} engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.862.0': - resolution: {integrity: sha512-fPrfXa+m9S0DA5l8+p4A9NFQ22lEHm/ezaUWWWs6F3/U49lR6yKhNAGji3LlIG7b7ZdTJ3smAcaxNHclJsoQIg==} + '@aws-sdk/middleware-user-agent@3.943.0': + resolution: {integrity: sha512-956n4kVEwFNXndXfhSAN5wO+KRgqiWEEY+ECwLvxmmO8uQ0NWOa8l6l65nTtyuiWzMX81c9BvlyNR5EgUeeUvA==} engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.862.0': - resolution: {integrity: sha512-VisR+/HuVFICrBPY+q9novEiE4b3mvDofWqyvmxHcWM7HumTz9ZQSuEtnlB/92GVM3KDUrR9EmBHNRrfXYZkcQ==} + '@aws-sdk/nested-clients@3.943.0': + resolution: {integrity: sha512-anFtB0p2FPuyUnbOULwGmKYqYKSq1M73c9uZ08jR/NCq6Trjq9cuF5TFTeHwjJyPRb4wMf2Qk859oiVfFqnQiw==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.862.0': - resolution: {integrity: sha512-ZAjrbXnu3yTxXMPiEVxDP/I8zfssrLQGgUi0NgJP6Cz/mOS/S/3hfOZrMown1jLhkTrzLpjNE8Q2n18VtRbScQ==} + '@aws-sdk/region-config-resolver@3.936.0': + resolution: {integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.862.0': - resolution: {integrity: sha512-p3u7aom3WQ7ArFByNbccRIkCssk5BB4IUX9oFQa2P0MOFCbkKFBLG7WMegRXhq5grOHmI4SRftEDDy3CcoTqSQ==} + '@aws-sdk/signature-v4-multi-region@3.943.0': + resolution: {integrity: sha512-KKvmxNQ/FZbM6ml6nKd8ltDulsUojsXnMJNgf1VHTcJEbADC/6mVWOq0+e9D0WP1qixUBEuMjlS2HqD5KoqwEg==} engines: {node: '>=18.0.0'} - '@aws-sdk/types@3.862.0': - resolution: {integrity: sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg==} + '@aws-sdk/token-providers@3.943.0': + resolution: {integrity: sha512-cRKyIzwfkS+XztXIFPoWORuaxlIswP+a83BJzelX4S1gUZ7FcXB4+lj9Jxjn8SbQhR4TPU3Owbpu+S7pd6IRbQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-arn-parser@3.804.0': - resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==} + '@aws-sdk/types@3.936.0': + resolution: {integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.862.0': - resolution: {integrity: sha512-eCZuScdE9MWWkHGM2BJxm726MCmWk/dlHjOKvkM0sN1zxBellBMw5JohNss1Z8/TUmnW2gb9XHTOiHuGjOdksA==} + '@aws-sdk/util-arn-parser@3.893.0': + resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-locate-window@3.804.0': - resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==} + '@aws-sdk/util-endpoints@3.936.0': + resolution: {integrity: sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-user-agent-browser@3.862.0': - resolution: {integrity: sha512-BmPTlm0r9/10MMr5ND9E92r8KMZbq5ltYXYpVcUbAsnB1RJ8ASJuRoLne5F7mB3YMx0FJoOTuSq7LdQM3LgW3Q==} + '@aws-sdk/util-locate-window@3.893.0': + resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} + engines: {node: '>=18.0.0'} - '@aws-sdk/util-user-agent-node@3.862.0': - resolution: {integrity: sha512-KtJdSoa1Vmwquy+zwiqRQjtsuKaHlVcZm8tsTchHbc6809/VeaC+ZZOqlil9IWOOyWNGIX8GTRwP9TEb8cT5Gw==} + '@aws-sdk/util-user-agent-browser@3.936.0': + resolution: {integrity: sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==} + + '@aws-sdk/util-user-agent-node@3.943.0': + resolution: {integrity: sha512-gn+ILprVRrgAgTIBk2TDsJLRClzIOdStQFeFTcN0qpL8Z4GBCqMFhw7O7X+MM55Stt5s4jAauQ/VvoqmCADnQg==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -4186,8 +4750,12 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.862.0': - resolution: {integrity: sha512-6Ed0kmC1NMbuFTEgNmamAUU1h5gShgxL1hBVLbEzUa3trX5aJBz1vU4bXaBTvOYUAnOHtiy1Ml4AMStd6hJnFA==} + '@aws-sdk/xml-builder@3.930.0': + resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==} + engines: {node: '>=18.0.0'} + + '@aws/lambda-invoke-store@0.2.1': + resolution: {integrity: sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==} engines: {node: '>=18.0.0'} '@azu/format-text@1.0.2': @@ -4200,52 +4768,52 @@ packages: resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} - '@azure/core-auth@1.10.0': - resolution: {integrity: sha512-88Djs5vBvGbHQHf5ZZcaoNHo6Y8BKZkt3cw2iuJIQzLEgH4Ox6Tm4hjFhbqOxyYsgIG/eJbFEHpxRIfEEWv5Ow==} + '@azure/core-auth@1.10.1': + resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} engines: {node: '>=20.0.0'} - '@azure/core-client@1.10.0': - resolution: {integrity: sha512-O4aP3CLFNodg8eTHXECaH3B3CjicfzkxVtnrfLkOq0XNP7TIECGfHpK/C6vADZkWP75wzmdBnsIA8ksuJMk18g==} + '@azure/core-client@1.10.1': + resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} engines: {node: '>=20.0.0'} - '@azure/core-rest-pipeline@1.22.0': - resolution: {integrity: sha512-OKHmb3/Kpm06HypvB3g6Q3zJuvyXcpxDpCS1PnU8OV6AJgSFaee/covXBcPbWc6XDDxtEPlbi3EMQ6nUiPaQtw==} + '@azure/core-rest-pipeline@1.22.2': + resolution: {integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==} engines: {node: '>=20.0.0'} - '@azure/core-tracing@1.3.0': - resolution: {integrity: sha512-+XvmZLLWPe67WXNZo9Oc9CrPj/Tm8QnHR92fFAFdnbzwNdCH1h+7UdpaQgRSBsMY+oW1kHXNUZQLdZ1gHX3ROw==} + '@azure/core-tracing@1.3.1': + resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} engines: {node: '>=20.0.0'} - '@azure/core-util@1.13.0': - resolution: {integrity: sha512-o0psW8QWQ58fq3i24Q1K2XfS/jYTxr7O1HRcyUE9bV9NttLU+kYOH82Ixj8DGlMTOWgxm1Sss2QAfKK5UkSPxw==} + '@azure/core-util@1.13.1': + resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} engines: {node: '>=20.0.0'} - '@azure/identity@4.11.1': - resolution: {integrity: sha512-0ZdsLRaOyLxtCYgyuqyWqGU5XQ9gGnjxgfoNTt1pvELGkkUFrMATABZFIq8gusM7N1qbqpVtwLOhk0d/3kacLg==} + '@azure/identity@4.13.0': + resolution: {integrity: sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==} engines: {node: '>=20.0.0'} '@azure/logger@1.3.0': resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} engines: {node: '>=20.0.0'} - '@azure/msal-browser@4.19.0': - resolution: {integrity: sha512-g6Ea+sJmK7l5NUyrPhtD7DNj/tZcsr6VTNNLNuYs8yPvL3HNiIpO/0kzXntF9AqJ/6L+uz9aHmoT1x+RNq6zBQ==} + '@azure/msal-browser@4.26.2': + resolution: {integrity: sha512-F2U1mEAFsYGC5xzo1KuWc/Sy3CRglU9Ql46cDUx8x/Y3KnAIr1QAq96cIKCk/ZfnVxlvprXWRjNKoEpgLJXLhg==} engines: {node: '>=0.8.0'} - '@azure/msal-common@15.10.0': - resolution: {integrity: sha512-+cGnma71NV3jzl6DdgdHsqriN4ZA7puBIzObSYCvcIVGMULGb2NrcOGV6IJxO06HoVRHFKijkxd9lcBvS063KQ==} + '@azure/msal-common@15.13.2': + resolution: {integrity: sha512-cNwUoCk3FF8VQ7Ln/MdcJVIv3sF73/OT86cRH81ECsydh7F4CNfIo2OAx6Cegtg8Yv75x4506wN4q+Emo6erOA==} engines: {node: '>=0.8.0'} - '@azure/msal-node@3.7.0': - resolution: {integrity: sha512-WsL11pT0hnoIr/4NCjG6uJswkmNA/9AgEre4mSQZS2e+ZPKUWwUdA5nCTnr4n1FMT1O5ezSEiJushnPW25Y+dA==} + '@azure/msal-node@3.8.3': + resolution: {integrity: sha512-Ul7A4gwmaHzYWj2Z5xBDly/W8JSC1vnKgJ898zPMZr0oSf1ah0tiL15sytjycU/PMhDZAlkWtEL1+MzNMU6uww==} engines: {node: '>=16'} '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.0': - resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} engines: {node: '>=6.9.0'} '@babel/core@7.12.9': @@ -4256,8 +4824,8 @@ packages: resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -4268,14 +4836,14 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.1': - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + '@babel/helper-create-class-features-plugin@7.28.5': + resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.27.1': - resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -4299,16 +4867,16 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -4344,29 +4912,29 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.27.1': - resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} + '@babel/helper-wrap-function@7.28.3': + resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.2': - resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': - resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -4389,8 +4957,8 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': - resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3': + resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -4493,6 +5061,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-flow@7.22.5': + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-flow@7.27.1': resolution: {integrity: sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==} engines: {node: '>=6.9.0'} @@ -4610,8 +5184,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.28.0': - resolution: {integrity: sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==} + '@babel/plugin-transform-block-scoping@7.28.5': + resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4622,14 +5196,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.27.1': - resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} + '@babel/plugin-transform-class-static-block@7.28.3': + resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.28.0': - resolution: {integrity: sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==} + '@babel/plugin-transform-classes@7.28.4': + resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4640,8 +5214,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.28.0': - resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4670,8 +5244,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.27.1': - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} + '@babel/plugin-transform-exponentiation-operator@7.28.5': + resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4712,8 +5286,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.27.1': - resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} + '@babel/plugin-transform-logical-assignment-operators@7.28.5': + resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4736,8 +5310,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.27.1': - resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} + '@babel/plugin-transform-modules-systemjs@7.28.5': + resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4772,8 +5346,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.28.0': - resolution: {integrity: sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==} + '@babel/plugin-transform-object-rest-spread@7.28.4': + resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4790,8 +5364,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.27.1': - resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} + '@babel/plugin-transform-optional-chaining@7.28.5': + resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4844,8 +5418,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.28.1': - resolution: {integrity: sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==} + '@babel/plugin-transform-regenerator@7.28.4': + resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4892,8 +5466,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.0': - resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} + '@babel/plugin-transform-typescript@7.28.5': + resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4945,43 +5519,49 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.22.15': + resolution: {integrity: sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.27.1': resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/register@7.27.1': - resolution: {integrity: sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ==} + '@babel/register@7.28.3': + resolution: {integrity: sha512-CieDOtd8u208eI49bYl4z1J22ySFw87IGwE+IswFEExH7e3rLgKb0WNQeumnacQ1+VoDJLYI5QFA3AJZuyZQfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime-corejs3@7.28.2': - resolution: {integrity: sha512-FVFaVs2/dZgD3Y9ZD+AKNKjyGKzwu0C54laAXWUXgLcVXcCX6YZ6GhK2cp7FogSN2OA0Fu+QT8dP3FUdo9ShSQ==} + '@babel/runtime-corejs3@7.28.4': + resolution: {integrity: sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.2': - resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} '@base2/pretty-print-object@1.0.1': resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} - '@bazel/runfiles@6.3.1': - resolution: {integrity: sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA==} + '@bazel/runfiles@6.5.0': + resolution: {integrity: sha512-RzahvqTkfpY2jsDxo8YItPX+/iZ6hbiikw1YhE0bA9EKBR5Og8Pa6FHn9PO9M0zaXRVsr0GFQLKbB/0rzy9SzA==} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -5043,26 +5623,101 @@ packages: cpu: [x64] os: [win32] + '@cacheable/memory@2.0.6': + resolution: {integrity: sha512-7e8SScMocHxcAb8YhtkbMhGG+EKLRIficb1F5sjvhSYsWTZGxvg4KIDp8kgxnV2PUJ3ddPe6J9QESjKvBWRDkg==} + + '@cacheable/utils@2.3.2': + resolution: {integrity: sha512-8kGE2P+HjfY8FglaOiW+y8qxcaQAfAhVML+i66XJR3YX5FtyDqn6Txctr3K2FrbxLKixRRYYBWMbuGciOhYNDg==} + '@cnakazawa/watch@1.0.4': resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} hasBin: true - '@codemirror/autocomplete@6.18.6': - resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} + '@codemirror/autocomplete@6.19.1': + resolution: {integrity: sha512-q6NenYkEy2fn9+JyjIxMWcNjzTL/IhwqfzOut1/G3PrIFkrbl4AL7Wkse5tLrQUUyqGoAKU5+Pi5jnnXxH5HGw==} + + '@codemirror/commands@6.10.0': + resolution: {integrity: sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==} + + '@codemirror/lang-angular@0.1.4': + resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} + + '@codemirror/lang-cpp@6.0.3': + resolution: {integrity: sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==} - '@codemirror/commands@6.8.1': - resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==} + '@codemirror/lang-css@6.3.1': + resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} + + '@codemirror/lang-go@6.0.1': + resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==} + + '@codemirror/lang-html@6.4.11': + resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==} + + '@codemirror/lang-java@6.0.2': + resolution: {integrity: sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==} + + '@codemirror/lang-javascript@6.2.4': + resolution: {integrity: sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==} + + '@codemirror/lang-jinja@6.0.0': + resolution: {integrity: sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==} + + '@codemirror/lang-json@6.0.2': + resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==} + + '@codemirror/lang-less@6.0.2': + resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} + + '@codemirror/lang-liquid@6.3.0': + resolution: {integrity: sha512-fY1YsUExcieXRTsCiwX/bQ9+PbCTA/Fumv7C7mTUZHoFkibfESnaXwpr2aKH6zZVwysEunsHHkaIpM/pl3xETQ==} + + '@codemirror/lang-markdown@6.5.0': + resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==} + + '@codemirror/lang-php@6.0.2': + resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==} + + '@codemirror/lang-python@6.2.1': + resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==} + + '@codemirror/lang-rust@6.0.2': + resolution: {integrity: sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==} + + '@codemirror/lang-sass@6.0.2': + resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} + + '@codemirror/lang-sql@6.10.0': + resolution: {integrity: sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==} + + '@codemirror/lang-vue@0.1.3': + resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==} + + '@codemirror/lang-wast@6.0.2': + resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} '@codemirror/lang-xml@6.1.0': resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} - '@codemirror/language@6.11.2': - resolution: {integrity: sha512-p44TsNArL4IVXDTbapUmEkAlvWs2CFQbcfc0ymDsis1kH2wh0gcY96AS29c/vp2d0y2Tquk1EDSaawpzilUiAw==} + '@codemirror/lang-yaml@6.1.2': + resolution: {integrity: sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==} + + '@codemirror/language-data@6.5.2': + resolution: {integrity: sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==} + + '@codemirror/language@6.11.3': + resolution: {integrity: sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==} + + '@codemirror/legacy-modes@6.5.2': + resolution: {integrity: sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==} '@codemirror/lint@6.8.5': resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} + '@codemirror/merge@6.11.2': + resolution: {integrity: sha512-NO5EJd2rLRbwVWLgMdhIntDIhfDtMOKYEZgqV5WnkNUS2oXOCVWLPjG/kgl/Jth2fGiOuG947bteqxP9nBXmMg==} + '@codemirror/search@6.5.11': resolution: {integrity: sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==} @@ -5072,8 +5727,20 @@ packages: '@codemirror/theme-one-dark@6.1.3': resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==} - '@codemirror/view@6.38.1': - resolution: {integrity: sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==} + '@codemirror/view@6.38.8': + resolution: {integrity: sha512-XcE9fcnkHCbWkjeKyi0lllwXmBLtyYb5dt89dJyx23I9+LSh5vZDIuk7OLG4VM1lgrXZQcY6cxyZyk5WVPRv/A==} + + '@codesandbox/nodebox@0.1.8': + resolution: {integrity: sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==} + + '@codesandbox/sandpack-client@2.19.8': + resolution: {integrity: sha512-CMV4nr1zgKzVpx4I3FYvGRM5YT0VaQhALMW9vy4wZRhEyWAtJITQIqZzrTGWqB1JvV7V72dVEUCUPLfYz5hgJQ==} + + '@codesandbox/sandpack-react@2.20.0': + resolution: {integrity: sha512-takd1YpW/PMQ6KPQfvseWLHWklJovGY8QYj8MtWnskGKbjOGJ6uZfyZbcJ6aCFLQMpNyjTqz9AKNbvhCOZ1TUQ==} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + react-dom: ^16.8.0 || ^17 || ^18 || ^19 '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -5083,12 +5750,20 @@ packages: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@csstools/css-parser-algorithms@3.0.5': resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} engines: {node: '>=18'} peerDependencies: '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-syntax-patches-for-csstree@1.0.20': + resolution: {integrity: sha512-8BHsjXfSciZxjmHQOuVdW2b8WLUPts9a+mfL13/PzEviufUEW2xnvQuOlKs9dRBHgRqJ53SF/DUoK9+MZk72oQ==} + engines: {node: '>=18'} + '@csstools/css-tokenizer@3.0.4': resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} @@ -5106,8 +5781,8 @@ packages: peerDependencies: postcss-selector-parser: ^7.0.0 - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + '@dabh/diagnostics@2.0.8': + resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} '@date-io/core@3.2.0': resolution: {integrity: sha512-hqwXvY8/YBsT9RwQITG868ZNb1MVFFkF7W1Ecv4P472j/ZWa7EFcgSmxy8PUElNVZfvhdvfv+a8j6NWJqOX5mA==} @@ -5128,8 +5803,17 @@ packages: resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} engines: {node: '>=14.17.0'} - '@dual-bundle/import-meta-resolve@4.1.0': - resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@dual-bundle/import-meta-resolve@4.2.1': + resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} + + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -5146,8 +5830,8 @@ packages: '@emotion/is-prop-valid@0.8.8': resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} - '@emotion/is-prop-valid@1.3.1': - resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + '@emotion/is-prop-valid@1.4.0': + resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} '@emotion/memoize@0.7.4': resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} @@ -5194,170 +5878,170 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.20.1': @@ -5376,16 +6060,16 @@ packages: resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@8.57.1': @@ -5400,12 +6084,12 @@ packages: resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.4': - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fal-works/esbuild-plugin-global-externals@2.1.2': @@ -5414,11 +6098,11 @@ packages: '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - '@floating-ui/dom@1.7.3': - resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - '@floating-ui/react-dom@2.1.5': - resolution: {integrity: sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==} + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -5432,23 +6116,23 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@formatjs/ecma402-abstract@2.3.4': - resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==} + '@formatjs/ecma402-abstract@2.3.6': + resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - '@formatjs/icu-messageformat-parser@2.11.2': - resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==} + '@formatjs/icu-messageformat-parser@2.11.4': + resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==} - '@formatjs/icu-skeleton-parser@1.8.14': - resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==} + '@formatjs/icu-skeleton-parser@1.8.16': + resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==} - '@formatjs/intl-localematcher@0.6.1': - resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} + '@formatjs/intl-localematcher@0.6.2': + resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} - '@formatjs/intl@3.1.6': - resolution: {integrity: sha512-tDkXnA4qpIFcDWac8CyVJq6oW8DR7W44QDUBsfXWIIJD/FYYen0QoH46W7XsVMFfPOVKkvbufjboZrrWbEfmww==} + '@formatjs/intl@3.1.8': + resolution: {integrity: sha512-LWXgwI5zTMatvR8w8kCNh/priDTOF/ZssokMBHJ7ZWXFoYLVOYo0EJERD9Eajv+xsfQO1QkuAt77KWQ1OI4mOQ==} peerDependencies: typescript: ^5.6.0 peerDependenciesMeta: @@ -5461,6 +6145,9 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@github/markdown-toolbar-element@2.2.3': + resolution: {integrity: sha512-AlquKGee+IWiAMYVB0xyHFZRMnu4n3X4HTvJHu79GiVJ1ojTukCWyxMlF5NMsecoLcBKsuBhx3QPv2vkE/zQ0A==} + '@graphiql/react@0.26.2': resolution: {integrity: sha512-aO4GWf/kJmqrjO+PORT/NPxwGvPGlg+mwye1v8xAlf8Q9j7P0hVtVBawYaSLUCCfJ/QnH7JAP+0VRamyooZZCw==} peerDependencies: @@ -5490,8 +6177,8 @@ packages: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 - '@headlessui/react@2.2.7': - resolution: {integrity: sha512-WKdTymY8Y49H8/gUc/lIyYK1M+/6dq0Iywh4zTZVAaiTDprRfioxSgD0wnXTQTBpjpGJuTL1NO/mqEvc//5SSg==} + '@headlessui/react@2.2.9': + resolution: {integrity: sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==} engines: {node: '>=10'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -5502,6 +6189,11 @@ packages: peerDependencies: react-hook-form: ^7.0.0 + '@hookform/resolvers@3.3.4': + resolution: {integrity: sha512-o5cgpGOuJYrd+iMKvkttOclgwRW86EsWJZZRC23prf0uU2i48Htq4PuT73AVb9ionFyZrwYEITuOFGF+BydEtQ==} + peerDependencies: + react-hook-form: ^7.0.0 + '@hookform/resolvers@5.0.1': resolution: {integrity: sha512-u/+Jp83luQNx9AdyW2fIPGY6Y7NG68eN2ZW8FOJYL+M0i4s49+refdJdOp/A9n9HFQtQs3HIDHQvX3ZET2o7YA==} peerDependencies: @@ -5516,8 +6208,8 @@ packages: resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/config-array@0.13.0': @@ -5533,10 +6225,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -5572,6 +6260,10 @@ packages: resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/console@30.2.0': + resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/core@25.5.4': resolution: {integrity: sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==} engines: {node: '>= 8.3'} @@ -5585,6 +6277,19 @@ packages: node-notifier: optional: true + '@jest/core@30.2.0': + resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/diff-sequences@30.0.1': + resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/environment@25.5.0': resolution: {integrity: sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==} engines: {node: '>= 8.3'} @@ -5593,14 +6298,26 @@ packages: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/environment@30.2.0': + resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect-utils@29.7.0': resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect-utils@30.2.0': + resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect@29.7.0': resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect@30.2.0': + resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/fake-timers@25.5.0': resolution: {integrity: sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==} engines: {node: '>= 8.3'} @@ -5609,6 +6326,14 @@ packages: resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/fake-timers@30.2.0': + resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/get-type@30.1.0': + resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/globals@25.5.2': resolution: {integrity: sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==} engines: {node: '>= 8.3'} @@ -5617,6 +6342,14 @@ packages: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/globals@30.2.0': + resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/pattern@30.0.1': + resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/reporters@25.5.1': resolution: {integrity: sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==} engines: {node: '>= 8.3'} @@ -5630,10 +6363,27 @@ packages: node-notifier: optional: true + '@jest/reporters@30.2.0': + resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/schemas@30.0.5': + resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/snapshot-utils@30.2.0': + resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/source-map@25.5.0': resolution: {integrity: sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==} engines: {node: '>= 8.3'} @@ -5642,6 +6392,10 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/source-map@30.0.1': + resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/test-result@25.5.0': resolution: {integrity: sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==} engines: {node: '>= 8.3'} @@ -5650,6 +6404,10 @@ packages: resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@30.2.0': + resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/test-sequencer@25.5.4': resolution: {integrity: sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==} engines: {node: '>= 8.3'} @@ -5658,6 +6416,10 @@ packages: resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@30.2.0': + resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/transform@25.5.1': resolution: {integrity: sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==} engines: {node: '>= 8.3'} @@ -5670,6 +6432,10 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@30.2.0': + resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/types@25.5.0': resolution: {integrity: sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==} engines: {node: '>= 8.3'} @@ -5682,30 +6448,37 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1': - resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==} + '@jest/types@30.2.0': + resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': + resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} peerDependencies: typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: typescript: optional: true - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.10': - resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -5716,8 +6489,8 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/buffers@1.0.0': - resolution: {integrity: sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==} + '@jsonjoy.com/buffers@1.2.1': + resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -5728,14 +6501,14 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/json-pack@1.8.0': - resolution: {integrity: sha512-paJGjyBTRzfgkqhIyer992g21aSKuu9h//zGS7aqm795roD6VYFf6iU9NYua1Bndmh/NRPkjtm9+hEPkK0yZSw==} + '@jsonjoy.com/json-pack@1.21.0': + resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/json-pointer@1.0.1': - resolution: {integrity: sha512-tJpwQfuBuxqZlyoJOSZcqf7OUmiYQ6MiPNmOv4KbZdXE/DdvBSSAwhos0zIlJU/AXxC8XpuO8p08bh2fIl+RKA==} + '@jsonjoy.com/json-pointer@1.0.2': + resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -5749,24 +6522,140 @@ packages: '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - '@keyv/serialize@1.1.0': - resolution: {integrity: sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==} + '@keyv/bigmap@1.3.0': + resolution: {integrity: sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.5.4 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@lezer/common@1.2.3': - resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} + '@lexical/clipboard@0.17.1': + resolution: {integrity: sha512-OVqnEfWX8XN5xxuMPo6BfgGKHREbz++D5V5ISOiml0Z8fV/TQkdgwqbBJcUdJHGRHWSUwdK7CWGs/VALvVvZyw==} + + '@lexical/code@0.17.1': + resolution: {integrity: sha512-ZspfTm6g6dN3nAb4G5bPp3SqxzdkB/bjGfa0uRKMU6/eBKtrMUgZsGxt0a8JRZ1eq2TZrQhx+l1ceRoLXii/bQ==} + + '@lexical/devtools-core@0.17.1': + resolution: {integrity: sha512-SzL1EX9Rt5GptIo87t6nDxAc9TtYtl6DyAPNz/sCltspdd69KQgs23sTRa26/tkNFCS1jziRN7vpN3mlnmm5wA==} + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/dragon@0.17.1': + resolution: {integrity: sha512-lhBRKP7RlhiVCLtF0qiNqmMhEO6cQB43sMe7d4bvuY1G2++oKY/XAJPg6QJZdXRrCGRQ6vZ26QRNhRPmCxL5Ng==} + + '@lexical/hashtag@0.17.1': + resolution: {integrity: sha512-XtP0BI8vEewAe7tzq9MC49UPUvuChuNJI/jqFp+ezZlt/RUq0BClQCOPuSlrTJhluvE2rWnUnOnVMk8ILRvggQ==} + + '@lexical/history@0.17.1': + resolution: {integrity: sha512-OU/ohajz4FXchUhghsWC7xeBPypFe50FCm5OePwo767G7P233IztgRKIng2pTT4zhCPW7S6Mfl53JoFHKehpWA==} + + '@lexical/html@0.17.1': + resolution: {integrity: sha512-yGG+K2DXl7Wn2DpNuZ0Y3uCHJgfHkJN3/MmnFb4jLnH1FoJJiuy7WJb/BRRh9H+6xBJ9v70iv+kttDJ0u1xp5w==} + + '@lexical/link@0.17.1': + resolution: {integrity: sha512-qFJEKBesZAtR8kfJfIVXRFXVw6dwcpmGCW7duJbtBRjdLjralOxrlVKyFhW9PEXGhi4Mdq2Ux16YnnDncpORdQ==} + + '@lexical/list@0.17.1': + resolution: {integrity: sha512-k9ZnmQuBvW+xVUtWJZwoGtiVG2cy+hxzkLGU4jTq1sqxRIoSeGcjvhFAK8JSEj4i21SgkB1FmkWXoYK5kbwtRA==} + + '@lexical/mark@0.17.1': + resolution: {integrity: sha512-V82SSRjvygmV+ZMwVpy5gwgr2ZDrJpl3TvEDO+G5I4SDSjbgvua8hO4dKryqiDVlooxQq9dsou0GrZ9Qtm6rYg==} + + '@lexical/markdown@0.17.1': + resolution: {integrity: sha512-uexR9snyT54jfQTrbr/GZAtzX+8Oyykr4p1HS0vCVL1KU5MDuP2PoyFfOv3rcfB2TASc+aYiINhU2gSXzwCHNg==} + + '@lexical/offset@0.17.1': + resolution: {integrity: sha512-fX0ZSIFWwUKAjxf6l21vyXFozJGExKWyWxA+EMuOloNAGotHnAInxep0Mt8t/xcvHs7luuyQUxEPw7YrTJP7aw==} + + '@lexical/overflow@0.17.1': + resolution: {integrity: sha512-oElVDq486R3rO2+Zz0EllXJGpW3tN0tfcH+joZ5h36+URKuNeKddqkJuDRvgSLOr9l8Jhtv3+/YKduPJVKMz6w==} + + '@lexical/plain-text@0.17.1': + resolution: {integrity: sha512-CSvi4j1a4ame0OAvOKUCCmn2XrNsWcST4lExGTa9Ei/VIh8IZ+a97h4Uby8T3lqOp10x+oiizYWzY30pb9QaBg==} + + '@lexical/react@0.17.1': + resolution: {integrity: sha512-DI4k25tO0E1WyozrjaLgKMOmLjOB7+39MT4eZN9brPlU7g+w0wzdGbTZUPgPmFGIKPK+MSLybCwAJCK97j8HzQ==} + peerDependencies: + react: '>=17.x' + react-dom: '>=17.x' + + '@lexical/rich-text@0.17.1': + resolution: {integrity: sha512-T3kvj4P1OpedX9jvxN3WN8NP1Khol6mCW2ScFIRNRz2dsXgyN00thH1Q1J/uyu7aKyGS7rzcY0rb1Pz1qFufqQ==} + + '@lexical/selection@0.17.1': + resolution: {integrity: sha512-qBKVn+lMV2YIoyRELNr1/QssXx/4c0id9NCB/BOuYlG8du5IjviVJquEF56NEv2t0GedDv4BpUwkhXT2QbNAxA==} + + '@lexical/table@0.17.1': + resolution: {integrity: sha512-2fUYPmxhyuMQX3MRvSsNaxbgvwGNJpHaKx1Ldc+PT2MvDZ6ALZkfsxbi0do54Q3i7dOon8/avRp4TuVaCnqvoA==} + + '@lexical/text@0.17.1': + resolution: {integrity: sha512-zD2pAGXaMfPpT8PeNrx3+n0+jGnQORHyn0NEBO+hnyacKfUq5z5sI6Gebsq5NwH789bRadmJM5LvX5w8fsuv6w==} + + '@lexical/utils@0.17.1': + resolution: {integrity: sha512-jCQER5EsvhLNxKH3qgcpdWj/necUb82Xjp8qWQ3c0tyL07hIRm2tDRA/s9mQmvcP855HEZSmGVmR5SKtkcEAVg==} + + '@lexical/yjs@0.17.1': + resolution: {integrity: sha512-9mn5PDtaH5uLMH6hQ59EAx5FkRzmJJFcVs3E6zSIbtgkG3UASR3CFEfgsLKTjl/GC5NnTGuMck+jXaupDVBhOg==} + peerDependencies: + yjs: '>=13.5.22' + + '@lezer/common@1.4.0': + resolution: {integrity: sha512-DVeMRoGrgn/k45oQNu189BoW4SZwgZFzJ1+1TV5j2NJ/KFC83oa/enRqZSGshyeMk5cPWMhsKs9nx+8o0unwGg==} + + '@lezer/cpp@1.1.3': + resolution: {integrity: sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w==} + + '@lezer/css@1.3.0': + resolution: {integrity: sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==} + + '@lezer/go@1.0.1': + resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} + + '@lezer/highlight@1.2.3': + resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} + + '@lezer/html@1.3.12': + resolution: {integrity: sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==} + + '@lezer/java@1.1.3': + resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==} - '@lezer/highlight@1.2.1': - resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} + '@lezer/javascript@1.5.4': + resolution: {integrity: sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==} - '@lezer/lr@1.4.2': - resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} + '@lezer/json@1.0.3': + resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} + + '@lezer/lr@1.4.4': + resolution: {integrity: sha512-LHL17Mq0OcFXm1pGQssuGTQFPPdxARjKM8f7GA5+sGtHi0K3R84YaSbmche0+RKWHnCsx9asEe5OWOI4FHfe4A==} + + '@lezer/markdown@1.6.0': + resolution: {integrity: sha512-AXb98u3M6BEzTnreBnGtQaF7xFTiMA92Dsy5tqEjpacbjRxDSFdN4bKJo9uvU4cEEOS7D2B9MT7kvDgOEIzJSw==} + + '@lezer/php@1.0.5': + resolution: {integrity: sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==} + + '@lezer/python@1.1.18': + resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==} + + '@lezer/rust@1.0.2': + resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} + + '@lezer/sass@1.1.0': + resolution: {integrity: sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==} '@lezer/xml@1.0.6': resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} + '@lezer/yaml@1.0.3': + resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==} + '@marijn/find-cluster-break@1.0.2': resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} @@ -5783,8 +6672,8 @@ packages: peerDependencies: react: '>=16' - '@mdx-js/react@3.1.0': - resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: '@types/react': '>=16' react: '>=16' @@ -5792,32 +6681,46 @@ packages: '@mdx-js/util@1.6.22': resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==} - '@microsoft/1ds-core-js@4.3.9': - resolution: {integrity: sha512-T8s5qROH7caBNiFrUpN8vgC6wg7QysVPryZKprgl3kLQQPpoMFM6ffIYvUWD74KM9fWWLU7vzFFNBWDBsrTyWg==} + '@mdxeditor/editor@3.14.0': + resolution: {integrity: sha512-5upWjI89i+UWhIMf6zu4jiiw1KvjAINVsXQcE4RbJ/zYDj/F2bamAAt35wW5Xrd9nMM8ogrwUS9OKnpFR2AeOA==} + engines: {node: '>=16'} + peerDependencies: + react: '>= 18 || >= 19' + react-dom: '>= 18 || >= 19' + + '@mdxeditor/gurx@1.2.4': + resolution: {integrity: sha512-9ZykIFYhKaXaaSPCs1cuI+FvYDegJjbKwmA4ASE/zY+hJY6EYqvoye4esiO85CjhOw9aoD/izD/CU78/egVqmg==} + engines: {node: '>=16'} + peerDependencies: + react: '>= 18 || >= 19' + react-dom: '>= 18 || >= 19' + + '@microsoft/1ds-core-js@4.3.10': + resolution: {integrity: sha512-5fSZmkGwWkH+mrIA5M1GYPZdPM+SjXwCCl2Am7VhFoVwOBJNhRnwvIpAdzw6sFjiebN/rz+/YH0NdxztGZSa9Q==} - '@microsoft/1ds-post-js@4.3.9': - resolution: {integrity: sha512-BvxI4CW8Ws+gfXKy+Y/9pmEXp88iU1GYVjkUfqXP7La59VHARTumlG5iIgMVvaifOrvSW7G6knvQM++0tEfMBQ==} + '@microsoft/1ds-post-js@4.3.10': + resolution: {integrity: sha512-VSLjc9cT+Y+eTiSfYltJHJCejn8oYr0E6Pq2BMhOEO7F6IyLGYIxzKKvo78ze9x+iHX7KPTATcZ+PFgjGXuNqg==} - '@microsoft/applicationinsights-channel-js@3.3.9': - resolution: {integrity: sha512-/yEgSe6vT2ycQJkXu6VF04TB5XBurk46ECV7uo6KkNhWyDEctAk1VDWB7EqXYdwLhKMbNOYX1pvz7fj43fGNqg==} + '@microsoft/applicationinsights-channel-js@3.3.10': + resolution: {integrity: sha512-iolFLz1ocWAzIQqHIEjjov3gNTPkgFQ4ArHnBcJEYoffOGWlJt6copaevS5YPI5rHzmbySsengZ8cLJJBBrXzQ==} peerDependencies: tslib: '>= 1.0.0' - '@microsoft/applicationinsights-common@3.3.9': - resolution: {integrity: sha512-IgruOuDBxmBK9jYo7SqLJG7Z9OwmAmlvHET49srpN6pqQlEjRpjD1nfA3Ps4RSEbF89a/ad2phQaBp8jvm122g==} + '@microsoft/applicationinsights-common@3.3.10': + resolution: {integrity: sha512-RVIenPIvNgZCbjJdALvLM4rNHgAFuHI7faFzHCgnI6S2WCUNGHeXlQTs9EUUrL+n2TPp9/cd0KKMILU5VVyYiA==} peerDependencies: tslib: '>= 1.0.0' - '@microsoft/applicationinsights-core-js@3.3.9': - resolution: {integrity: sha512-xliiE9H09xCycndlua4QjajN8q5k/ET6VCv+e0Jjodxr9+cmoOP/6QY9dun9ptokuwR8TK0qOaIJ8z4fgslVSA==} + '@microsoft/applicationinsights-core-js@3.3.10': + resolution: {integrity: sha512-5yKeyassZTq2l+SAO4npu6LPnbS++UD+M+Ghjm9uRzoBwD8tumFx0/F8AkSVqbniSREd+ztH/2q2foewa2RZyg==} peerDependencies: tslib: '>= 1.0.0' '@microsoft/applicationinsights-shims@3.0.1': resolution: {integrity: sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==} - '@microsoft/applicationinsights-web-basic@3.3.9': - resolution: {integrity: sha512-8tLaAgsCpWjoaxit546RqeuECnHQPBLnOZhzTYG76oPG1ku7dNXaRNieuZLbO+XmAtg/oxntKLAVoPND8NRgcA==} + '@microsoft/applicationinsights-web-basic@3.3.10': + resolution: {integrity: sha512-AZib5DAT3NU0VT0nLWEwXrnoMDDgZ/5S4dso01CNU5ELNxLdg+1fvchstlVdMy4FrAnxzs8Wf/GIQNFYOVgpAw==} peerDependencies: tslib: '>= 1.0.0' @@ -5838,12 +6741,34 @@ packages: '@microsoft/fast-web-utilities@5.4.1': resolution: {integrity: sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==} - '@modelcontextprotocol/sdk@1.17.1': - resolution: {integrity: sha512-CPle1OQehbWqd25La9Ack5B07StKIxh4+Bf19qnpZKJC1oI22Y0czZHbifjw1UoczIfKBwBDAp/dFxvHG13B5A==} + '@modelcontextprotocol/inspector-cli@0.17.2': + resolution: {integrity: sha512-xXaqZYWJz77xvmfAVlYbvz2/xw9OaalFHq0n5A8PlmZvmhi6akQocIE7ZYaoEBpLbWRSwIZWfsidnfoKb6dO2A==} + hasBin: true + + '@modelcontextprotocol/inspector-client@0.17.2': + resolution: {integrity: sha512-llC96yU8iMjG7ny2gpjhm+ARQqBRZWeKBCxW+nBErAE43jBqd5DhGuI2abrt499Gd3ByNOImz+Z5mb8YWjRiJA==} + hasBin: true + + '@modelcontextprotocol/inspector-server@0.17.2': + resolution: {integrity: sha512-+logjB5XXK+8aE+eDl8cLnwY0UhOUh19vo6tg5rFVmLXNQPtxTFyWybcQfgP/cHp76+r5+EMxIpydDYEoasTvg==} + hasBin: true + + '@modelcontextprotocol/inspector@0.17.2': + resolution: {integrity: sha512-ADWwZtbvecKCbLCR7L0Uaa2mPKFDJcTrc9xcE9pdN8gL/jFfzOMrgdNsKt+qBknzMeSQ6mJT+UguJbnQs8n13Q==} + engines: {node: '>=22.7.5'} + hasBin: true + + '@modelcontextprotocol/sdk@1.24.0': + resolution: {integrity: sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==} engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true - '@monaco-editor/loader@1.5.0': - resolution: {integrity: sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==} + '@monaco-editor/loader@1.7.0': + resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} '@monaco-editor/react@4.7.0': resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} @@ -5878,6 +6803,9 @@ packages: resolution: {integrity: sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==} engines: {node: '>=12'} + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@ndelangen/get-tarball@3.0.9': resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} @@ -5936,6 +6864,9 @@ packages: resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} engines: {node: '>=8.0'} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -6026,8 +6957,12 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.52.0': - resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@playwright/test@1.55.1': + resolution: {integrity: sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==} engines: {node: '>=18'} hasBin: true @@ -6057,14 +6992,14 @@ packages: webpack-plugin-serve: optional: true - '@pmmmwh/react-refresh-webpack-plugin@0.6.1': - resolution: {integrity: sha512-95DXXJxNkpYu+sqmpDp7vbw9JCyiNpHuCsvuMuOgVFrKQlwEIn9Y1+NNIQJq+zFL+eWyxw6htthB5CtdwJupNA==} + '@pmmmwh/react-refresh-webpack-plugin@0.6.2': + resolution: {integrity: sha512-IhIAD5n4XvGHuL9nAgWfsBR0TdxtjrUWETYKCBHxauYXEv+b+ctEbs9neEgPC7Ecgzv4bpZTBwesAoGDeFymzA==} engines: {node: '>=18.12'} peerDependencies: '@types/webpack': 5.x react-refresh: '>=0.10.0 <1.0.0' sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <5.0.0' + type-fest: '>=0.17.0 <6.0.0' webpack: ^5.0.0 webpack-dev-server: ^4.8.0 || 5.x webpack-hot-middleware: 2.x @@ -6137,14 +7072,50 @@ packages: '@projectstorm/react-diagrams@7.0.4': resolution: {integrity: sha512-GJLpo3zhJzjcmx3PfztNDTS7jpePj9TPjXV2CgJmCDZAPHDU8q/f4AyXoJfqvoWlmVnjrzQgtcOU2KbUlNu3dQ==} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@radix-ui/colors@3.0.0': + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} + '@radix-ui/number@1.0.1': resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - '@radix-ui/primitive@1.1.2': - resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} '@radix-ui/react-arrow@1.0.3': resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} @@ -6172,6 +7143,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-checkbox@1.3.3': + resolution: {integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.0.3': resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: @@ -6234,8 +7218,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.14': - resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6278,8 +7262,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dismissable-layer@1.1.10': - resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6291,8 +7275,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dropdown-menu@2.1.15': - resolution: {integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==} + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6313,8 +7297,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-guards@1.1.2': - resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -6348,6 +7332,11 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc + '@radix-ui/react-id@1.0.1': resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: @@ -6366,8 +7355,34 @@ packages: '@types/react': optional: true - '@radix-ui/react-menu@2.1.15': - resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} + '@radix-ui/react-label@2.1.8': + resolution: {integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6392,8 +7407,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.7': - resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6431,8 +7446,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.4': - resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6470,8 +7485,21 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.10': - resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} + '@radix-ui/react-primitive@2.1.4': + resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6496,6 +7524,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-select@2.2.6': + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-separator@1.1.7': resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==} peerDependencies: @@ -6527,8 +7568,56 @@ packages: '@types/react': optional: true - '@radix-ui/react-toggle-group@1.1.10': - resolution: {integrity: sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==} + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toast@1.2.15': + resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle-group@1.1.11': + resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6540,8 +7629,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toggle@1.1.9': - resolution: {integrity: sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==} + '@radix-ui/react-toggle@1.1.10': + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6553,8 +7642,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toolbar@1.1.10': - resolution: {integrity: sha512-jiwQsduEL++M4YBIurjSa+voD86OIytCod0/dbIxFZDLD8NfO1//keXYMfsW8BPcfqwoNjt+y06XcJqAb4KR7A==} + '@radix-ui/react-toolbar@1.1.11': + resolution: {integrity: sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6566,8 +7655,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.2.7': - resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -6669,6 +7758,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.0.1': resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: @@ -6731,20 +7829,33 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.2.4': + resolution: {integrity: sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.0.1': resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - '@react-aria/focus@3.21.0': - resolution: {integrity: sha512-7NEGtTPsBy52EZ/ToVKCu0HSelE3kq9qeis+2eEq90XSuJOMaDHUQrA7RC2Y89tlEwQB31bud/kKRi9Qme1dkA==} + '@react-aria/focus@3.21.2': + resolution: {integrity: sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/interactions@3.25.4': - resolution: {integrity: sha512-HBQMxgUPHrW8V63u9uGgBymkMfj6vdWbB0GgUJY49K9mBKMsypcHeWkWM6+bF7kxRO728/IK8bWDV6whDbqjHg==} + '@react-aria/interactions@3.25.6': + resolution: {integrity: sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6755,8 +7866,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/utils@3.30.0': - resolution: {integrity: sha512-ydA6y5G1+gbem3Va2nczj/0G0W7/jUVo/cbN10WA5IizzWIwMP5qhFr7macgbKfHMkZ+YZC3oXnt2NNre5odKw==} + '@react-aria/utils@3.31.0': + resolution: {integrity: sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -6770,6 +7881,16 @@ packages: '@react-dnd/shallowequal@4.0.2': resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} + '@react-hook/intersection-observer@3.1.2': + resolution: {integrity: sha512-mWU3BMkmmzyYMSuhO9wu3eJVP21N8TcgYm9bZnTrMwuM818bEk+0NRM3hP+c/TqA9Ln5C7qE53p1H0QMtzYdvQ==} + peerDependencies: + react: '>=16.8' + + '@react-hook/passive-layout-effect@1.2.1': + resolution: {integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==} + peerDependencies: + react: '>=16.8' + '@react-stately/flags@3.1.2': resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} @@ -6778,19 +7899,19 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/shared@3.31.0': - resolution: {integrity: sha512-ua5U6V66gDcbLZe4P2QeyNgPp4YWD1ymGA6j3n+s8CGExtrCPe64v+g4mvpT8Bnb985R96e4zFT61+m0YCwqMg==} + '@react-types/shared@3.32.1': + resolution: {integrity: sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@redhat-developer/locators@1.15.0': - resolution: {integrity: sha512-xxkCoCQsqiA7IVR5kdNfU3MnuT9QSYDeu0KXrwW59FMCcZpUftz6uiQkqgbB212ASlS3mxVhyYpqJan4zr+XtA==} + '@redhat-developer/locators@1.17.0': + resolution: {integrity: sha512-CPDrTJfrA5lxXPd64RHuntq+foRorMIOQAN0tlaQQD5wX0X2xlCOf324TVWS1hmTiYHtA8VfFTJNOjMQYvu0Mw==} peerDependencies: '@redhat-developer/page-objects': '>=1.0.0' selenium-webdriver: '>=4.6.1' - '@redhat-developer/page-objects@1.15.0': - resolution: {integrity: sha512-Mfr7rVcFB+J16VzLbbqLF9Yo1W7G2bgjkVv0vPUrlkz1dgYdAjZpaQpjs6dVlRO5Uopt11loYu4SS+wnxPopMw==} + '@redhat-developer/page-objects@1.17.0': + resolution: {integrity: sha512-KytdvW8iHyECmt7rLf/MWdrtHmUi/SIkgWowjscIx0+U6sgXW7hHZ/5/gWP5HGX0Q5K1AA67veC75x2eZosN2g==} peerDependencies: selenium-webdriver: '>=4.6.1' typescript: '>=4.6.2' @@ -6812,8 +7933,8 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 - '@rollup/plugin-commonjs@28.0.6': - resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==} + '@rollup/plugin-commonjs@28.0.9': + resolution: {integrity: sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -6835,8 +7956,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@16.0.1': - resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} + '@rollup/plugin-node-resolve@16.0.3': + resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -6865,8 +7986,8 @@ packages: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -6874,103 +7995,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.46.2': - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.2': - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.2': - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.2': - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.2': - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.2': - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.2': - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.2': - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.2': - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.2': - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.2': - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.2': - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.2': - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.2': - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.2': - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.2': - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.2': - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.2': - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} cpu: [x64] os: [win32] @@ -6983,50 +8114,50 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@secretlint/config-creator@9.3.4': - resolution: {integrity: sha512-GRMYfHJ+rewwB26CC3USVObqSQ/mDLXzXcUMJw/wJisPr3HDZmdsYlcsNnaAcGN+EZmvqSDkgSibQm1hyZpzbg==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/config-creator@10.2.2': + resolution: {integrity: sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==} + engines: {node: '>=20.0.0'} - '@secretlint/config-loader@9.3.4': - resolution: {integrity: sha512-sy+yWDWh4cbAbpQYLiO39DjwNGEK1EUhTqNamLLBo163BdJP10FIWhqpe8mtGQBSBXRtxr8Hg/gc3Xe4meIoww==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/config-loader@10.2.2': + resolution: {integrity: sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==} + engines: {node: '>=20.0.0'} - '@secretlint/core@9.3.4': - resolution: {integrity: sha512-ErIVHI6CJd191qdNKuMkH3bZQo9mWJsrSg++bQx64o0WFuG5nPvkYrDK0p/lebf+iQuOnzvl5HrZU6GU9a6o+Q==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/core@10.2.2': + resolution: {integrity: sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==} + engines: {node: '>=20.0.0'} - '@secretlint/formatter@9.3.4': - resolution: {integrity: sha512-ARpoBOKz6WP3ocLITCFkR1/Lj636ugpBknylhlpc45r5aLdvmyvWAJqodlw5zmUCfgD6JXeAMf3Hi60aAiuqWQ==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/formatter@10.2.2': + resolution: {integrity: sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==} + engines: {node: '>=20.0.0'} - '@secretlint/node@9.3.4': - resolution: {integrity: sha512-S0u8i+CnPmyAKtuccgot9L5cmw6DqJc0F+b3hhVIALd8kkeLt3RIXOOej15tU7N0V1ISph90Gz92V72ovsprgQ==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/node@10.2.2': + resolution: {integrity: sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==} + engines: {node: '>=20.0.0'} - '@secretlint/profiler@9.3.4': - resolution: {integrity: sha512-99WmaHd4dClNIm5BFsG++E6frNIZ3qVwg6s804Ql/M19pDmtZOoVCl4/UuzWpwNniBqLIgn9rHQZ/iGlIW3wyw==} + '@secretlint/profiler@10.2.2': + resolution: {integrity: sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==} - '@secretlint/resolver@9.3.4': - resolution: {integrity: sha512-L1lIrcjzqcspPzZttmOvMmOFDpJTYFyRBONg94TZBWrpv4x0w5G2SYR+K7EE1SbYQAiPxw1amoXT1YRP8cZF2A==} + '@secretlint/resolver@10.2.2': + resolution: {integrity: sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==} - '@secretlint/secretlint-formatter-sarif@9.3.4': - resolution: {integrity: sha512-IpAl5gzKwpTRqoivKOTJB89l6b7uvBwjSNKzJb3oIGD9Jg3vXcQunSntvLv5XGynYtdi1NhANfEpbhavlmMSyA==} + '@secretlint/secretlint-formatter-sarif@10.2.2': + resolution: {integrity: sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==} - '@secretlint/secretlint-rule-no-dotenv@9.3.4': - resolution: {integrity: sha512-lMSVwTrJiZ/zL9VIzpT7tMcb0ClI6u4cyJo2YKGSbuJErJG1zB4gQKtjIwCSt7px5JF6U+aFtpb9M8+s40WWCQ==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/secretlint-rule-no-dotenv@10.2.2': + resolution: {integrity: sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==} + engines: {node: '>=20.0.0'} - '@secretlint/secretlint-rule-preset-recommend@9.3.4': - resolution: {integrity: sha512-RvzrLNN2A0B2bYQgRSRjh2dkdaIDuhXjj4SO5bElK1iBtJNiD6VBTxSSY1P3hXYaBeva7MEF+q1PZ3cCL8XYOA==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/secretlint-rule-preset-recommend@10.2.2': + resolution: {integrity: sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==} + engines: {node: '>=20.0.0'} - '@secretlint/source-creator@9.3.4': - resolution: {integrity: sha512-I9ZA1gm9HJNaAhZiQdInY9VM04VTAGDV4bappVbEJzMUDnK/LTbYqfQ88RPqgCGCqa6ee8c0/j5Bn7ypweouIw==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/source-creator@10.2.2': + resolution: {integrity: sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==} + engines: {node: '>=20.0.0'} - '@secretlint/types@9.3.4': - resolution: {integrity: sha512-z9rdKHNeL4xa48+367RQJVw1d7/Js9HIQ+gTs/angzteM9osfgs59ad3iwVRhCGYbeUoUUDe2yxJG2ylYLaH3Q==} - engines: {node: ^14.13.1 || >=16.0.0} + '@secretlint/types@10.2.2': + resolution: {integrity: sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==} + engines: {node: '>=20.0.0'} '@sentry/cli@1.77.3': resolution: {integrity: sha512-c3eDqcDRmy4TFz2bFU5Y6QatlpoBPPa8cxBooaS4aMQpnIdLYPF1xhyyiW0LQlDUNc3rRjNF7oN5qKoaRoMTQQ==} @@ -7049,18 +8180,25 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sinclair/typebox@0.34.41': + resolution: {integrity: sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==} + '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - '@sindresorhus/is@7.0.2': - resolution: {integrity: sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==} + '@sindresorhus/is@7.1.1': + resolution: {integrity: sha512-rO92VvpgMc3kfiTjGT52LEtJ8Yc5kCWhZjLQ3LwlA4pSgPpQO7bVpYXParOD8Jwf+cVQECJo3yP/4I8aZtUQTQ==} engines: {node: '>=18'} '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@sinonjs/commons@1.8.6': resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} @@ -7070,6 +8208,9 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@sinonjs/fake-timers@13.0.5': + resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + '@size-limit/esbuild@11.2.0': resolution: {integrity: sha512-vSg9H0WxGQPRzDnBzeDyD9XT0Zdq0L+AI3+77/JhxznbSCMJMMr8ndaWVQRhOsixl97N0oD4pRFw2+R1Lcvi6A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -7087,224 +8228,234 @@ packages: peerDependencies: size-limit: 11.2.0 - '@smithy/abort-controller@4.0.5': - resolution: {integrity: sha512-jcrqdTQurIrBbUm4W2YdLVMQDoL0sA9DTxYd2s+R/y+2U9NLOP7Xf/YqfSg1FZhlZIYEnvk2mwbyvIfdLEPo8g==} + '@smithy/abort-controller@4.2.5': + resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader-native@4.0.0': - resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} + '@smithy/chunked-blob-reader-native@4.2.1': + resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==} engines: {node: '>=18.0.0'} - '@smithy/chunked-blob-reader@5.0.0': - resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} + '@smithy/chunked-blob-reader@5.2.0': + resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.1.5': - resolution: {integrity: sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw==} + '@smithy/config-resolver@4.4.3': + resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==} engines: {node: '>=18.0.0'} - '@smithy/core@3.8.0': - resolution: {integrity: sha512-EYqsIYJmkR1VhVE9pccnk353xhs+lB6btdutJEtsp7R055haMJp2yE16eSxw8fv+G0WUY6vqxyYOP8kOqawxYQ==} + '@smithy/core@3.18.6': + resolution: {integrity: sha512-8Q/ugWqfDUEU1Exw71+DoOzlONJ2Cn9QA8VeeDzLLjzO/qruh9UKFzbszy4jXcIYgGofxYiT0t1TT6+CT/GupQ==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.0.7': - resolution: {integrity: sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw==} + '@smithy/credential-provider-imds@4.2.5': + resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-codec@4.0.5': - resolution: {integrity: sha512-miEUN+nz2UTNoRYRhRqVTJCx7jMeILdAurStT2XoS+mhokkmz1xAPp95DFW9Gxt4iF2VBqpeF9HbTQ3kY1viOA==} + '@smithy/eventstream-codec@4.2.5': + resolution: {integrity: sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-browser@4.0.5': - resolution: {integrity: sha512-LCUQUVTbM6HFKzImYlSB9w4xafZmpdmZsOh9rIl7riPC3osCgGFVP+wwvYVw6pXda9PPT9TcEZxaq3XE81EdJQ==} + '@smithy/eventstream-serde-browser@4.2.5': + resolution: {integrity: sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-config-resolver@4.1.3': - resolution: {integrity: sha512-yTTzw2jZjn/MbHu1pURbHdpjGbCuMHWncNBpJnQAPxOVnFUAbSIUSwafiphVDjNV93TdBJWmeVAds7yl5QCkcA==} + '@smithy/eventstream-serde-config-resolver@4.3.5': + resolution: {integrity: sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-node@4.0.5': - resolution: {integrity: sha512-lGS10urI4CNzz6YlTe5EYG0YOpsSp3ra8MXyco4aqSkQDuyZPIw2hcaxDU82OUVtK7UY9hrSvgWtpsW5D4rb4g==} + '@smithy/eventstream-serde-node@4.2.5': + resolution: {integrity: sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==} engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-universal@4.0.5': - resolution: {integrity: sha512-JFnmu4SU36YYw3DIBVao3FsJh4Uw65vVDIqlWT4LzR6gXA0F3KP0IXFKKJrhaVzCBhAuMsrUUaT5I+/4ZhF7aw==} + '@smithy/eventstream-serde-universal@4.2.5': + resolution: {integrity: sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.1.1': - resolution: {integrity: sha512-61WjM0PWmZJR+SnmzaKI7t7G0UkkNFboDpzIdzSoy7TByUzlxo18Qlh9s71qug4AY4hlH/CwXdubMtkcNEb/sQ==} + '@smithy/fetch-http-handler@5.3.6': + resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==} engines: {node: '>=18.0.0'} - '@smithy/hash-blob-browser@4.0.5': - resolution: {integrity: sha512-F7MmCd3FH/Q2edhcKd+qulWkwfChHbc9nhguBlVjSUE6hVHhec3q6uPQ+0u69S6ppvLtR3eStfCuEKMXBXhvvA==} + '@smithy/hash-blob-browser@4.2.6': + resolution: {integrity: sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.0.5': - resolution: {integrity: sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ==} + '@smithy/hash-node@4.2.5': + resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==} engines: {node: '>=18.0.0'} - '@smithy/hash-stream-node@4.0.5': - resolution: {integrity: sha512-IJuDS3+VfWB67UC0GU0uYBG/TA30w+PlOaSo0GPm9UHS88A6rCP6uZxNjNYiyRtOcjv7TXn/60cW8ox1yuZsLg==} + '@smithy/hash-stream-node@4.2.5': + resolution: {integrity: sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.0.5': - resolution: {integrity: sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow==} + '@smithy/invalid-dependency@4.2.5': + resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + '@smithy/is-array-buffer@4.2.0': + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} engines: {node: '>=18.0.0'} - '@smithy/md5-js@4.0.5': - resolution: {integrity: sha512-8n2XCwdUbGr8W/XhMTaxILkVlw2QebkVTn5tm3HOcbPbOpWg89zr6dPXsH8xbeTsbTXlJvlJNTQsKAIoqQGbdA==} + '@smithy/md5-js@4.2.5': + resolution: {integrity: sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.0.5': - resolution: {integrity: sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ==} + '@smithy/middleware-content-length@4.2.5': + resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.1.18': - resolution: {integrity: sha512-ZhvqcVRPZxnZlokcPaTwb+r+h4yOIOCJmx0v2d1bpVlmP465g3qpVSf7wxcq5zZdu4jb0H4yIMxuPwDJSQc3MQ==} + '@smithy/middleware-endpoint@4.3.13': + resolution: {integrity: sha512-X4za1qCdyx1hEVVXuAWlZuK6wzLDv1uw1OY9VtaYy1lULl661+frY7FeuHdYdl7qAARUxH2yvNExU2/SmRFfcg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.1.19': - resolution: {integrity: sha512-X58zx/NVECjeuUB6A8HBu4bhx72EoUz+T5jTMIyeNKx2lf+Gs9TmWPNNkH+5QF0COjpInP/xSpJGJ7xEnAklQQ==} + '@smithy/middleware-retry@4.4.13': + resolution: {integrity: sha512-RzIDF9OrSviXX7MQeKOm8r/372KTyY8Jmp6HNKOOYlrguHADuM3ED/f4aCyNhZZFLG55lv5beBin7nL0Nzy1Dw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.0.9': - resolution: {integrity: sha512-uAFFR4dpeoJPGz8x9mhxp+RPjo5wW0QEEIPPPbLXiRRWeCATf/Km3gKIVR5vaP8bN1kgsPhcEeh+IZvUlBv6Xg==} + '@smithy/middleware-serde@4.2.6': + resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.0.5': - resolution: {integrity: sha512-/yoHDXZPh3ocRVyeWQFvC44u8seu3eYzZRveCMfgMOBcNKnAmOvjbL9+Cp5XKSIi9iYA9PECUuW2teDAk8T+OQ==} + '@smithy/middleware-stack@4.2.5': + resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.1.4': - resolution: {integrity: sha512-+UDQV/k42jLEPPHSn39l0Bmc4sB1xtdI9Gd47fzo/0PbXzJ7ylgaOByVjF5EeQIumkepnrJyfx86dPa9p47Y+w==} + '@smithy/node-config-provider@4.3.5': + resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.1.1': - resolution: {integrity: sha512-RHnlHqFpoVdjSPPiYy/t40Zovf3BBHc2oemgD7VsVTFFZrU5erFFe0n52OANZZ/5sbshgD93sOh5r6I35Xmpaw==} + '@smithy/node-http-handler@4.4.5': + resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.0.5': - resolution: {integrity: sha512-R/bswf59T/n9ZgfgUICAZoWYKBHcsVDurAGX88zsiUtOTA/xUAPyiT+qkNCPwFn43pZqN84M4MiUsbSGQmgFIQ==} + '@smithy/property-provider@4.2.5': + resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.1.3': - resolution: {integrity: sha512-fCJd2ZR7D22XhDY0l+92pUag/7je2BztPRQ01gU5bMChcyI0rlly7QFibnYHzcxDvccMjlpM/Q1ev8ceRIb48w==} + '@smithy/protocol-http@5.3.5': + resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.0.5': - resolution: {integrity: sha512-NJeSCU57piZ56c+/wY+AbAw6rxCCAOZLCIniRE7wqvndqxcKKDOXzwWjrY7wGKEISfhL9gBbAaWWgHsUGedk+A==} + '@smithy/querystring-builder@4.2.5': + resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.0.5': - resolution: {integrity: sha512-6SV7md2CzNG/WUeTjVe6Dj8noH32r4MnUeFKZrnVYsQxpGSIcphAanQMayi8jJLZAWm6pdM9ZXvKCpWOsIGg0w==} + '@smithy/querystring-parser@4.2.5': + resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.0.7': - resolution: {integrity: sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg==} + '@smithy/service-error-classification@4.2.5': + resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.0.5': - resolution: {integrity: sha512-YVVwehRDuehgoXdEL4r1tAAzdaDgaC9EQvhK0lEbfnbrd0bd5+CTQumbdPryX3J2shT7ZqQE+jPW4lmNBAB8JQ==} + '@smithy/shared-ini-file-loader@4.4.0': + resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.1.3': - resolution: {integrity: sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw==} + '@smithy/signature-v4@5.3.5': + resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.4.10': - resolution: {integrity: sha512-iW6HjXqN0oPtRS0NK/zzZ4zZeGESIFcxj2FkWed3mcK8jdSdHzvnCKXSjvewESKAgGKAbJRA+OsaqKhkdYRbQQ==} + '@smithy/smithy-client@4.9.9': + resolution: {integrity: sha512-SUnZJMMo5yCmgjopJbiNeo1vlr8KvdnEfIHV9rlD77QuOGdRotIVBcOrBuMr+sI9zrnhtDtLP054bZVbpZpiQA==} engines: {node: '>=18.0.0'} - '@smithy/types@4.3.2': - resolution: {integrity: sha512-QO4zghLxiQ5W9UZmX2Lo0nta2PuE1sSrXUYDoaB6HMR762C0P7v/HEPHf6ZdglTVssJG1bsrSBxdc3quvDSihw==} + '@smithy/types@4.9.0': + resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.0.5': - resolution: {integrity: sha512-j+733Um7f1/DXjYhCbvNXABV53NyCRRA54C7bNEIxNPs0YjfRxeMKjjgm2jvTYrciZyCjsicHwQ6Q0ylo+NAUw==} + '@smithy/url-parser@4.2.5': + resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} engines: {node: '>=18.0.0'} - '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + '@smithy/util-base64@4.3.0': + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + '@smithy/util-body-length-browser@4.2.0': + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + '@smithy/util-body-length-node@4.2.1': + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + '@smithy/util-buffer-from@4.2.0': + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} engines: {node: '>=18.0.0'} - '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + '@smithy/util-config-provider@4.2.0': + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.0.26': - resolution: {integrity: sha512-xgl75aHIS/3rrGp7iTxQAOELYeyiwBu+eEgAk4xfKwJJ0L8VUjhO2shsDpeil54BOFsqmk5xfdesiewbUY5tKQ==} + '@smithy/util-defaults-mode-browser@4.3.12': + resolution: {integrity: sha512-TKc6FnOxFULKxLgTNHYjcFqdOYzXVPFFVm5JhI30F3RdhT7nYOtOsjgaOwfDRmA/3U66O9KaBQ3UHoXwayRhAg==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.0.26': - resolution: {integrity: sha512-z81yyIkGiLLYVDetKTUeCZQ8x20EEzvQjrqJtb/mXnevLq2+w3XCEWTJ2pMp401b6BkEkHVfXb/cROBpVauLMQ==} + '@smithy/util-defaults-mode-node@4.2.15': + resolution: {integrity: sha512-94NqfQVo+vGc5gsQ9SROZqOvBkGNMQu6pjXbnn8aQvBUhc31kx49gxlkBEqgmaZQHUUfdRUin5gK/HlHKmbAwg==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.0.7': - resolution: {integrity: sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ==} + '@smithy/util-endpoints@3.2.5': + resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==} engines: {node: '>=18.0.0'} - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + '@smithy/util-hex-encoding@4.2.0': + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.0.5': - resolution: {integrity: sha512-N40PfqsZHRSsByGB81HhSo+uvMxEHT+9e255S53pfBw/wI6WKDI7Jw9oyu5tJTLwZzV5DsMha3ji8jk9dsHmQQ==} + '@smithy/util-middleware@4.2.5': + resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.0.7': - resolution: {integrity: sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ==} + '@smithy/util-retry@4.2.5': + resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.2.4': - resolution: {integrity: sha512-vSKnvNZX2BXzl0U2RgCLOwWaAP9x/ddd/XobPK02pCbzRm5s55M53uwb1rl/Ts7RXZvdJZerPkA+en2FDghLuQ==} + '@smithy/util-stream@4.5.6': + resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==} engines: {node: '>=18.0.0'} - '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + '@smithy/util-uri-escape@4.2.0': + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + '@smithy/util-utf8@4.2.0': + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-waiter@4.2.5': + resolution: {integrity: sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==} engines: {node: '>=18.0.0'} - '@smithy/util-waiter@4.0.7': - resolution: {integrity: sha512-mYqtQXPmrwvUljaHyGxYUIIRI3qjBTEb/f5QFi3A6VlxhpmZd5mWXn9W+qUkf2pVE1Hv3SqxefiZOPGdxmO64A==} + '@smithy/uuid@1.1.0': + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} engines: {node: '>=18.0.0'} + '@so-ric/colorspace@1.1.6': + resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@stitches/core@1.2.8': + resolution: {integrity: sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==} + '@storybook/addon-actions@6.5.16': resolution: {integrity: sha512-aADjilFmuD6TNGz2CRPSupnyiA/IGkPJHDBTqMpsDXTUr8xnuD122xkIhg6UxmCM2y1c+ncwYXy3WPK2xXK57g==} peerDependencies: @@ -7411,11 +8562,6 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/addon-docs@9.1.1': - resolution: {integrity: sha512-CzgvTy3V5X4fe+VPkiZVwPKARlpEBDAKte8ajLAlHJQLFpADdYrBRQ0se6I+kcxva7rZQzdhuH7qjXMDRVcfnw==} - peerDependencies: - storybook: ^9.1.1 - '@storybook/addon-essentials@6.5.16': resolution: {integrity: sha512-TeoMr6tEit4Pe91GH6f8g/oar1P4M0JL9S6oMcFxxrhhtOGO7XkWD5EnfyCx272Ok2VYfE58FNBTGPNBVIqYKQ==} peerDependencies: @@ -7680,11 +8826,11 @@ packages: '@storybook/builder-manager@7.6.20': resolution: {integrity: sha512-e2GzpjLaw6CM/XSmc4qJRzBF8GOoOyotyu3JrSPTYOt4RD8kjUsK4QlismQM1DQRu8i39aIexxmRbiJyD74xzQ==} - '@storybook/builder-vite@9.1.1': - resolution: {integrity: sha512-rM0QOfykr39SFBRQnoAa5PU3xTHnJE1R5tigvjved1o7sumcfjrhqmEyAgNZv1SoRztOO92jwkTi7En6yheOKg==} + '@storybook/builder-vite@8.6.14': + resolution: {integrity: sha512-ajWYhy32ksBWxwWHrjwZzyC0Ii5ZTeu5lsqA95Q/EQBB0P5qWlHWGM3AVyv82Mz/ND03ebGy123uVwgf6olnYQ==} peerDependencies: - storybook: ^9.1.1 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + storybook: ^8.6.14 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 '@storybook/builder-webpack4@6.5.16': resolution: {integrity: sha512-YqDIrVNsUo8r9xc6AxsYDLxVYtMgl5Bxk+8/h1adsOko+jAFhdg6hOcAVxEmoSI0TMASOOVMFlT2hr23ppN2rQ==} @@ -7744,8 +8890,8 @@ packages: resolution: {integrity: sha512-ZlP+BJyqg7HlnXf7ypjG2CKMI/KVOn03jFIiClItE/jQfgR6kRFgtjRU7uajh427HHfjv9DRiur8nBzuO7vapA==} hasBin: true - '@storybook/cli@9.1.1': - resolution: {integrity: sha512-NbEVLi6nXF8G1nXy5DVpwSkj9c3mplVrhGI0FQnvntoP64BkuVwOVmti0M+hAStU607cT9sNAkg0yFpgK5twpA==} + '@storybook/cli@8.6.14': + resolution: {integrity: sha512-mnPlQ5ynwuC5iOFcSfjKcz0jvtJqKHZDKGzDRmNh82m60jRHa7Llex+1kzRtzUDnZFO7ZpZkH8u/GHzpEoKy7Q==} hasBin: true '@storybook/client-api@6.5.16': @@ -7769,8 +8915,8 @@ packages: '@storybook/codemod@7.6.20': resolution: {integrity: sha512-8vmSsksO4XukNw0TmqylPmk7PxnfNfE21YsxFa7mnEBmEKQcZCQsNil4ZgWfG0IzdhTfhglAN4r++Ew0WE+PYA==} - '@storybook/codemod@9.1.1': - resolution: {integrity: sha512-biUFc8TmeHUjByOFSaN5RJYGVZe1EJTwlxRcB7/PiXwsoy3SNLj0PJiTGdZyzmz+T2zNNpMQPpgEWQFk/aoSgQ==} + '@storybook/codemod@8.6.14': + resolution: {integrity: sha512-lRzE+l4xwKDLKimSk6NIx0dRAE1eFjQqV79gt/RidkJZgjSzpiJVuiGI9y+ALVvkrgjfA+2K0+KdPEmPIhbwxg==} '@storybook/components@6.5.16': resolution: {integrity: sha512-LzBOFJKITLtDcbW9jXl0/PaG+4xAz25PK8JxPZpIALbmOpYWOAPcO6V9C2heX6e6NgWFMUxjplkULEk9RCQMNA==} @@ -7888,11 +9034,6 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/csf-plugin@9.1.1': - resolution: {integrity: sha512-MwdtvzzFpkard06pCfDrgRXZiBfWAQICdKh7kzpv1L8SwewsRgUr5WZQuEAVfYdSvCFJbWnNN4KirzPhe5ENCg==} - peerDependencies: - storybook: ^9.1.1 - '@storybook/csf-tools@6.5.16': resolution: {integrity: sha512-+WD4sH/OwAfXZX3IN6/LOZ9D9iGEFcN+Vvgv9wOsLRgsAZ10DG/NK6c1unXKDM/ogJtJYccNI8Hd+qNE/GFV6A==} peerDependencies: @@ -7907,6 +9048,9 @@ packages: '@storybook/csf-tools@7.6.20': resolution: {integrity: sha512-rwcwzCsAYh/m/WYcxBiEtLpIW5OH1ingxNdF/rK9mtGWhJxXRDV8acPkFrF8rtFWIVKoOCXu5USJYmc3f2gdYQ==} + '@storybook/csf@0.0.1': + resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + '@storybook/csf@0.0.2--canary.4566f4d.1': resolution: {integrity: sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==} @@ -7925,8 +9069,8 @@ packages: '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - '@storybook/icons@1.4.0': - resolution: {integrity: sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==} + '@storybook/icons@1.6.0': + resolution: {integrity: sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==} engines: {node: '>=14.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -8063,21 +9207,18 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: ^8.6.14 - '@storybook/react-dom-shim@9.1.1': - resolution: {integrity: sha512-L+HCOXvOP+PwKrVS8od9aF+F4hO7zA0Nt1vnpbg2LeAHCxYghrjFVtioe7gSlzrlYdozQrPLY98a4OkDB7KGrw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.1 - - '@storybook/react-vite@9.1.1': - resolution: {integrity: sha512-9rMjAqgrcuVF/GS171fYSLuUs5QC3e0WPpIm2JOP7Z9qWctM1ApVb9UCYY7ZNl9Gc3kvjKsK5J1+A4Zw4a2+ag==} - engines: {node: '>=20.0.0'} + '@storybook/react-vite@8.6.14': + resolution: {integrity: sha512-FZU0xMPxa4/TO87FgcWwappOxLBHZV5HSRK5K+2bJD7rFJAoNorbHvB4Q1zvIAk7eCMjkr2GPCPHx9PRB9vJFg==} + engines: {node: '>=18.0.0'} peerDependencies: + '@storybook/test': 8.6.14 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.1 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + storybook: ^8.6.14 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@storybook/test': + optional: true '@storybook/react-webpack5@7.4.6': resolution: {integrity: sha512-OSwf+E2tRcfBmzCH+WwM7JlfEYjg5Womi1yrtotfcjVXAU6ubHOk2G87zsrKLp/TeCOFM2aHohHBTyWUCejQKQ==} @@ -8159,18 +9300,6 @@ packages: typescript: optional: true - '@storybook/react@9.1.1': - resolution: {integrity: sha512-F5vRFxDf1fzM6CG88olrzEH03iP6C1YAr4/nr5bkLNs6TNm9Hh7KmRVG2jFtoy5w9uCwbQ9RdY+TrRbBI7n67g==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.1 - typescript: '>= 4.9.x' - peerDependenciesMeta: - typescript: - optional: true - '@storybook/router@6.5.16': resolution: {integrity: sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==} peerDependencies: @@ -8243,95 +9372,95 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@swagger-api/apidom-ast@1.0.0-beta.45': - resolution: {integrity: sha512-2npCF6V4QYSRv8USSmQ9jmsnNrjhTww4C84+cetNpxvTYXmEi9bRwIfzn2LH7DedsZsOJOMucVbJkCcRB/VC2Q==} + '@swagger-api/apidom-ast@1.0.0-rc.4': + resolution: {integrity: sha512-IaXz00VLMq0Kw5vh5f2MX4gNWzPy8ujBl5FInM5w+1mezoyrwTnVRiKO7sf611OthmNmnK5cWy3hjqURAT9wCQ==} - '@swagger-api/apidom-core@1.0.0-beta.45': - resolution: {integrity: sha512-JEKf/bIl0RgaYAILlSDjuWhcg/+gbrI6p6OZuXR7EVxPlPNBAsme98UYyICA9AENyi2fzxwCP5eDRFl4cIzMHQ==} + '@swagger-api/apidom-core@1.0.0-rc.4': + resolution: {integrity: sha512-dSvq/FmUffmv9nqBO8LZ5+ESFWPe/y7UsatRiwpqh6M7vBHy9xBuKdn6A/7QtmZnetjigkx3h4CXc4Mi30RZCg==} - '@swagger-api/apidom-error@1.0.0-beta.45': - resolution: {integrity: sha512-kEy7blIEF77BnoqLhGW3h3I+evPHrtZwKe4fSw22UEUJUTG1Daw9FhaSgfBNptifZzzdLgiVDujrIOI6SpkH3Q==} + '@swagger-api/apidom-error@1.0.0-rc.4': + resolution: {integrity: sha512-uakMfKYyLgGjLrVaaUKWyl0D+wGxza+nh1Ct4fOFRiy0Dm91I4AD4HwsG3Uvk5gLrvqlf/OutKYzKt8Ufhlyig==} - '@swagger-api/apidom-json-pointer@1.0.0-beta.45': - resolution: {integrity: sha512-s8eMDc/zL5W9mtBRbjEGPDt9yNJlpq9S+7/ACLjlSg1J3toadZmNiyR0svVLroVzVZHD5aGClGRpdammbO/PhQ==} + '@swagger-api/apidom-json-pointer@1.0.0-rc.4': + resolution: {integrity: sha512-5bB6nemgzkWs440a8PX+lS3fGtEtJt2iYhK0Xf9E+9qU6d1eR9aiETPdAVjbdL8vLhyZvmgvZie/7q0l6bbLJg==} - '@swagger-api/apidom-ns-api-design-systems@1.0.0-beta.45': - resolution: {integrity: sha512-uX+lkOi1g32mIhBVtMm5a304H68GIR4IXf/wiD6mdf2iwjfR0+drn/4NmirZqrNvlMtmf1a6VSe4u6KE3OBIpw==} + '@swagger-api/apidom-ns-api-design-systems@1.0.0-rc.4': + resolution: {integrity: sha512-JlOD1H2jSl/XxdFwa/zPOvRZh8rk/O/2B2xkoKaxhTmkVTKq2Y1rHsey8cyU9qrfQSkLpPm1cxXeIfqmhdPmqQ==} - '@swagger-api/apidom-ns-arazzo-1@1.0.0-beta.45': - resolution: {integrity: sha512-ZjzTvby6Zvu7vh6uabRCGsnhAPeefxgJQ7DPKLELe9KyzcT+OqorjDtfaESFy4zzIMokalJcja/in29yTS+kxw==} + '@swagger-api/apidom-ns-arazzo-1@1.0.0-rc.4': + resolution: {integrity: sha512-sKep7qCvJa2zB4q67e9zinLKjVx0vhV/e40OLEg3JeECMWcRrW3oI2JB3jSJ7ZZwCgvatfBc6/ucFsX/1oKpkg==} - '@swagger-api/apidom-ns-asyncapi-2@1.0.0-beta.45': - resolution: {integrity: sha512-OQY2cSs5oZo0/rlGa8hHfgu7DFQ6lDhBC+IAKp0E7gF27oH2Yy9BEHlxHUA3iUeCMxDfIo021+Qc8FpNqivtxA==} + '@swagger-api/apidom-ns-asyncapi-2@1.0.0-rc.4': + resolution: {integrity: sha512-RDNKv4kCAzQ+aA02VjgxS9Cve0UgnRkcFNEUxYEHWNbqVcMmxcck6GLQo4OuwhgJczEyZC3TB5idfxphRhaybg==} - '@swagger-api/apidom-ns-json-schema-2019-09@1.0.0-beta.45': - resolution: {integrity: sha512-StoPoa1yI5gBfPZ57LhA41f+JNJ/JnrsWZnmDlJG8W2hyjJAeyVkOo0qoVpt40240WZmH2EuywIFrdD+n+hrLA==} + '@swagger-api/apidom-ns-json-schema-2019-09@1.0.0-rc.4': + resolution: {integrity: sha512-kgIo3d9VZjBFg30Cg0asokbBGVb4WvVckkf9U2T8/6wh2o1J+KMqvdRauo2Xz+o5EubLpGyZjrwOzMbFJv/viA==} - '@swagger-api/apidom-ns-json-schema-2020-12@1.0.0-beta.45': - resolution: {integrity: sha512-l70stVPz1kGIiM7t55twYhfI2GwDKLOjfr+Py1Rknyo75LYw08QhppZ7PxWamgvKmoYfBnGeaoC+18Q2dn2Bhg==} + '@swagger-api/apidom-ns-json-schema-2020-12@1.0.0-rc.4': + resolution: {integrity: sha512-0mpBu8iXq8GaY+KDQGWSU+8Xvd1Kd5EXKOpW8tDgJINBgeYm7F3m8iP3irP0OMeCyX9ISMq+bDgXg+YjS8kYzA==} - '@swagger-api/apidom-ns-json-schema-draft-4@1.0.0-beta.45': - resolution: {integrity: sha512-tlDz4+Ko+ylVWSpSprZM9WoBMfmBxoUxcxvbkcafCJTO4MCQuytYaW3p/BIMscCsa0LP1eR4ycMY8h445ur58Q==} + '@swagger-api/apidom-ns-json-schema-draft-4@1.0.0-rc.4': + resolution: {integrity: sha512-FOqR+EMMt5QPXmQv/gJ/syzp+G5QCrb+5n3tkmVwBNKhiPHcX4kOHt6/8wZo/6V++hhv1IzCt1JwGJGiNEuK9A==} - '@swagger-api/apidom-ns-json-schema-draft-6@1.0.0-beta.45': - resolution: {integrity: sha512-wBkk2AqDddZvf1VixAuwFu9LRTJya3yL+FAmg4KyMGrA32VOFYupe9jc1RmV/noTfGwf5AWZVnuGo9xiI2z4Wg==} + '@swagger-api/apidom-ns-json-schema-draft-6@1.0.0-rc.4': + resolution: {integrity: sha512-OQonOTVyPzKUvE2+6AB+JK7rkqqd0AG0QyarSyPJH+vbt2Nsj2tUaEXNY3WeP9OX1xvbtUysR74fefsOkjzO1Q==} - '@swagger-api/apidom-ns-json-schema-draft-7@1.0.0-beta.45': - resolution: {integrity: sha512-EggsaTXUw0j8PmcO+IxnoJ7TyXz8sNarPlB2EGNqVT3qEwGQn96qXZ8pZab0sr1iStIWzyAaXMKrnmlcSIDpSQ==} + '@swagger-api/apidom-ns-json-schema-draft-7@1.0.0-rc.4': + resolution: {integrity: sha512-p1YbbkHQDD0REbz30F/vMXjPjsh7j7jIjaHNgFv3zC+KZN776GkOwQIpdP56lwneWFdMj9jOSRhwBKp34h9iXw==} - '@swagger-api/apidom-ns-openapi-2@1.0.0-beta.45': - resolution: {integrity: sha512-OY/FM8lDB6MzJfTgqHPj6k6Kk62Uho5gynsZLyroxgTz+Ez9zSdgA+p8+mdE4hBQxfwSnUtaiFMWgAzY+12Q9A==} + '@swagger-api/apidom-ns-openapi-2@1.0.0-rc.4': + resolution: {integrity: sha512-Wil2egcmJJIrgEDYGZVaDIMGlnLhcBw8I5ZjWBgyU8nLocuqdKVE8I1TwPO+7830dnfjCaXs+nUzfgkBcGefMg==} - '@swagger-api/apidom-ns-openapi-3-0@1.0.0-beta.45': - resolution: {integrity: sha512-HaacHMmYfMp9UNSTONVxGRQDlQn8yEIOklHowI+/u8SRqdV87dE9UQhp8AMGw2hfnYiyt8ADFdPsLnYR6LEq7g==} + '@swagger-api/apidom-ns-openapi-3-0@1.0.0-rc.4': + resolution: {integrity: sha512-t4ZX6I76fcrCsV1Aj8Um6LiIceVCKNgakg5MIuBiRZaA0q8fZPerLSD1KIYMLWPd+cV5ptKZyv+bugzhlhQtTg==} - '@swagger-api/apidom-ns-openapi-3-1@1.0.0-beta.45': - resolution: {integrity: sha512-irU2jMOZNWf/lAXc/JuWohHs55MQe7Rb36xzAqoyOjauk2nj/ougy5b+xvG3dLZu3ZKc/X9kmimPPLTs7P2Xhw==} + '@swagger-api/apidom-ns-openapi-3-1@1.0.0-rc.4': + resolution: {integrity: sha512-Ibv8PP0npBb8QupINmluQmLCZ1IhANlRUic8K7k32Lbc9ejMGTLCKGl2J3hPPeKsER3zqfEjHAhkins9r/CJcw==} - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.0.0-beta.45': - resolution: {integrity: sha512-F8Glj81vrYc9oghEeM1Pfo8qbOptEl3tPOU3hQIqDM4pqMRuB3vwYfoZLVnwpewXacBRgwUiXXnaWV7alMnPzg==} + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.0.0-rc.4': + resolution: {integrity: sha512-/K9xj7tL6RB6B+krFf5JlzEGb3bebVt5c6t9a0ZZps+4TjcAQ3M1B9Gs3+ngR6Hy2RwtqIPKWKl0fhgfpArmnw==} - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.0.0-beta.45': - resolution: {integrity: sha512-Xdhk2yffGD2KcncTs8uNeiKBeBvr0njRRlhfSKdewb91SHXqyh2eKf168M6UPdT0dg3QQKdCT5lV+meKcYGpkw==} + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.0.0-rc.4': + resolution: {integrity: sha512-+J4hMSe7+cKxuDDEVxyF7MGfvAFv7cbFdyBKUDkvkKjtdkh40+5msTJ2ePuSxibNqZTJFGZhaJBIaPOfbqLpUQ==} - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.0.0-beta.45': - resolution: {integrity: sha512-SMJseBO32aHPXskwYThT2y3Py2B8B4gKqGXl+ZlMGCaM72Fnnr0hbqtI8wt2v58F97qVlTYvXvTSfQGUuUh/Kg==} + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.0.0-rc.4': + resolution: {integrity: sha512-7sDeZgV1SVwiWQmckvRgBwEBZXUavxvJr5m8C2daEge9DTM9LE3qNBAjWdwvd5E4sPeDdslSiCWT9Ipi+aiBsg==} - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.0.0-beta.45': - resolution: {integrity: sha512-w9v3E0F9OKSUoK2DtMphpUO2Dd+op+YrwHAYyZTbKL48DEd+Ez5L9wW1bURpfNMSaRjm5H9BrMM2eVdSz8TFQw==} + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.0.0-rc.4': + resolution: {integrity: sha512-UnU6RLRKNMm0qbHjINbfrFgKQd6tD2pRKySWgR9HxLVS+VTL3J4Oid2Tt3ND5xy6nE4qZrV5vusZNkdDewZk7A==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.0.0-beta.45': - resolution: {integrity: sha512-7txrflmTsG2400mHq6rswnxi6+r+H7vtL0Mfb0lMj4docaSODnTdEiNjG35jaQaBMbMEtRPokJ6i4018SNFy3Q==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.0.0-rc.4': + resolution: {integrity: sha512-fZJgQWRXQxPcZurKxiY2IcdtuS33CxuJyFD9Z+72v3OvVWFEII6mWGC6NdqevzYaD7WUVXhsQjAqibBNIcyJiQ==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.0.0-beta.45': - resolution: {integrity: sha512-laxCy1UmLjlUGRRlcEEQLHWmzwnUq750SFjnBUJe70DxNrBr68UqlLqKC/kGkpOOgsf+NMWhqSkS8WQ/eLsQww==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.0.0-rc.4': + resolution: {integrity: sha512-WNmlRSHiCLu9uCsadnoaWYxzV/aagUHAeVTY+Zgq+4bSNWx9DZTX5X1v/IW4aD5MAW6j1Inz8U5qdxWnrEdBBg==} - '@swagger-api/apidom-parser-adapter-json@1.0.0-beta.45': - resolution: {integrity: sha512-5fFln56FM/6xEvGEAjk+GvTcmts8P5nnCPNDQpxc/PVDcLxC0gzyp5bjkOLmj9nZXqCQRzm/PH0bmxGQv4JSmg==} + '@swagger-api/apidom-parser-adapter-json@1.0.0-rc.4': + resolution: {integrity: sha512-UuYtpZtXoWuukny/1WIz2szlfKc6XDNh0W1E8PtZqhFOUDgaq0qXB7OBB7E/lDAJAIzlWfJu1lR87C2pwbJSRw==} - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.0.0-beta.45': - resolution: {integrity: sha512-lFRbbCGyGilEkNLgZyJeHK2sUsmtEKljkvyZytjGXshd45lLkHD+/1vByKhClbyoA+aIk8lzLpeaMECbOH+a9w==} + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.0.0-rc.4': + resolution: {integrity: sha512-2OgY9MO0U2Ma7OiIOvsT7cn0J5XbfWy9JnOEGm6DCh+b1m+NGWSXuPKGB9o/R3DJu5Jar9ol7Mu+oyb6ENJKdg==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.0.0-beta.45': - resolution: {integrity: sha512-AMCSLQhWcsTvlAhZMIwGezXBxhqLnnQQPkZHwKBFA1sD0FLZJKmIs1bxuEuo3iKNHKfDvbKJLQsr6OOqCg1MtQ==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.0.0-rc.4': + resolution: {integrity: sha512-XvZsBuUO2UY5qXsizw03A+dy745ZWvekwS0J3o5RmPoEuJ1eeRNXsUn+JoAHascX81vzlkam71Xp9XpcAlybYQ==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.0.0-beta.45': - resolution: {integrity: sha512-rnao77rKeLHrpfM/QRzsOVNaaqZVYv4QID35GDOkuIHjjDNTjmquUsuWscAtI32P7tJHmPrLAJWKxb48W02mmw==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.0.0-rc.4': + resolution: {integrity: sha512-cydbVKumtVTTfTnbtvfw1kayYRbQyTS6iZ5s/Y6xyZb7ro5VNi6XZy6htOu0EvXUBS/NJjY9YDeWcVKGUEuohw==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.0.0-beta.45': - resolution: {integrity: sha512-zilhJHYEV0cGde6ZdAfB+/4OnzHW8OCLO7bXmtoXdsxwJV0DHnwjrq2FgOlwqWBPWRIlyFwBwdUO0Rd5P4re3g==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.0.0-rc.4': + resolution: {integrity: sha512-pqoPgMFOvJJ2v4qA9MKMnTlhOYST+o2WhYmY34GMCoZrRrHue0rnvjtsAyH9BQNk9WEmS1gdonKpyHl6a5bewQ==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.0.0-beta.45': - resolution: {integrity: sha512-loof/awV/RNIaCHqr4+uVVjdSayAvNyxjLszyd0moAQv/247mfjvCH0h9VLIlpjI4kf+C3q4bhyYYaeVl9MSVg==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.0.0-rc.4': + resolution: {integrity: sha512-7J+iWKNC6pjWGAsOy5it2FDJGYyiDJ+rvIrUFAiK3Giqk9t70/s6PmH54DtVnb8rzmpX/udd8PVxTE6uImru1Q==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.0.0-beta.45': - resolution: {integrity: sha512-h2oHGosYXditkPJ66aGEsvz6zpM6N26ay1ZRhk9LjuSA8S4BqFYY+MbJVD6C0LLP6Mn5jvDWCUq7yB0DTWNxpg==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.0.0-rc.4': + resolution: {integrity: sha512-N3ehKEKvEWkZjL6QAV4Fwepa+2lSSun8DYN1h+ScVMa/QSWQh558vSXv6cF49ClYIO+IQjZg1fsbDoVg7qjlcA==} - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.0.0-beta.45': - resolution: {integrity: sha512-/Emcfl4Va1GJB7kU2DWZBrqAn6dLi/sclPa4z0sjg+2EtOJ9l9zw3sKc4d7cEY5PX2QzgD8bFxBYrP9lU03IZw==} + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.0.0-rc.4': + resolution: {integrity: sha512-go/s36rTmkgVIBt4Q/oAJzwRTwRjVdFQPeQGnuS6eX5mxMUWxzVrsKKLJ2qul5y8DVkzZsZ6K897RI5H0fUuuQ==} - '@swagger-api/apidom-reference@1.0.0-beta.45': - resolution: {integrity: sha512-1EbK7P6oki5mR8bho+E0yoc9JwhOT/vboTjidolH8Fjw/WuE6GcMHX+8OBcwcgjt9hXWsY3YfvZFwK7baxkPnQ==} + '@swagger-api/apidom-reference@1.0.0-rc.4': + resolution: {integrity: sha512-H0eVImmOEp8TjRBcVQuyBsCcUCR5094POMcgvcipUyKwAus62PwMivn1eQc+e/wyZSm7qqEbv1ksOcDLHltykA==} '@swaggerexpert/cookie@2.0.2': resolution: {integrity: sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==} @@ -8341,68 +9470,68 @@ packages: resolution: {integrity: sha512-qMx1nOrzoB+PF+pzb26Q4Tc2sOlrx9Ba2UBNX9hB31Omrq+QoZ2Gly0KLrQWw4Of1AQ4J9lnD+XOdwOdcdXqqw==} engines: {node: '>=12.20.0'} - '@swc/core-darwin-arm64@1.13.3': - resolution: {integrity: sha512-ux0Ws4pSpBTqbDS9GlVP354MekB1DwYlbxXU3VhnDr4GBcCOimpocx62x7cFJkSpEBF8bmX8+/TTCGKh4PbyXw==} + '@swc/core-darwin-arm64@1.15.3': + resolution: {integrity: sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.13.3': - resolution: {integrity: sha512-p0X6yhxmNUOMZrbeZ3ZNsPige8lSlSe1llllXvpCLkKKxN/k5vZt1sULoq6Nj4eQ7KeHQVm81/+AwKZyf/e0TA==} + '@swc/core-darwin-x64@1.15.3': + resolution: {integrity: sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.13.3': - resolution: {integrity: sha512-OmDoiexL2fVWvQTCtoh0xHMyEkZweQAlh4dRyvl8ugqIPEVARSYtaj55TBMUJIP44mSUOJ5tytjzhn2KFxFcBA==} + '@swc/core-linux-arm-gnueabihf@1.15.3': + resolution: {integrity: sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.13.3': - resolution: {integrity: sha512-STfKku3QfnuUj6k3g9ld4vwhtgCGYIFQmsGPPgT9MK/dI3Lwnpe5Gs5t1inoUIoGNP8sIOLlBB4HV4MmBjQuhw==} + '@swc/core-linux-arm64-gnu@1.15.3': + resolution: {integrity: sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.13.3': - resolution: {integrity: sha512-bc+CXYlFc1t8pv9yZJGus372ldzOVscBl7encUBlU1m/Sig0+NDJLz6cXXRcFyl6ABNOApWeR4Yl7iUWx6C8og==} + '@swc/core-linux-arm64-musl@1.15.3': + resolution: {integrity: sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.13.3': - resolution: {integrity: sha512-dFXoa0TEhohrKcxn/54YKs1iwNeW6tUkHJgXW33H381SvjKFUV53WR231jh1sWVJETjA3vsAwxKwR23s7UCmUA==} + '@swc/core-linux-x64-gnu@1.15.3': + resolution: {integrity: sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.13.3': - resolution: {integrity: sha512-ieyjisLB+ldexiE/yD8uomaZuZIbTc8tjquYln9Quh5ykOBY7LpJJYBWvWtm1g3pHv6AXlBI8Jay7Fffb6aLfA==} + '@swc/core-linux-x64-musl@1.15.3': + resolution: {integrity: sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.13.3': - resolution: {integrity: sha512-elTQpnaX5vESSbhCEgcwXjpMsnUbqqHfEpB7ewpkAsLzKEXZaK67ihSRYAuAx6ewRQTo7DS5iTT6X5aQD3MzMw==} + '@swc/core-win32-arm64-msvc@1.15.3': + resolution: {integrity: sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.13.3': - resolution: {integrity: sha512-nvehQVEOdI1BleJpuUgPLrclJ0TzbEMc+MarXDmmiRFwEUGqj+pnfkTSb7RZyS1puU74IXdK/YhTirHurtbI9w==} + '@swc/core-win32-ia32-msvc@1.15.3': + resolution: {integrity: sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.13.3': - resolution: {integrity: sha512-A+JSKGkRbPLVV2Kwx8TaDAV0yXIXm/gc8m98hSkVDGlPBBmydgzNdWy3X7HTUBM7IDk7YlWE7w2+RUGjdgpTmg==} + '@swc/core-win32-x64-msvc@1.15.3': + resolution: {integrity: sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.13.3': - resolution: {integrity: sha512-ZaDETVWnm6FE0fc+c2UE8MHYVS3Fe91o5vkmGfgwGXFbxYvAjKSqxM/j4cRc9T7VZNSJjriXq58XkfCp3Y6f+w==} + '@swc/core@1.15.3': + resolution: {integrity: sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -8416,8 +9545,8 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@swc/types@0.1.24': - resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==} + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -8426,8 +9555,8 @@ packages: '@tanstack/query-core@4.27.0': resolution: {integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA==} - '@tanstack/query-core@4.40.0': - resolution: {integrity: sha512-7MJTtZkCSuehMC7IxMOCGsLvHS3jHx4WjveSrGsG1Nc1UQLjaFwwkpLA2LmPfvOAxnH4mszMOBFD6LlZE+aB+Q==} + '@tanstack/query-core@4.41.0': + resolution: {integrity: sha512-193R4Jp9hjvlij6LryxrB5Mpbffd2L9PeWh3KlIy/hJV4SkBOfiQZ+jc5qAZLDCrdbkA5FjGj+UoDYw6TcNnyA==} '@tanstack/query-core@5.76.0': resolution: {integrity: sha512-FN375hb8ctzfNAlex5gHI6+WDXTNpe0nbxp/d2YJtnP+IBM6OUm7zcaoCW6T63BawGOYZBbKC0iPvr41TteNVg==} @@ -8438,8 +9567,8 @@ packages: '@tanstack/query-core@5.77.1': resolution: {integrity: sha512-nfxVhy4UynChMFfN4NxwI8pktV9R3Zt/ROxOAe6pdOf8CigDLn26p+ex1YW5uien26BBICLmN0dTvIELHCs5vw==} - '@tanstack/query-core@5.83.1': - resolution: {integrity: sha512-OG69LQgT7jSp+5pPuCfzltq/+7l2xoweggjme9vlbCPa/d7D7zaqv5vN/S82SzSYZ4EDLTxNO1PWrv49RAS64Q==} + '@tanstack/query-core@5.90.11': + resolution: {integrity: sha512-f9z/nXhCgWDF4lHqgIE30jxLe4sYv15QodfdPDKYAk7nAEjNcndy4dHz3ezhdUaR23BpWa4I2EH4/DZ0//Uf8A==} '@tanstack/query-persist-client-core@4.27.0': resolution: {integrity: sha512-A+dPA7zG0MJOMDeBc/2WcKXW4wV2JMkeBVydobPW9G02M4q0yAj7vI+7SmM2dFuXyIvxXp4KulCywN6abRKDSQ==} @@ -8534,26 +9663,20 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@testing-library/user-event@14.6.1': - resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@testing-library/dom': '>=7.21.4' - - '@textlint/ast-node-types@14.8.4': - resolution: {integrity: sha512-+fI7miec/r9VeniFV9ppL4jRCmHNsTxieulTUf/4tvGII3db5hGriKHC4p/diq1SkQ9Sgs7kg6UyydxZtpTz1Q==} + '@textlint/ast-node-types@15.4.0': + resolution: {integrity: sha512-IqY8i7IOGuvy05wZxISB7Me1ZyrvhaQGgx6DavfQjH3cfwpPFdDbDYmMXMuSv2xLS1kDB1kYKBV7fL2Vi16lRA==} - '@textlint/linter-formatter@14.8.4': - resolution: {integrity: sha512-sZ0UfYRDBNHnfMVBqLqqYnqTB7Ec169ljlmo+SEHR1T+dHUPYy1/DZK4p7QREXlBSFL4cnkswETCbc9xRodm4Q==} + '@textlint/linter-formatter@15.4.0': + resolution: {integrity: sha512-rfqOZmnI1Wwc/Pa4LK+vagvVPmvxf9oRsBRqIOB04DwhucingZyAIJI/TyG18DIDYbP2aFXBZ3oOvyAxHe/8PQ==} - '@textlint/module-interop@14.8.4': - resolution: {integrity: sha512-1LdPYLAVpa27NOt6EqvuFO99s4XLB0c19Hw9xKSG6xQ1K82nUEyuWhzTQKb3KJ5Qx7qj14JlXZLfnEuL6A16Bw==} + '@textlint/module-interop@15.4.0': + resolution: {integrity: sha512-uGf+SFIfzOLCbZI0gp+2NLsrkSArsvEWulPP6lJuKp7yRHadmy7Xf/YHORe46qhNyyxc8PiAfiixHJSaHGUrGg==} - '@textlint/resolver@14.8.4': - resolution: {integrity: sha512-nMDOgDAVwNU9ommh+Db0U+MCMNDPbQ/1HBNjbnHwxZkCpcT6hsAJwBe38CW/DtWVUv8yeR4R40IYNPT84srNwA==} + '@textlint/resolver@15.4.0': + resolution: {integrity: sha512-Vh/QceKZQHFJFG4GxxIsKM1Xhwv93mbtKHmFE5/ybal1mIKHdqF03Z9Guaqt6Sx/AeNUshq0hkMOEhEyEWnehQ==} - '@textlint/types@14.8.4': - resolution: {integrity: sha512-9nyY8vVXlr8hHKxa6+37omJhXWCwovMQcgMteuldYd4dOxGm14AK2nXdkgtKEUQnzLGaXy46xwLCfhQy7V7/YA==} + '@textlint/types@15.4.0': + resolution: {integrity: sha512-ZMwJgw/xjxJufOD+IB7I2Enl9Si4Hxo04B76RwUZ5cKBKzOPcmd6WvGe2F7jqdgmTdGnfMU+Bo/joQrjPNIWqg==} '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -8584,6 +9707,21 @@ packages: '@ts-morph/common@0.27.0': resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -8614,9 +9752,6 @@ packages: '@types/chai@4.3.20': resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} - '@types/classnames@2.3.4': resolution: {integrity: sha512-dwmfrMMQb9ujX1uYGvB5ERDlOzBNywnZAZBtOe107/hORWP05ESgU4QyaanZMWYYfd2BzrG78y13/Bju8IQcMQ==} deprecated: This is a stub types definition. classnames provides its own type definitions, so you do not need this installed. @@ -8624,8 +9759,8 @@ packages: '@types/codemirror@0.0.90': resolution: {integrity: sha512-8Z9+tSg27NPRGubbUPUCrt5DDG/OWzLph5BvcDykwR5D7RyZh5mhHG0uS1ePKV1YFCA+/cwc4Ey2AJAEFfV3IA==} - '@types/codemirror@5.60.16': - resolution: {integrity: sha512-V/yHdamffSS075jit+fDxaOAmdP2liok8NSNJnAZfDJErzOheuygHZEhAJrfmk5TEyM32MhkZjwo/idX791yxw==} + '@types/codemirror@5.60.17': + resolution: {integrity: sha512-AZq2FIsUHVMlp7VSe2hTfl5w4pcUkoFkM3zVsRKsn1ca8CXRDYvnin04+HP2REkwsxemuHqvDofdlhUWNpbwfw==} '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -8642,9 +9777,6 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/deep-equal@1.0.4': resolution: {integrity: sha512-tqdiS4otQP4KmY0PR3u6KbZ5EWvhNdUoS/jc93UuK23C220lOZ/9TvjfxdPcKvqwwDVtmtSCrnr0p/2dirAxkA==} @@ -8660,8 +9792,8 @@ packages: '@types/ejs@3.1.5': resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} - '@types/emscripten@1.40.1': - resolution: {integrity: sha512-sr53lnYkQNhjHNN0oJDdUm5564biioI5DuOpycufDVK7D3y+GR3oUswe2rlwY1nPNyusHbrJ9WoTyIHl4/Bpwg==} + '@types/emscripten@1.41.5': + resolution: {integrity: sha512-cMQm7pxu6BxtHyqJ7mQZ2kXWV5SLmugybFdHCBbJ5eHzOo6VhBckEgAT3//rP5FwPHNPeEiq4SmQ5ucBwsOo4Q==} '@types/escodegen@0.0.6': resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} @@ -8687,11 +9819,11 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + '@types/express-serve-static-core@4.19.7': + resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==} - '@types/express@4.17.23': - resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + '@types/express@4.17.25': + resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} '@types/find-cache-dir@3.2.1': resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} @@ -8735,8 +9867,8 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/http-proxy@1.17.16': - resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@types/http-proxy@1.17.17': + resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} '@types/is-function@1.0.3': resolution: {integrity: sha512-/CLhCW79JUeLKznI6mbVieGbl4QU5Hfn+6udw1YHZoofASjbQ5zaP5LzAUZYDpRYEjS4/P+DhEgyJ/PQmGGTWw==} @@ -8759,6 +9891,9 @@ packages: '@types/jest@29.5.14': resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + '@types/jest@30.0.0': + resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} + '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -8774,6 +9909,9 @@ packages: '@types/jsonfile@6.1.4': resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + '@types/lodash.camelcase@4.3.9': resolution: {integrity: sha512-ys9/hGBfsKxzmFI8hckII40V0ASQ83UM2pxfQRghHAwekhH4/jWtjz/3/9YDy7ZpUd/H0k2STSqmPR28dnj7Zg==} @@ -8792,12 +9930,21 @@ packages: '@types/lodash@4.17.17': resolution: {integrity: sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==} + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdurl@1.0.5': + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -8832,14 +9979,17 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node-forge@1.3.13': - resolution: {integrity: sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==} + '@types/node-forge@1.3.14': + resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} '@types/node@16.18.126': resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==} - '@types/node@18.19.121': - resolution: {integrity: sha512-bHOrbyztmyYIi4f1R0s17QsPs1uyyYnGcXeZoGEd227oZjry0q6XQBQxd82X1I57zEfwO8h9Xo+Kl5gX1d9MwQ==} + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + + '@types/node@20.19.25': + resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} '@types/node@22.15.18': resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} @@ -8913,8 +10063,8 @@ packages: '@types/react-test-renderer@19.1.0': resolution: {integrity: sha512-XD0WZrHqjNrxA/MaR9O22w/RNidWR9YZmBdRGI7wcnWGrv/3dA8wKCJ8m63Sn+tLJhcjmuhOi629N66W6kgWzQ==} - '@types/react@17.0.87': - resolution: {integrity: sha512-wpg9AbtJ6agjA+BKYmhG6dRWEU/2DHYwMzCaBzsz137ft6IyuqZ5fI4ic1DWL4DrI03Zy78IyVE6ucrXl0mu4g==} + '@types/react@17.0.90': + resolution: {integrity: sha512-P9beVR/x06U9rCJzSxtENnOr4BrbJ6VrsrDTc+73TtHv9XHhryXKbjGRB+6oooB2r0G/pQkD/S4dHo/7jUfwFw==} '@types/react@18.2.0': resolution: {integrity: sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==} @@ -8940,20 +10090,23 @@ packages: '@types/scheduler@0.26.0': resolution: {integrity: sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==} - '@types/selenium-webdriver@4.1.28': - resolution: {integrity: sha512-Au7CXegiS7oapbB16zxPToY4Cjzi9UQQMf3W2ZZM8PigMLTGR3iUAHjPUTddyE5g1SBjT/qpmvlsAQLBfNAdKg==} + '@types/selenium-webdriver@4.35.4': + resolution: {integrity: sha512-hZFsK0dt/2PA5eLrFOJwkoTBpPXtaKnln7NCtg3pMAPwg7DXG6kTilHoAw8KzsQeDFLJ0mYcL6dPSMt1Qk7eSw==} - '@types/semver@7.7.0': - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} - '@types/send@0.17.5': - resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + '@types/send@0.17.6': + resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} + + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} '@types/serve-index@1.9.4': resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - '@types/serve-static@1.15.8': - resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + '@types/serve-static@1.15.10': + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} @@ -9015,14 +10168,14 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/vscode-notebook-renderer@1.72.3': - resolution: {integrity: sha512-MfmEI3A2McbUV2WaijoTgLOAs9chwHN4WmqOedl3jdtlbzJBWIQ9ZFmQdzPa3lYr5j8DJhRg3KB5AIM/BBfg9Q==} + '@types/vscode-notebook-renderer@1.72.4': + resolution: {integrity: sha512-bdKO41c6Dc24pH/O/eM/jqfCwGH4zc76o/g/6Gt1y/eg/bvvqP2/VpbV+Sa5Te2sZekFRcbYnSSFTKo3wcVGUg==} '@types/vscode-webview@1.57.5': resolution: {integrity: sha512-iBAUYNYkz+uk1kdsq05fEcoh8gJmwT3lqqFPN7MGyjQ3HVloViMdo7ZJ8DFIP8WOK74PjOEilosqAyxV2iUFUw==} - '@types/vscode@1.102.0': - resolution: {integrity: sha512-V9sFXmcXz03FtYTSUsYsu5K0Q9wH9w9V25slddcxrh5JgORD14LpnOA7ov0L9ALi+6HrTjskLJ/tY5zeRF3TFA==} + '@types/vscode@1.106.1': + resolution: {integrity: sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==} '@types/webpack-env@1.18.8': resolution: {integrity: sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A==} @@ -9048,11 +10201,11 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@15.0.19': - resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} + '@types/yargs@15.0.20': + resolution: {integrity: sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==} - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} '@typescript-eslint/eslint-plugin@2.34.0': resolution: {integrity: sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==} @@ -9180,16 +10333,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.39.0': - resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@5.48.2': resolution: {integrity: sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@6.21.0': resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -9206,22 +10357,12 @@ packages: resolution: {integrity: sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.39.0': - resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.33.1': resolution: {integrity: sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/tsconfig-utils@8.39.0': - resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@5.48.2': resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9270,6 +10411,10 @@ packages: resolution: {integrity: sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -9286,10 +10431,6 @@ packages: resolution: {integrity: sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.39.0': - resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@2.34.0': resolution: {integrity: sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -9308,6 +10449,15 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/typescript-estree@6.21.0': resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -9338,18 +10488,18 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.39.0': - resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@5.48.2': resolution: {integrity: sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.21.0': resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -9376,17 +10526,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.39.0': - resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@5.48.2': resolution: {integrity: sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@6.21.0': resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -9403,12 +10550,8 @@ packages: resolution: {integrity: sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.39.0': - resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typespec/ts-http-runtime@0.3.0': - resolution: {integrity: sha512-sOx1PKSuFwnIl7z4RN0Ls7N9AQawmR9r66eI5rFCzLDIs8HTIYrIpH9QjYWoX0lkgGrkLxXhi4QnK7MizPRrIg==} + '@typespec/ts-http-runtime@0.3.2': + resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} engines: {node: '>=20.0.0'} '@uiw/codemirror-extensions-basic-setup@4.23.14': @@ -9427,22 +10570,107 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitest/expect@2.0.5': - resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + + '@vercel/oidc@3.0.5': + resolution: {integrity: sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw==} + engines: {node: '>= 20'} + + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} '@vitest/pretty-format@2.0.5': resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} @@ -9450,24 +10678,15 @@ packages: '@vitest/pretty-format@2.1.9': resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/spy@2.0.5': resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@2.0.5': resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} '@vitest/utils@2.1.9': resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vscode-logging/logger@2.0.0': resolution: {integrity: sha512-m5AsHLqNyC8OYmpXf4bA5Hm2gSrJcc2L7KUfA8wMH/GFDexeNSTi/O6rDdWFawxLZg3uQGETDx8xyMfMqCDp+w==} @@ -9487,68 +10706,68 @@ packages: resolution: {integrity: sha512-vaTZE65zigWwSWYB6yaZUAyVC/Ux+6U82hnzy/ejuS/KpFifO+0oORNd5yAoPeIRnYjvllM6ES3YlX4K5tUuww==} engines: {vscode: ^1.75.0} - '@vscode/iconv-lite-umd@0.7.0': - resolution: {integrity: sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==} + '@vscode/iconv-lite-umd@0.7.1': + resolution: {integrity: sha512-tK6k0DXFHW7q5+GGuGZO+phpAqpxO4WXl+BLc/8/uOk3RsM2ssAL3CQUQDb1TGfwltjsauhN6S4ghYZzs4sPFw==} '@vscode/test-electron@2.5.2': resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} engines: {node: '>=16'} - '@vscode/vsce-sign-alpine-arm64@2.0.5': - resolution: {integrity: sha512-XVmnF40APwRPXSLYA28Ye+qWxB25KhSVpF2eZVtVOs6g7fkpOxsVnpRU1Bz2xG4ySI79IRuapDJoAQFkoOgfdQ==} + '@vscode/vsce-sign-alpine-arm64@2.0.6': + resolution: {integrity: sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==} cpu: [arm64] os: [alpine] - '@vscode/vsce-sign-alpine-x64@2.0.5': - resolution: {integrity: sha512-JuxY3xcquRsOezKq6PEHwCgd1rh1GnhyH6urVEWUzWn1c1PC4EOoyffMD+zLZtFuZF5qR1I0+cqDRNKyPvpK7Q==} + '@vscode/vsce-sign-alpine-x64@2.0.6': + resolution: {integrity: sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==} cpu: [x64] os: [alpine] - '@vscode/vsce-sign-darwin-arm64@2.0.5': - resolution: {integrity: sha512-z2Q62bk0ptADFz8a0vtPvnm6vxpyP3hIEYMU+i1AWz263Pj8Mc38cm/4sjzxu+LIsAfhe9HzvYNS49lV+KsatQ==} + '@vscode/vsce-sign-darwin-arm64@2.0.6': + resolution: {integrity: sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==} cpu: [arm64] os: [darwin] - '@vscode/vsce-sign-darwin-x64@2.0.5': - resolution: {integrity: sha512-ma9JDC7FJ16SuPXlLKkvOD2qLsmW/cKfqK4zzM2iJE1PbckF3BlR08lYqHV89gmuoTpYB55+z8Y5Fz4wEJBVDA==} + '@vscode/vsce-sign-darwin-x64@2.0.6': + resolution: {integrity: sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==} cpu: [x64] os: [darwin] - '@vscode/vsce-sign-linux-arm64@2.0.5': - resolution: {integrity: sha512-Hr1o0veBymg9SmkCqYnfaiUnes5YK6k/lKFA5MhNmiEN5fNqxyPUCdRZMFs3Ajtx2OFW4q3KuYVRwGA7jdLo7Q==} + '@vscode/vsce-sign-linux-arm64@2.0.6': + resolution: {integrity: sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==} cpu: [arm64] os: [linux] - '@vscode/vsce-sign-linux-arm@2.0.5': - resolution: {integrity: sha512-cdCwtLGmvC1QVrkIsyzv01+o9eR+wodMJUZ9Ak3owhcGxPRB53/WvrDHAFYA6i8Oy232nuen1YqWeEohqBuSzA==} + '@vscode/vsce-sign-linux-arm@2.0.6': + resolution: {integrity: sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==} cpu: [arm] os: [linux] - '@vscode/vsce-sign-linux-x64@2.0.5': - resolution: {integrity: sha512-XLT0gfGMcxk6CMRLDkgqEPTyG8Oa0OFe1tPv2RVbphSOjFWJwZgK3TYWx39i/7gqpDHlax0AP6cgMygNJrA6zg==} + '@vscode/vsce-sign-linux-x64@2.0.6': + resolution: {integrity: sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==} cpu: [x64] os: [linux] - '@vscode/vsce-sign-win32-arm64@2.0.5': - resolution: {integrity: sha512-hco8eaoTcvtmuPhavyCZhrk5QIcLiyAUhEso87ApAWDllG7djIrWiOCtqn48k4pHz+L8oCQlE0nwNHfcYcxOPw==} + '@vscode/vsce-sign-win32-arm64@2.0.6': + resolution: {integrity: sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==} cpu: [arm64] os: [win32] - '@vscode/vsce-sign-win32-x64@2.0.5': - resolution: {integrity: sha512-1ixKFGM2FwM+6kQS2ojfY3aAelICxjiCzeg4nTHpkeU1Tfs4RC+lVLrgq5NwcBC7ZLr6UfY3Ct3D6suPeOf7BQ==} + '@vscode/vsce-sign-win32-x64@2.0.6': + resolution: {integrity: sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==} cpu: [x64] os: [win32] - '@vscode/vsce-sign@2.0.6': - resolution: {integrity: sha512-j9Ashk+uOWCDHYDxgGsqzKq5FXW9b9MW7QqOIYZ8IYpneJclWTBeHZz2DJCSKQgo+JAqNcaRRE1hzIx0dswqAw==} + '@vscode/vsce-sign@2.0.9': + resolution: {integrity: sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==} '@vscode/vsce@2.32.0': resolution: {integrity: sha512-3EFJfsgrSftIqt3EtdRcAygy/OJ3hstyI1cDmIgkU9CFZW5C+3djr6mfosndCUqcVYuyjmxOK1xmFp/Bq7+NIg==} engines: {node: '>= 16'} hasBin: true - '@vscode/vsce@3.4.2': - resolution: {integrity: sha512-U2gC7GiQc22nxRpWH4cdW16rRr5u9w+Bjsjm8g8mEjY4aeOG1U6/3XNGq+ElwdeoT8jAyhBmBAuYG7INcSe/6A==} + '@vscode/vsce@3.7.1': + resolution: {integrity: sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==} engines: {node: '>= 20'} hasBin: true @@ -9678,8 +10897,8 @@ packages: engines: {node: '>=10.0.0'} deprecated: this version is no longer supported, please update to at least 0.8.* - '@xmldom/xmldom@0.8.10': - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + '@xmldom/xmldom@0.8.11': + resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} engines: {node: '>=10.0.0'} '@xtuc/ieee754@1.2.0': @@ -9821,8 +11040,8 @@ packages: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - ai@5.0.59: - resolution: {integrity: sha512-SuAFxKXt2Ha9FiXB3gaOITkOg9ek/3QNVatGVExvTT4gNXc+hJpuNe1dmuwf6Z5Op4fzc8wdbsrYP27ZCXBzlw==} + ai@5.0.106: + resolution: {integrity: sha512-M5obwavxSJJ3tGlAFqI6eltYNJB0D20X6gIBCFx/KVorb/X1fxVVfiZZpZb+Gslu4340droSOjT0aKQFCarNVg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -9871,8 +11090,8 @@ packages: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} engines: {node: '>=0.4.2'} - anser@2.3.2: - resolution: {integrity: sha512-PMqBCBvrOVDRqLGooQb+z+t1Q0PiPyurUQeZRR5uHBOVZcW8B04KMmnT12USnhpNX2wCPagWzLVppQMUG3u0Dw==} + anser@2.3.3: + resolution: {integrity: sha512-QGY1oxYE7/kkeNmbtY/2ZjQ07BCG3zYdz+k/+sf69kMzEIxb93guHkPnIXITQ+BYi61oQwG74twMOX1tD4aesg==} ansi-align@2.0.0: resolution: {integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==} @@ -9904,8 +11123,8 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + ansi-escapes@7.2.0: + resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} ansi-html-community@0.0.8: @@ -9934,8 +11153,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@2.2.1: @@ -9954,8 +11173,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} ansi-to-html@0.6.15: @@ -10013,6 +11232,9 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -10205,8 +11427,8 @@ packages: autolinker@3.16.2: resolution: {integrity: sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==} - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + autoprefixer@10.4.22: + resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -10238,20 +11460,17 @@ packages: aws4fetch@1.0.20: resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==} - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + axe-core@4.11.0: + resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} engines: {node: '>=4'} - axios@1.12.0: - resolution: {integrity: sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==} + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - azure-devops-node-api@11.2.0: - resolution: {integrity: sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==} - azure-devops-node-api@12.5.0: resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} @@ -10338,6 +11557,12 @@ packages: peerDependencies: '@babel/core': ^7.8.0 + babel-jest@30.2.0: + resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 || ^8.0.0-0 + babel-loader@10.0.0: resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==} engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} @@ -10403,6 +11628,10 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} + babel-plugin-istanbul@7.0.1: + resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} + engines: {node: '>=12'} + babel-plugin-jest-hoist@20.0.3: resolution: {integrity: sha512-rnyXaCLaHX6BjzT9h4UI1xK7oobCwtLfhompk0qxbcQNhw8JEidggjO1KonVrpdd2+q3QAww3DwVdTYs0g373Q==} @@ -10417,6 +11646,10 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-jest-hoist@30.2.0: + resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + babel-plugin-macros@2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} @@ -10621,6 +11854,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + babel-preset-jest@30.2.0: + resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@babel/core': ^7.11.0 || ^8.0.0-beta.1 + babel-preset-react-app@3.1.2: resolution: {integrity: sha512-/sh5Qd5T08PYa6t4kuCdKh9tXp6/m/Jwyx7PJTqugsYMfsDUJMlBXOs5EwFODHprzjWrmQ0SydnMZu9FY4MZYg==} peerDependencies: @@ -10663,11 +11902,16 @@ packages: balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - bare-events@2.7.0: - resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} + bare-events@2.8.2: + resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true - bare-fs@4.4.4: - resolution: {integrity: sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==} + bare-fs@4.5.2: + resolution: {integrity: sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -10693,8 +11937,8 @@ packages: bare-events: optional: true - bare-url@2.2.2: - resolution: {integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==} + bare-url@2.3.2: + resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} base16@1.0.0: resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} @@ -10702,6 +11946,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.8.32: + resolution: {integrity: sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==} + hasBin: true + basic-auth@2.0.1: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} @@ -10764,12 +12012,12 @@ packages: blueimp-md5@2.19.0: resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + body-parser@1.20.4: + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + body-parser@2.2.1: + resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==} engines: {node: '>=18'} bonjour-service@1.3.0: @@ -10781,8 +12029,8 @@ packages: boundary@2.0.0: resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + bowser@2.13.1: + resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} boxen@1.3.0: resolution: {integrity: sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==} @@ -10831,8 +12079,8 @@ packages: deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools. hasBin: true - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.28.0: + resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -10897,6 +12145,10 @@ packages: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -10939,8 +12191,8 @@ packages: resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==} engines: {node: '>=18'} - cacheable@1.10.3: - resolution: {integrity: sha512-M6p10iJ/VT0wT7TLIGUnm958oVrU2cUK8pQAVU21Zu7h8rbk/PeRtRWrvHJBql97Bhzk3g1N6+2VKC+Rjxna9Q==} + cacheable@2.3.0: + resolution: {integrity: sha512-HHiAvOBmlcR2f3SQ7kdlYD8+AUJG+wlFZ/Ze8tl1Vzvz0MdOh8IYA/EFU4ve8t1/sZ0j4MGi7ST5MoTwHessQA==} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -11012,19 +12264,16 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-db@1.0.30001731: - resolution: {integrity: sha512-IbYSXiOfvIJmCRLkrE/hMSsTZTu48NBddgIgC027NnuPwu/V14PnO3UtHxoQGSA16b09zZJkCsaoLbwMSllZrA==} + caniuse-db@1.0.30001757: + resolution: {integrity: sha512-A1KAcawhlASOv4/RwYwfJKld9x9//MUFfqqj7hT6vriXiGxVD6B1ZVLdfksa0WzZfGeUVd6JdW8SV+SH6HMSFw==} - caniuse-lite@1.0.30001731: - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001757: + resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==} - canvas@3.1.2: - resolution: {integrity: sha512-Z/tzFAcBzoCvJlOSlCnoekh1Gu8YMn0J51+UAuXJAbW1Z6I9l2mZgdD7738MepoeeIcUdDtbMnOg6cC7GJxy/g==} + canvas@3.2.0: + resolution: {integrity: sha512-jk0GxrLtUEmW/TmFsk2WghvgHe8B0pxGilqCL21y8lHkPUGa6FTsnCNtHPOzT8O3y+N+m3espawV80bbBlgfTA==} engines: {node: ^18.12.0 || >= 20.9.0} - capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -11041,6 +12290,10 @@ packages: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} + case@1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} + caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -11054,8 +12307,8 @@ packages: resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} engines: {node: '>=4'} - chai@5.2.1: - resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} chainsaw@0.1.0: @@ -11077,13 +12330,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.5.0: - resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -11161,16 +12411,26 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cjs-module-lexer@2.1.1: + resolution: {integrity: sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==} + clap@1.2.3: resolution: {integrity: sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==} engines: {node: '>=0.10.0'} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -11182,6 +12442,9 @@ packages: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} + clean-set@1.1.2: + resolution: {integrity: sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -11226,9 +12489,9 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@5.1.1: + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} + engines: {node: '>=20'} cli-width@2.2.1: resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} @@ -11247,6 +12510,10 @@ packages: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} + clipboardy@5.0.1: + resolution: {integrity: sha512-pJ5ZDWjOT593Nli4TqlRLy33KomlAPxIFntMFxXrCqJON1cGcGPT5nNFxRxJ9m4HbfrccsYve7XwXjywW6nXVw==} + engines: {node: '>=20'} + cliui@3.2.0: resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} @@ -11286,6 +12553,20 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + cm6-theme-basic-light@0.2.0: + resolution: {integrity: sha512-1prg2gv44sYfpHscP26uLT/ePrh0mlmVwMSoSd3zYKQ92Ab3jPRLzyCnpyOCQLJbK+YdNs4HvMRqMNYdy4pMhA==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/highlight': ^1.0.0 + + cmdk@1.1.1: + resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -11312,8 +12593,8 @@ packages: codemirror: ^5.65.3 graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 - codemirror@5.65.19: - resolution: {integrity: sha512-+aFkvqhaAVr1gferNMuN8vkTSrWIFvzlMV9I2KBLCWS2WpZ2+UAkZjlMZmEuT+gcXTi6RrGQCkWq1/bDtGqhIA==} + codemirror@5.65.20: + resolution: {integrity: sha512-i5dLDDxwkFCbhjvL2pNjShsojoL3XHyDwsGv1jqETUoW+lzpBKKqNTUWgQwVAOa0tUm4BwekT455ujafi8payA==} codemirror@6.0.2: resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} @@ -11321,8 +12602,8 @@ packages: collapse-white-space@1.0.6: resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + collect-v8-coverage@1.0.3: + resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -11331,17 +12612,26 @@ packages: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-convert@3.1.3: + resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} + engines: {node: '>=14.6'} + color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@2.1.0: + resolution: {integrity: sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==} + engines: {node: '>=12.20'} + color-string@0.3.0: resolution: {integrity: sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-string@2.1.4: + resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} + engines: {node: '>=18'} color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} @@ -11350,8 +12640,9 @@ packages: color@0.11.4: resolution: {integrity: sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==} - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + color@5.0.3: + resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} + engines: {node: '>=18'} colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} @@ -11373,9 +12664,6 @@ packages: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -11402,8 +12690,8 @@ packages: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} - commander@14.0.0: - resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} commander@2.13.0: @@ -11434,6 +12722,10 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} @@ -11451,6 +12743,9 @@ packages: resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} + compute-scroll-into-view@2.0.4: + resolution: {integrity: sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g==} + concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} @@ -11458,6 +12753,11 @@ packages: concat-with-sourcemaps@1.1.0: resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + concurrently@9.2.1: + resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} + engines: {node: '>=18'} + hasBin: true + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -11479,19 +12779,20 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} content-type-parser@1.0.2: resolution: {integrity: sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==} @@ -11510,17 +12811,13 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} cookie-signature@1.2.2: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -11532,8 +12829,8 @@ packages: copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - copy-webpack-plugin@13.0.0: - resolution: {integrity: sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==} + copy-webpack-plugin@13.0.1: + resolution: {integrity: sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==} engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.1.0 @@ -11542,18 +12839,18 @@ packages: resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} hasBin: true - core-js-compat@3.45.0: - resolution: {integrity: sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==} + core-js-compat@3.47.0: + resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} - core-js-pure@3.45.0: - resolution: {integrity: sha512-OtwjqcDpY2X/eIIg1ol/n0y/X8A9foliaNt1dSK0gV3J2/zw+89FcNG3mPK+N8YWts4ZFUPxnrAzsxs/lf8yDA==} + core-js-pure@3.47.0: + resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==} core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. - core-js@3.45.0: - resolution: {integrity: sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==} + core-js@3.47.0: + resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -11624,8 +12921,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true - create-storybook@9.1.1: - resolution: {integrity: sha512-JrW3xqo1pbgsX1fvopjN6vZoFO+UyJbXv8sX2Gwvz3LMqwdQToEyUAn8KpOmHH3N+WnUd0tqC5TvK8g7bkk7YA==} + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + create-storybook@8.6.14: + resolution: {integrity: sha512-xrKGHu1w1zbZDTjNJffbLh1W2UrYP7ciHfKw92A3BDU/jmDZwmqKQqCfwzbh2iBc6vTdt/uUn0U76zpgQ6A4XA==} hasBin: true crelt@1.0.6: @@ -11802,8 +13102,8 @@ packages: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} cubic2quad@1.2.1: resolution: {integrity: sha512-wT5Y7mO8abrV16gnssKdmIhIbA9wSkeMzhh27jAguKrV82i24wER0vL5TGhUJ9dbJNDcigoRZ0IAHFEEEI4THQ==} @@ -11882,8 +13182,8 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -11927,8 +13227,8 @@ packages: dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dedent@1.6.0: - resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -11967,12 +13267,12 @@ packages: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + default-browser@5.4.0: + resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} engines: {node: '>=18'} default-require-extensions@1.0.0: @@ -12030,8 +13330,8 @@ packages: resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==} engines: {node: '>=14.16'} - del@8.0.0: - resolution: {integrity: sha512-R6ep6JJ+eOBZsBr9esiNN1gxFbZE4Q2cULkUSFumGYecAiS6qodDvcPx/sFuWHMNul7DWmrtoEOpYSm7o6tbSA==} + del@8.0.1: + resolution: {integrity: sha512-gPqh0mKTPvaUZGAuHbrBUYKZWBNAeHG7TU3QH5EhVwPMyKvmfJaNXhcD2jTcXsJRRcffuho4vaYweu80dRrMGA==} engines: {node: '>=18'} delayed-stream@1.0.0: @@ -12073,8 +13373,8 @@ packages: engines: {node: '>=0.10'} hasBin: true - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-newline@3.1.0: @@ -12104,8 +13404,8 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dexie@4.0.11: - resolution: {integrity: sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==} + dexie@4.2.1: + resolution: {integrity: sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==} diagnostic-channel-publishers@0.3.5: resolution: {integrity: sha512-AOIjw4T7Nxl0G2BoBPhkQ6i7T4bUd9+xvdYizwvG7vVAM1dvr+SDrcUudlmzwH0kbEwdR2V1EcnKT0wAeYLQNQ==} @@ -12248,6 +13548,11 @@ packages: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} + downshift@7.6.2: + resolution: {integrity: sha512-iOv+E1Hyt3JDdL9yYcOgW7nZ7GQ2Uz6YbggwXvKUSleetYhU2nXD482Rz6CzvM4lvI1At34BYruKAL4swRGxaA==} + peerDependencies: + react: '>=16.12.0' + drange@1.1.1: resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} engines: {node: '>=4'} @@ -12277,9 +13582,9 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - editions@6.21.0: - resolution: {integrity: sha512-ofkXJtn7z0urokN62DI3SBo/5xAtF0rR7tn+S/bSYV79Ka8pTajIIl+fFQ1q88DQEImymmo97M4azY3WX/nUdg==} - engines: {node: '>=4'} + editions@6.22.0: + resolution: {integrity: sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==} + engines: {ecmascript: '>= es5', node: '>=4'} ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -12289,8 +13594,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.198: - resolution: {integrity: sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==} + electron-to-chromium@1.5.263: + resolution: {integrity: sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==} email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} @@ -12302,8 +13607,8 @@ packages: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} @@ -12375,8 +13680,8 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - envinfo@7.14.0: - resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + envinfo@7.21.0: + resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==} engines: {node: '>=4'} hasBin: true @@ -12394,8 +13699,8 @@ packages: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -12441,8 +13746,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.39.8: - resolution: {integrity: sha512-A8QO9TfF+rltS8BXpdu8OS+rpGgEdnRhqIVxO/ZmNvnXBYgOdSsxukT55ELyP94gZIntWJ+Li9QRrT2u1Kitpg==} + es-toolkit@1.42.0: + resolution: {integrity: sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==} es5-ext@0.10.64: resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} @@ -12458,9 +13763,6 @@ packages: es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - es6-promisify@6.1.1: - resolution: {integrity: sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==} - es6-shim@0.35.8: resolution: {integrity: sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==} @@ -12479,8 +13781,8 @@ packages: peerDependencies: esbuild: '>=0.12 <1' - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} hasBin: true @@ -12488,6 +13790,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-carriage@1.3.1: + resolution: {integrity: sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -12600,8 +13905,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-refresh@0.4.20: - resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==} + eslint-plugin-react-refresh@0.4.24: + resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} peerDependencies: eslint: '>=8.40' @@ -12611,12 +13916,11 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-storybook@9.1.1: - resolution: {integrity: sha512-g4/i9yW6cl4TCEMzYyALNvO3d/jB6TDvSs/Pmye7dHDrra2B7dgZJGzmEWILD62brVrLVHNoXgy2dNPtx80kmw==} - engines: {node: '>=20.0.0'} + eslint-plugin-storybook@0.8.0: + resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} + engines: {node: '>= 18'} peerDependencies: - eslint: '>=8' - storybook: ^9.1.1 + eslint: '>=6' eslint-plugin-unused-imports@4.1.4: resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} @@ -12754,6 +14058,9 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@0.2.1: resolution: {integrity: sha512-6/I1dwNKk0N9iGOU3ydzAAurz4NPo/ttxZNCqgIVbWFvWyzWBSNonRrJ5CpjDuyBfmM7ENN7WCzUi9aT/UPXXQ==} @@ -12839,9 +14146,17 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} + exenv-es6@1.1.1: resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==} + exit-x@0.2.2: + resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} + engines: {node: '>= 0.8.0'} + exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -12865,8 +14180,12 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - exponential-backoff@3.1.2: - resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + expect@30.2.0: + resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} express-rate-limit@7.5.1: resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} @@ -12874,12 +14193,12 @@ packages: peerDependencies: express: '>= 4.11' - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + express@4.22.1: + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} ext@1.7.0: @@ -12915,9 +14234,9 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} - fantasticon@1.2.3: - resolution: {integrity: sha512-VoPXI8+wbLq4qooK2LAFRcqKtOCR20+InF/Io/9I1kLp3IT+LwqJgeFijFvp9a3HRZptfCAxNvazoVHn4kihzQ==} - engines: {node: '>= 10.0.0'} + fantasticon@3.0.0: + resolution: {integrity: sha512-PylulixZA8I0SeiUKtuyOhwrz/ojZTSA1KXddipvEyQXCVrpPMTnSXzaE9nXXK7nCjJWFkqoBAQ1aBdaxMltrg==} + engines: {node: '>= 16.0.0'} hasBin: true fast-deep-equal@1.1.0: @@ -12955,8 +14274,8 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fast-xml-parser@5.2.5: resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} @@ -12975,6 +14294,9 @@ packages: fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} @@ -12994,11 +14316,15 @@ packages: fbjs@3.0.5: resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + fd-package-json@1.2.0: + resolution: {integrity: sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==} + fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -13023,8 +14349,12 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-entry-cache@10.1.3: - resolution: {integrity: sha512-D+w75Ub8T55yor7fPgN06rkCAUbAYw2vpxJmmjv/GDAcvCnv9g7IvHhIZoxzRZThrXPFI2maeY24pPbtyYU7Lg==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@11.1.1: + resolution: {integrity: sha512-TPVFSDE7q91Dlk1xpFLvFllf8r0HyOMOlnWy7Z2HBku5H3KhIeOGInexrIeg2D64DosVB/JXkrrk6N/7Wriq4A==} file-entry-cache@5.0.1: resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} @@ -13095,13 +14425,13 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} find-cache-dir@1.0.0: resolution: {integrity: sha512-46TFiBOzX7xq/PcSWfFwkyjpemdRnMe31UQF+os0y+1W3k95f6R4SEt02Hj4p3X0Mir9gfrkmOtshFidS0VPUg==} @@ -13169,8 +14499,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flat-cache@6.1.12: - resolution: {integrity: sha512-U+HqqpZPPXP5d24bWuRzjGqVqUcw64k4nZAbruniDwdRg0H10tvN7H6ku1tjhA4rg5B9GS3siEvwO2qjJJ6f8Q==} + flat-cache@6.1.19: + resolution: {integrity: sha512-l/K33newPTZMTGAnnzaiqSl6NnH7Namh8jBNjrgjprWxGmZUuxx/sJNIRaijOh3n7q7ESbhNZC+pvVZMFdeU4A==} flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} @@ -13186,8 +14516,8 @@ packages: resolution: {integrity: sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==} deprecated: flatten is deprecated in favor of utility frameworks such as lodash. - flow-parser@0.278.0: - resolution: {integrity: sha512-9oUcYDHf9n+E/t0FXndgBqGbaUsGEcmWqIr1ldqCzTzctsJV5E/bHusOj4ThB72Ss2mqWpLFNz0+o2c1O8J6+A==} + flow-parser@0.291.0: + resolution: {integrity: sha512-MLqjFn72Dvndqrkjy280HaIs4AV9Z6nxVRmNPO3TjbYcipg4hR7QX7tEYZYsVvaaZWZPGe6Mithluk2aPGlDOw==} engines: {node: '>=0.4.0'} flush-write-stream@1.1.1: @@ -13271,8 +14601,8 @@ packages: resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} engines: {node: '>= 18'} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} format@0.2.2: @@ -13287,8 +14617,8 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} framer-motion@6.5.1: resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} @@ -13325,8 +14655,8 @@ packages: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} - fs-extra@11.3.1: - resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} fs-extra@3.0.1: @@ -13405,6 +14735,10 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + generic-names@4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} @@ -13412,9 +14746,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - geometry-interfaces@1.1.4: - resolution: {integrity: sha512-qD6OdkT6NcES9l4Xx3auTpwraQruU7dARbQPVO71MKvkGYw5/z/oIiGymuFXrRaEQa5Y67EIojUpaLeGEa5hGA==} - get-caller-file@1.0.3: resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==} @@ -13422,8 +14753,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-func-name@2.0.2: @@ -13534,6 +14865,12 @@ packages: peerDependencies: glob: '*' + glob-to-regex.js@1.2.0: + resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + glob-to-regexp@0.3.0: resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} @@ -13544,12 +14881,12 @@ packages: resolution: {integrity: sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==} engines: {node: '>= 0.10'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true - glob@11.0.3: - resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} hasBin: true @@ -13683,8 +15020,8 @@ packages: peerDependencies: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 - graphql@16.11.0: - resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} growly@1.3.0: @@ -13768,6 +15105,10 @@ packages: resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} + hashery@1.3.0: + resolution: {integrity: sha512-fWltioiy5zsSAs9ouEnvhsVJeAXRybGCNNv0lvzpzNOSDbULXRy7ivFWwCCv4I5Am6kSo75hmbsCduOoc2/K4w==} + engines: {node: '>=20'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -13830,9 +15171,6 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - heap@0.2.5: resolution: {integrity: sha512-G7HLD+WKcrOyJP5VQwYZNC3Z6FcQ7YYjEFiFoIj8PfEr73mu421o8B1N5DKUcc8K37EsJ2XXWA8DtrDz/2dReg==} @@ -13860,8 +15198,8 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} - hookified@1.11.0: - resolution: {integrity: sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==} + hookified@1.13.0: + resolution: {integrity: sha512-6sPYUY8olshgM/1LDNW4QZQN0IqgKhtl/1C8koNZBJrKLBk3AZl6chQtNwpNztvfiApHMEwMHek5rv993PRbWw==} hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -13943,8 +15281,8 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 - html-webpack-plugin@5.6.3: - resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} + html-webpack-plugin@5.6.5: + resolution: {integrity: sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==} engines: {node: '>=10.13.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -13975,6 +15313,10 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + http-parser-js@0.5.10: resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} @@ -14040,8 +15382,12 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - humanize-duration@3.33.0: - resolution: {integrity: sha512-vYJX7BSzn7EQ4SaP2lPYVy+icHDppB6k7myNeI3wrSRfwMS5+BHyGgzpHR0ptqJ2AQ6UuIKrclSg5ve6Ci4IAQ==} + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + humanize-duration@3.33.1: + resolution: {integrity: sha512-hwzSCymnRdFx9YdRkQQ0OYequXiVAV6ZGQA2uzocwB0F4309Ke6pO8dg0P8LHhRQJyVjGteRTAA/zNfEcpXn8A==} humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} @@ -14068,6 +15414,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + icss-replace-symbols@1.1.0: resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} @@ -14113,8 +15463,8 @@ packages: resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} engines: {node: '>=0.10.0'} - immutable@5.1.3: - resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==} + immutable@5.1.4: + resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} import-cwd@3.0.0: resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} @@ -14153,6 +15503,10 @@ packages: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + indexes-of@1.0.1: resolution: {integrity: sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==} @@ -14175,8 +15529,8 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} inquirer@3.3.0: resolution: {integrity: sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==} @@ -14201,8 +15555,12 @@ packages: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} - intl-messageformat@10.7.16: - resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==} + intersection-observer@0.10.0: + resolution: {integrity: sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==} + deprecated: The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019. + + intl-messageformat@10.7.18: + resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==} invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -14211,8 +15569,8 @@ packages: resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} engines: {node: '>=0.10.0'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} ip-regex@2.1.0: @@ -14230,8 +15588,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + ipaddr.js@2.3.0: + resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} engines: {node: '>= 10'} is-absolute-url@2.1.0: @@ -14265,9 +15623,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -14378,12 +15733,8 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} is-function@1.0.2: @@ -14397,8 +15748,8 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@2.0.1: @@ -14454,8 +15805,8 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-network-error@1.1.0: - resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + is-network-error@1.3.0: + resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} engines: {node: '>=16'} is-npm@1.0.0: @@ -14622,6 +15973,10 @@ packages: is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + is-wayland@0.1.0: + resolution: {integrity: sha512-QkbMsWkIfkrzOPxenwye0h56iAXirZYHG9eHVPb22fO9y+wPbaX/CHacOWBa/I++4ohTcByimhM1/nyCsH8KNA==} + engines: {node: '>=20'} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -14744,11 +16099,15 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + istanbul-reports@1.5.1: resolution: {integrity: sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} istanbul@0.4.5: @@ -14796,10 +16155,18 @@ packages: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-changed-files@30.2.0: + resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-circus@29.7.0: resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-circus@30.2.0: + resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-cli@20.0.4: resolution: {integrity: sha512-OfQTkV6T5+V+c3hbzGVJl1SqTOmIw7dBIZYl6XDdSNOmhoyCmwNh/dsEs0lgqIMZkF+AeLbRswkH91XBVXyKqg==} engines: {node: '>= 4'} @@ -14820,6 +16187,16 @@ packages: node-notifier: optional: true + jest-cli@30.2.0: + resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jest-config@20.0.4: resolution: {integrity: sha512-9urceXnsfO+DXNGrzeDFKx/IAFpUljbvaiPZEn1sWuF97QN0Ppt7yXmnPoAOylwxpNK1t9lWUER5eeoH63rPCA==} @@ -14842,6 +16219,21 @@ packages: ts-node: optional: true + jest-config@30.2.0: + resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + peerDependencies: + '@types/node': '*' + esbuild-register: '>=3.4.0' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + esbuild-register: + optional: true + ts-node: + optional: true + jest-diff@20.0.3: resolution: {integrity: sha512-DITOXlTg0HDL9QKiVpf82vDu/nva60/V9xp056zjnAYpHVTZlJgfLMIHJmgPCoSu0+7n7QUAfxyFUHUGyHLFSw==} @@ -14856,6 +16248,10 @@ packages: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-diff@30.2.0: + resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-docblock@20.0.3: resolution: {integrity: sha512-lHwefzd+CB38Awy4yiWb8he+ovUXjNeuN4tNQ1sa6/vBh6P7XwpiuSDIs4GH6/yE1uDBUaYiaf/msD7cWMTL7g==} @@ -14867,6 +16263,10 @@ packages: resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-docblock@30.2.0: + resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-each@25.5.0: resolution: {integrity: sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==} engines: {node: '>= 8.3'} @@ -14875,6 +16275,10 @@ packages: resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@30.2.0: + resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-environment-jsdom@20.0.3: resolution: {integrity: sha512-SSm2oCtH0kBYdXhEMzZDFM4GU/auz4x7yv8AGduAZSZP5loKYHLNoKfVlyN1iFQ+vCJ+1QSS+sVnUARSwaBqbw==} @@ -14908,6 +16312,10 @@ packages: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-node@30.2.0: + resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-get-type@22.4.3: resolution: {integrity: sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==} @@ -14934,6 +16342,10 @@ packages: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@30.2.0: + resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-jasmine2@20.0.4: resolution: {integrity: sha512-XNHvFt9iljOaSSZU5t5dC9kJtrcM+KnVbw0Qa/BpGZlrorqS+m0iWiAJO2xXcGMimCmhT4NLZAS1v/JBGWR8Cg==} @@ -14952,6 +16364,10 @@ packages: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-leak-detector@30.2.0: + resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-matcher-utils@20.0.3: resolution: {integrity: sha512-eSNh2n3aXULZUbherq5+lZVdpUau8sniowi1tcc1ZueBk/97avAwwoDwBVvxI9JINVrPTsCI51SiQtrjBkVvPw==} @@ -14966,6 +16382,10 @@ packages: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@30.2.0: + resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-matchers@20.0.3: resolution: {integrity: sha512-aDlp50L8qPJ+Y+tifrlKewT0ZU1uC9OP7GJ5T0UKSw/wB73wf6jKEAZUqyA67BocW8BZD7qVVWHasm7u2D1CMQ==} @@ -14983,6 +16403,10 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@30.2.0: + resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-mock@20.0.3: resolution: {integrity: sha512-Edmuskld6ImmUuqxhbwwX5fDXQlFC/fe3XcZKVwK9SnbetIFyivTaub71ZbL5uuWdkvr4VggcyxlhdnpsIlRvg==} @@ -14997,6 +16421,10 @@ packages: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@30.2.0: + resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-pnp-resolver@1.2.3: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} @@ -15024,6 +16452,10 @@ packages: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-regex-util@30.0.1: + resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve-dependencies@20.0.3: resolution: {integrity: sha512-k0DK242umC88ih4KKH1jVlXBulQJfOmMXV/nMMfqRgeFKbBYfUROLZkz0zr8TON5WfnuiHV5GotqE0pXoqg08A==} @@ -15035,6 +16467,10 @@ packages: resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve-dependencies@30.2.0: + resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve@20.0.4: resolution: {integrity: sha512-n/u93CugulXmQ8FcHHGv1kUEFagsbXsJgKLK2G4eAdmawHObAc6DgJtOVp9hgNJOGRU6c6ozdB5nzMO02Fecig==} @@ -15049,6 +16485,10 @@ packages: resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@30.2.0: + resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-runner@25.5.4: resolution: {integrity: sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==} engines: {node: '>= 8.3'} @@ -15057,6 +16497,10 @@ packages: resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@30.2.0: + resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-runtime@20.0.4: resolution: {integrity: sha512-NTGhGRKhfM19w0egxges3hhIO8gPXB2H6Txaie3+AZIHF+VZCItH27uEFzU6cQTdwzcWaiieYgCAfGKNeUUf7g==} hasBin: true @@ -15070,6 +16514,10 @@ packages: resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@30.2.0: + resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-serializer@25.5.0: resolution: {integrity: sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==} engines: {node: '>= 8.3'} @@ -15092,6 +16540,10 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-snapshot@30.2.0: + resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-util@20.0.3: resolution: {integrity: sha512-Ig/4sAywd/7YJe3jUOIyj+NaX7NCQnxMc/lfRezvbkceZDye0mch126UfIzqyBdS2gjxQl7S8yERvcZDMvK1NA==} @@ -15110,6 +16562,10 @@ packages: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@30.2.0: + resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-validate@20.0.3: resolution: {integrity: sha512-yIpGo3le6q+ZPID2UCl58FRM4ZVGZK9qu1RaWSbEnZFUcj08XznJWd6g2HbPqsWCY9abBO3hq2aP5GZveEfGUg==} @@ -15124,6 +16580,10 @@ packages: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-validate@30.2.0: + resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-watch-typeahead@0.5.0: resolution: {integrity: sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ==} @@ -15135,6 +16595,10 @@ packages: resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@30.2.0: + resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-worker@24.9.0: resolution: {integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==} engines: {node: '>= 6'} @@ -15155,6 +16619,10 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@30.2.0: + resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest@20.0.4: resolution: {integrity: sha512-MU1kGBtzhDHwasL1BbuFmlIlwseDXy18p/M3hB7ehifac8FCbj6nJf8ihGtBA594tlUcktotHHd8z42V47ZB1g==} engines: {node: '>= 4'} @@ -15175,17 +16643,30 @@ packages: node-notifier: optional: true + jest@30.2.0: + resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jose@6.1.3: + resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jpjs@1.2.1: resolution: {integrity: sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw==} @@ -15205,24 +16686,13 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@3.7.0: - resolution: {integrity: sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jschardet@3.1.4: resolution: {integrity: sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==} engines: {node: '>=0.1.90'} @@ -15236,8 +16706,8 @@ packages: '@babel/preset-env': optional: true - jsdoc-type-pratt-parser@4.1.0: - resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + jsdoc-type-pratt-parser@4.8.0: + resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==} engines: {node: '>=12.0.0'} jsdom@11.12.0: @@ -15272,11 +16742,6 @@ packages: resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==} hasBin: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -15288,10 +16753,6 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-parse-even-better-errors@3.0.2: - resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - json-schema-to-ts@3.1.1: resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} engines: {node: '>=16'} @@ -15346,8 +16807,8 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonify@0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} @@ -15378,8 +16839,8 @@ packages: jwa@1.4.2: resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.3: + resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} @@ -15391,8 +16852,8 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyv@5.5.0: - resolution: {integrity: sha512-QG7qR2tijh1ftOvClut4YKKg1iW6cx3GZsKoGyJPxHkGWK9oJhG9P3j5deP0QQOGDowBMVQFaP+Vm4NpGYvmIQ==} + keyv@5.5.4: + resolution: {integrity: sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==} kill-port@2.0.1: resolution: {integrity: sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==} @@ -15430,8 +16891,8 @@ packages: resolution: {integrity: sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==} engines: {node: '>=4'} - launch-editor@2.11.0: - resolution: {integrity: sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ==} + launch-editor@2.12.0: + resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} lazy-universal-dotenv@3.0.1: resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} @@ -15465,6 +16926,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lexical@0.17.1: + resolution: {integrity: sha512-72/MhR7jqmyqD10bmJw8gztlCm4KDDT+TPtU4elqXrEvHoO5XENi34YAEUD9gIkPfqSwyLa9mwAX1nKzIr5xEA==} + lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} @@ -15479,34 +16943,30 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lines-and-columns@2.0.4: - resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - linkify-it@3.0.3: resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@16.1.4: - resolution: {integrity: sha512-xy7rnzQrhTVGKMpv6+bmIA3C0yET31x8OhKBYfvGo0/byeZ6E0BjGARrir3Kg/RhhYHutpsi01+2J5IpfVoueA==} + lint-staged@16.2.7: + resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} engines: {node: '>=20.17'} hasBin: true listenercount@1.0.1: resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} - listr2@9.0.1: - resolution: {integrity: sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==} + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} load-json-file@1.1.0: resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} engines: {node: '>=0.10.0'} - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} loader-utils@0.2.17: @@ -15671,6 +17131,9 @@ packages: long-timeout@0.1.1: resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -15688,8 +17151,8 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - loupe@3.2.0: - resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lower-case@1.1.4: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} @@ -15711,8 +17174,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} engines: {node: 20 || >=22} lru-cache@4.1.5: @@ -15732,8 +17195,13 @@ packages: lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - luxon@3.7.1: - resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==} + lucide-react@0.523.0: + resolution: {integrity: sha512-rUjQoy7egZT9XYVXBK1je9ckBnNp7qzRZOhLQx5RcEp2dCGlXo+mv6vf7Am4LimEcFBJIIZzSGfgTqc9QCrPSw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + luxon@3.7.2: + resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} lz-string@1.5.0: @@ -15743,8 +17211,12 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} make-cancellable-promise@1.3.2: resolution: {integrity: sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==} @@ -15807,11 +17279,14 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - markdown-to-jsx@7.7.13: - resolution: {integrity: sha512-DiueEq2bttFcSxUs85GJcQVrOr0+VVsPfj9AEUPqmExJ3f8P/iQNvZHltV4tm1XVhu1kl0vWBZWT3l99izRMaA==} + markdown-to-jsx@7.7.17: + resolution: {integrity: sha512-7mG/1feQ0TX5I7YyMZVDgCC/y2I3CiEhIRQIhyov9nGBP5eoVrOXXHuL5ZP8GRfxVZKRiXWJgwXkb9It+nQZfQ==} engines: {node: '>= 10'} peerDependencies: react: '>= 0.14.0' + peerDependenciesMeta: + react: + optional: true matches-selector@0.0.1: resolution: {integrity: sha512-Bm8wuvuNGPY3j1Mo23PxieRQAmQQe2qVcqgmpHOp1BEBNgb4dqzn2Dcgu5bYltMosjGi6LD7GPW72zboSdyJQg==} @@ -15832,12 +17307,18 @@ packages: mdast-util-definitions@4.0.0: resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + mdast-util-directive@3.1.0: + resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} mdast-util-from-markdown@2.0.2: resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + mdast-util-gfm-autolink-literal@2.0.1: resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} @@ -15862,6 +17343,9 @@ packages: mdast-util-mdx-jsx@3.2.0: resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + mdast-util-mdxjs-esm@2.0.1: resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} @@ -15874,8 +17358,8 @@ packages: mdast-util-to-hast@10.0.1: resolution: {integrity: sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==} - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -15918,9 +17402,8 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} - memfs@4.36.0: - resolution: {integrity: sha512-mfBfzGUdoEw5AZwG8E965ej3BbvW2F9LxEWj4uLxF6BEh1dO2N9eS3AGu9S6vfenuQYrVjsbUOOZK7y3vz4vyQ==} - engines: {node: '>= 4.0.0'} + memfs@4.51.1: + resolution: {integrity: sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==} memoizee@0.4.17: resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} @@ -15969,8 +17452,8 @@ packages: merge@1.2.1: resolution: {integrity: sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==} - meros@1.3.1: - resolution: {integrity: sha512-eV7dRObfTrckdmAz4/n7pT1njIsIJXRIZkgCiX43xEsPNy4gjXQzOYYxmGcolAMtF7HyfqRuDBh3Lgs4hmhVEw==} + meros@1.3.2: + resolution: {integrity: sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==} engines: {node: '>=13'} peerDependencies: '@types/node': '>=13' @@ -15991,6 +17474,12 @@ packages: micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} + + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + micromark-extension-gfm-autolink-literal@2.1.0: resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} @@ -16012,12 +17501,30 @@ packages: micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + micromark-factory-destination@2.0.1: resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} micromark-factory-label@2.0.1: resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + micromark-factory-space@2.0.1: resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} @@ -16048,6 +17555,9 @@ packages: micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + micromark-util-html-tag-name@2.0.1: resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} @@ -16076,6 +17586,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -16084,13 +17598,17 @@ packages: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} @@ -16130,15 +17648,15 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + min-document@2.19.2: + resolution: {integrity: sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==} min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - mini-css-extract-plugin@2.9.3: - resolution: {integrity: sha512-tRA0+PsS4kLVijnN1w9jUu5lkxBwUk9E8SbgEB5dBJqchE6pVYdawROG6uQtpmAri7tdCK9i7b1bULeVWqS6Ag==} + mini-css-extract-plugin@2.9.4: + resolution: {integrity: sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -16150,8 +17668,8 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} minimatch@3.0.3: @@ -16240,16 +17758,16 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} mocha@10.8.2: resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} engines: {node: '>= 14.0.0'} hasBin: true - mocha@11.7.1: - resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==} + mocha@11.7.5: + resolution: {integrity: sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -16316,11 +17834,11 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.23.0: - resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} + nan@2.23.1: + resolution: {integrity: sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==} - nano-spawn@1.0.2: - resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} + nano-spawn@2.0.0: + resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} engines: {node: '>=20.17'} nanoid@3.3.11: @@ -16328,8 +17846,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.5: - resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} + nanoid@5.1.6: + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} engines: {node: ^18 || >=20} hasBin: true @@ -16339,6 +17857,11 @@ packages: napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -16382,8 +17905,8 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-abi@3.75.0: - resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} + node-abi@3.85.0: + resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==} engines: {node: '>=10'} node-abort-controller@3.1.1: @@ -16415,6 +17938,15 @@ packages: node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@2.6.13: + resolution: {integrity: sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -16428,8 +17960,8 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + node-forge@1.3.2: + resolution: {integrity: sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==} engines: {node: '>= 6.13.0'} node-gyp-build@4.8.4: @@ -16449,6 +17981,12 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-loader@2.0.0: + resolution: {integrity: sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^5.0.0 + node-loader@2.1.0: resolution: {integrity: sha512-OwjPkyh8+7jW8DMd/iq71uU1Sspufr/C2+c3t0p08J3CrM9ApZ4U53xuisNrDXOHyGi5OYHgtfmmh+aK9zJA6g==} engines: {node: '>= 10.13.0'} @@ -16461,12 +17999,12 @@ packages: node-notifier@6.0.0: resolution: {integrity: sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - node-sarif-builder@2.0.3: - resolution: {integrity: sha512-Pzr3rol8fvhG/oJjIq2NTVB0vmdNNlz22FENhhPojYRZ4/ee08CfK4YuKmuL54V9MLhI1kpzxfOJ/63LzmZzDg==} - engines: {node: '>=14'} + node-sarif-builder@3.3.1: + resolution: {integrity: sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==} + engines: {node: '>=20'} node-schedule@2.1.1: resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} @@ -16515,8 +18053,8 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - normalize-url@8.0.2: - resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} + normalize-url@8.1.0: + resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} engines: {node: '>=14.16'} npm-run-path@2.0.2: @@ -16531,6 +18069,10 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + npmlog@4.1.2: resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} deprecated: This package is no longer supported. @@ -16560,8 +18102,8 @@ packages: nwmatcher@1.4.4: resolution: {integrity: sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==} - nwsapi@2.2.21: - resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} + nwsapi@2.2.22: + resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} nypm@0.5.4: resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} @@ -16699,6 +18241,9 @@ packages: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} + orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + original@1.0.2: resolution: {integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==} @@ -16722,6 +18267,9 @@ packages: resolution: {integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==} deprecated: This package is no longer supported. + outvariant@1.4.0: + resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -16778,6 +18326,10 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@6.2.0: + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} + engines: {node: '>=18'} + p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} @@ -16818,8 +18370,8 @@ packages: resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} engines: {node: '>=12'} - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} engines: {node: '>=18'} p-queue@6.6.2: @@ -16885,9 +18437,13 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-json@7.1.1: - resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} - engines: {node: '>=16'} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} @@ -16927,9 +18483,6 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - path-dirname@1.0.2: resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} @@ -16975,8 +18528,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} engines: {node: 20 || >=22} path-to-regexp@0.1.12: @@ -16985,9 +18538,11 @@ packages: path-to-regexp@1.9.0: resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} path-type@1.1.0: resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} @@ -17096,8 +18651,12 @@ packages: pkce-challenge@3.1.0: resolution: {integrity: sha512-bQ/0XPZZ7eX+cdAkd61uYWpfMhakH3NeteUF1R8GNa+LMqX8QFAkbCLqq+AYAns1/ueACBu/BMWhrlKGrdvGZg==} - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + pkce-challenge@4.1.0: + resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==} + engines: {node: '>=16.20.0'} + + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} pkg-dir@2.0.0: @@ -17123,13 +18682,13 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.52.0: - resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} + playwright-core@1.55.1: + resolution: {integrity: sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==} engines: {node: '>=18'} hasBin: true - playwright@1.52.0: - resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} + playwright@1.55.1: + resolution: {integrity: sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==} engines: {node: '>=18'} hasBin: true @@ -17158,8 +18717,8 @@ packages: popmotion@11.0.3: resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} - portfinder@1.0.37: - resolution: {integrity: sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==} + portfinder@1.0.38: + resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} engines: {node: '>= 10.12'} possible-typed-array-names@1.1.0: @@ -17246,8 +18805,8 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 @@ -17268,16 +18827,22 @@ packages: ts-node: optional: true - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} peerDependencies: + jiti: '>=1.21.0' postcss: '>=8.0.9' - ts-node: '>=9.0.0' + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: + jiti: + optional: true postcss: optional: true - ts-node: + tsx: + optional: true + yaml: optional: true postcss-load-options@1.2.0: @@ -17299,8 +18864,8 @@ packages: postcss: ^7.0.0 || ^8.0.1 webpack: ^4.0.0 || ^5.0.0 - postcss-loader@8.1.1: - resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + postcss-loader@8.2.0: + resolution: {integrity: sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -17540,8 +19105,8 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} postcss-svgo@2.1.6: @@ -17604,6 +19169,10 @@ packages: resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} engines: {node: '>=0.10.0'} + presentable-error@0.0.1: + resolution: {integrity: sha512-E6rsNU1QNJgB3sjj7OANinGncFKuK+164sLXw1/CqBjj/EkXSoSdHCtWQGBNlREIGLnL7IEUEGa08YFVUbrhVg==} + engines: {node: '>=16'} + prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} @@ -17656,10 +19225,18 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@30.2.0: + resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + prism-react-renderer@2.4.1: resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} peerDependencies: @@ -17737,6 +19314,46 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + prosemirror-commands@1.7.1: + resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} + + prosemirror-gapcursor@1.4.0: + resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==} + + prosemirror-history@1.5.0: + resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} + + prosemirror-inputrules@1.5.1: + resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} + + prosemirror-keymap@1.2.3: + resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} + + prosemirror-markdown@1.13.2: + resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==} + + prosemirror-model@1.25.4: + resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==} + + prosemirror-schema-basic@1.2.4: + resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} + + prosemirror-schema-list@1.5.1: + resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} + + prosemirror-state@1.4.4: + resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} + + prosemirror-transform@1.10.5: + resolution: {integrity: sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==} + + prosemirror-view@1.41.4: + resolution: {integrity: sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==} + + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -17786,6 +19403,9 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pure-rand@7.0.1: + resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} + q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -17794,9 +19414,9 @@ packages: (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + qified@0.5.2: + resolution: {integrity: sha512-7gJ6mxcQb9vUBOtbKm5mDevbe2uRcOEVp1g4gb/Q+oLntB3HY8eBhOYRxFI2mlDFlY1e4DOSCptzxarXRvzxCA==} + engines: {node: '>=20'} qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} @@ -17845,17 +19465,21 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} raw-loader@4.0.2: resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} @@ -17898,6 +19522,9 @@ packages: resolution: {integrity: sha512-Mvs6ofsc2xTjeZIrMaIfbXfsPVrbdVy/cVqq6SAacnqfMlcBpDuivhWZ1ODGeJ8HgmyWTLH971PYjj/EPCDVAw==} engines: {node: '>=6'} + react-devtools-inline@4.4.0: + resolution: {integrity: sha512-ES0GolSrKO8wsKbsEkVeiR/ZAaHQTY4zDh1UW8DImVmm8oaGLl3ijJDvSGe+qDRKPZdPRnDtWWnSvvrgxXdThQ==} + react-dnd-html5-backend@16.0.1: resolution: {integrity: sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==} @@ -17930,15 +19557,16 @@ packages: resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} engines: {node: '>=16.14.0'} - react-docgen@8.0.0: - resolution: {integrity: sha512-kmob/FOTwep7DUWf9KjuenKX0vyvChr3oTdvvPt09V60Iz75FJp+T/0ZeHMbAfJj2WaVWqAPP5Hmm3PYzSPPKg==} - engines: {node: ^20.9.0 || >=22} - react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react-dom@19.1.0: resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} peerDependencies: @@ -17956,6 +19584,12 @@ packages: react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + react-error-boundary@3.1.4: + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: '>=16.13.1' + react-error-boundary@6.0.0: resolution: {integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==} peerDependencies: @@ -18020,8 +19654,8 @@ packages: peerDependencies: react: ^16.8.4 || ^17.0.0 || ^18.0.0 - react-intl@7.1.11: - resolution: {integrity: sha512-tnVoRCWvW5Ie2ikYSdPF7z3+880yCe/9xPmitFeRPw3RYDcCfR4m8ZYa4MBq19W4adt9Z+PQA4FaMBCJ7E+HCQ==} + react-intl@7.1.14: + resolution: {integrity: sha512-VE/0Wi/lHJlBC7APQpCzLUdIt3GB5B0GZrRW8Q+ACbkHI4j+Wwgg9J1TniN6zmLHmPH5gxXcMy+fkSPfw5p1WQ==} peerDependencies: react: 16 || 17 || 18 || 19 typescript: ^5.6.0 @@ -18041,11 +19675,11 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-is@19.1.1: - resolution: {integrity: sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==} + react-is@19.2.0: + resolution: {integrity: sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==} - react-json-view-lite@2.4.2: - resolution: {integrity: sha512-m7uTsXDgPQp8R9bJO4HD/66+i218eyQPAb+7/dGQpwg8i4z2afTFqtHJPQFHvJfgDCjGQ1HSGlL3HtrZDa3Tdg==} + react-json-view-lite@2.5.0: + resolution: {integrity: sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g==} engines: {node: '>=18'} peerDependencies: react: ^18.0.0 || ^19.0.0 @@ -18070,6 +19704,12 @@ packages: '@types/react': '>=18' react: '>=18' + react-markdown@9.0.3: + resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + react-monaco-editor@0.58.0: resolution: {integrity: sha512-e8JH0TQEzO96Wd/EXgzc9M9tQK1pxBECD+8GNob9slMURcCM36TiVrgc4topWCDGYxRuMj8IEkaX+s3eQcUUqw==} peerDependencies: @@ -18123,8 +19763,8 @@ packages: '@types/react': optional: true - react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} engines: {node: '>=10'} peerDependencies: '@types/react': '*' @@ -18140,6 +19780,12 @@ packages: peerDependencies: typescript: 3.x.x + react-simple-code-editor@0.14.1: + resolution: {integrity: sha512-BR5DtNRy+AswWJECyA17qhUDvrrCZ6zXOCfkQY5zSmb96BVUbpVAv03WpcjcwtCwiLbIANx3gebHOcXYn1EHow==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + react-split-pane@0.1.92: resolution: {integrity: sha512-GfXP1xSzLMcLJI5BM36Vh7GgZBpy+U/X0no+VM3fxayv+p1Jly5HpMofZJraeaMl73b3hvlr+N9zJKvLB/uz9w==} peerDependencies: @@ -18159,8 +19805,8 @@ packages: '@types/react': optional: true - react-syntax-highlighter@15.6.1: - resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==} + react-syntax-highlighter@15.6.6: + resolution: {integrity: sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==} peerDependencies: react: '>= 0.14.0' @@ -18186,6 +19832,10 @@ packages: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + react@19.1.0: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} @@ -18217,9 +19867,9 @@ packages: resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} engines: {node: '>=12'} - read-pkg@8.1.0: - resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} - engines: {node: '>=16'} + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} read@1.0.7: resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} @@ -18321,8 +19971,8 @@ packages: refractor@3.6.0: resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} regenerate@1.4.2: @@ -18352,8 +20002,8 @@ packages: regexpu-core@2.0.0: resolution: {integrity: sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==} - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} registry-auth-token@3.4.0: @@ -18373,8 +20023,8 @@ packages: resolution: {integrity: sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==} hasBin: true - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + regjsparser@0.13.0: + resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} hasBin: true rehype-raw@6.1.1: @@ -18482,6 +20132,10 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -18520,8 +20174,8 @@ packages: resolve@1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} hasBin: true @@ -18567,10 +20221,6 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rev-hash@3.0.0: - resolution: {integrity: sha512-s+87HfEKAu95TaTxnbCobn0/BkbzR23LHSwVdYvr8mn5+PPjzy+hTWyh92b5oaLgig9TKPe5d6ZcubsVBtUrZg==} - engines: {node: '>=8'} - rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -18589,6 +20239,10 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -18655,11 +20309,14 @@ packages: resolution: {integrity: sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==} hasBin: true - rollup@4.46.2: - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -18668,8 +20325,8 @@ packages: resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} engines: {node: 6.* || >= 7.*} - run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} run-async@2.4.1: @@ -18692,6 +20349,9 @@ packages: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} engines: {npm: '>=2.0.0'} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -18739,8 +20399,27 @@ packages: sanitize-filename@1.6.3: resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - sass-loader@16.0.5: - resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} + sass-loader@13.3.3: + resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + + sass-loader@16.0.6: + resolution: {integrity: sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -18760,16 +20439,16 @@ packages: webpack: optional: true - sass@1.90.0: - resolution: {integrity: sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==} + sass@1.94.2: + resolution: {integrity: sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==} engines: {node: '>=14.0.0'} hasBin: true sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + sax@1.4.3: + resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} saxes@3.1.11: resolution: {integrity: sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==} @@ -18805,13 +20484,13 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.3.2: - resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} - secretlint@9.3.4: - resolution: {integrity: sha512-iNOzgMX/+W1SQNW/TW6eikGChyaPiazr2AEXjzjpoB0R6QJEulvlwhn0KLT1/xjPfdYrk3yiXZM40csUqET8uQ==} - engines: {node: ^14.13.1 || >=16.0.0} + secretlint@10.2.2: + resolution: {integrity: sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==} + engines: {node: '>=20.0.0'} hasBin: true secure-compare@3.0.1: @@ -18820,8 +20499,8 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selenium-webdriver@4.34.0: - resolution: {integrity: sha512-zGfQFcsASAv3KrYzYh+iw4fFqB7iZAgHW7BU6rRz7isK1i1X4x3LvjmZad4bUUgHDwTnAhlqTzDh21byB+zHMg==} + selenium-webdriver@4.38.0: + resolution: {integrity: sha512-5/UXXFSQmn7FGQkbcpAqvfhzflUdMWtT7QqpEgkFD6Q6rDucxB5EUfzgjmr6JbUj30QodcW3mDXehzoeS/Vy5w==} engines: {node: '>= 20.0.0'} selfsigned@2.4.1: @@ -18844,8 +20523,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true @@ -18853,13 +20532,14 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + send@0.19.1: + resolution: {integrity: sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==} + engines: {node: '>= 0.8.0'} + send@1.2.0: resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} engines: {node: '>= 18'} - sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - serialize-error@8.1.0: resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} engines: {node: '>=10'} @@ -18880,6 +20560,9 @@ packages: resolution: {integrity: sha512-JndLBslCLA/ebr7rS3d+/EKkzTsTi1jI2T9l+vHfAaGJ7A7NhtDpSZ0lx81HCNWnnE0yHncG+SSnVf9IMxOwXQ==} engines: {node: '>= 0.8.0'} + serve-handler@6.1.6: + resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} + serve-index@1.9.1: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} @@ -19005,9 +20688,6 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -19044,12 +20724,8 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} slugify@1.6.6: @@ -19060,9 +20736,6 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - sockjs-client@1.1.5: resolution: {integrity: sha512-PmPRkAYIeuRgX+ZSieViT4Z3Q23bLS2Itm/ck1tSf5P0/yVuFDiI5q9mcnpXoMdToaPSRS9MEyUx/aaBxrFzyw==} @@ -19073,8 +20746,8 @@ packages: resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} engines: {node: '>= 10'} - socks@2.8.6: - resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sort-keys@1.1.2: @@ -19095,6 +20768,12 @@ packages: resolution: {integrity: sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==} engines: {node: '>= 6'} + source-map-loader@4.0.2: + resolution: {integrity: sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: ^5.72.1 + source-map-loader@5.0.0: resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} engines: {node: '>= 18.12.0'} @@ -19144,6 +20823,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawn-rx@5.1.2: + resolution: {integrity: sha512-/y7tJKALVZ1lPzeZZB9jYnmtrL7d0N2zkorii5a7r7dhHkWIuLTzZpZzMJLK1dmYRgX/NCc4iarTO3F7BS2c/A==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -19166,9 +20848,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -19221,6 +20900,9 @@ packages: state-toggle@1.0.3: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} + static-browser-server@1.0.3: + resolution: {integrity: sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==} + statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -19257,15 +20939,6 @@ packages: prettier: optional: true - storybook@9.1.1: - resolution: {integrity: sha512-q6GaGZdVZh6rjOdGnc+4hGTu8ECyhyjQDw4EZNxKtQjDO8kqtuxbFm8l/IP2l+zLVJAatGWKkaX9Qcd7QZxz+Q==} - hasBin: true - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true - stream-each@1.2.3: resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} @@ -19279,6 +20952,9 @@ packages: streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + strict-event-emitter@0.4.6: + resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} + strict-uri-encode@1.1.0: resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} engines: {node: '>=0.10.0'} @@ -19326,6 +21002,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.1.0: + resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==} + engines: {node: '>=20'} + string.fromcodepoint@0.2.1: resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} @@ -19391,8 +21071,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom@2.0.0: @@ -19419,6 +21099,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@1.0.1: resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==} engines: {node: '>=0.10.0'} @@ -19428,8 +21112,8 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} - strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + strip-indent@4.1.1: + resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} strip-json-comments@2.0.1: @@ -19485,17 +21169,17 @@ packages: peerDependencies: webpack: ^5.27.0 - style-mod@4.1.2: - resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + style-mod@4.1.3: + resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} - style-to-js@1.1.17: - resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} style-to-object@0.3.0: resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} - style-to-object@1.0.9: - resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} style-value-types@5.0.0: resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} @@ -19518,8 +21202,8 @@ packages: peerDependencies: stylelint: ^16.18.0 - stylelint@16.23.0: - resolution: {integrity: sha512-69T5aS2LUY306ekt1Q1oaSPwz/jaG9HjyMix3UMrai1iEbuOafBe2Dh8xlyczrxFAy89qcKyZWWtc42XLx3Bbw==} + stylelint@16.26.1: + resolution: {integrity: sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==} engines: {node: '>=18.12.0'} hasBin: true @@ -19529,8 +21213,8 @@ packages: subarg@1.0.0: resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true @@ -19595,9 +21279,9 @@ packages: resolution: {integrity: sha512-CgqMyZrbOPpc+WqH7aga4JWkDPso23EgypLsbQ6gN3uoPWwwiLjXvzgrwGADBExvCRJrWFzAeK1bSoSpE7ixSQ==} hasBin: true - svgicons2svgfont@10.0.6: - resolution: {integrity: sha512-fUgQEVg3XwTbOHvlXahHGqCet5Wvfo1bV4DCvbSRvjsOCPCRunYbG4dUJCPegps37BMph3eOrfoobhH5AWuC6A==} - engines: {node: '>=12.0.0'} + svgicons2svgfont@12.0.0: + resolution: {integrity: sha512-fjyDkhiG0M1TPBtZzD12QV3yDcG2fUgiqHPOCYzf7hHE40Hl3GhnE6P1njsJCCByhwM7MiufyDW3L7IOR5dg9w==} + engines: {node: '>=16.15.0'} hasBin: true svgicons2svgfont@5.0.2: @@ -19635,8 +21319,8 @@ packages: resolution: {integrity: sha512-v/hu7KQQtospyDLpZxz7m5c7s90aj53YEkJ/A8x3mLPlSgIkZ6RKJkTjBG75P1p/fo5IeSA4TycyJg3VSu/aPw==} deprecated: 'Please migrate to Workbox: https://developers.google.com/web/tools/workbox/guides/migrations/migrate-from-sw' - swagger-client@3.35.6: - resolution: {integrity: sha512-OgwNneIdC45KXwOfwrlkwgWPeAKiV4K75mOnZioTddo1mpp9dTboCDVJas7185Ww1ziBwzShBqXpNGmyha9ZQg==} + swagger-client@3.36.0: + resolution: {integrity: sha512-9fkjxGHXuKy20jj8zwE6RwgFSOGKAyOD5U7aKgW/+/futtHZHOdZeqiEkb97sptk2rdBv7FEiUQDNlWZR186RA==} swagger-ui-react@5.21.0: resolution: {integrity: sha512-lS5paITM1kkcBb/BTTSMHKelh8elHfcuUP4T3R3mO80tDR0AYJL2HR5UdQD6nV1LwdvekzRM8gKjJA6hVayi0A==} @@ -19666,6 +21350,10 @@ packages: synchronous-promise@2.0.17: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + engines: {node: ^14.18.0 || >=16.0.0} + system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -19673,8 +21361,8 @@ packages: tabbable@5.3.3: resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==} - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tabbable@6.3.0: + resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} table@5.4.6: resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} @@ -19684,13 +21372,16 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwindcss@3.4.18: + resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.1.11: - resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + tailwindcss@4.1.17: + resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} tapable@0.2.9: resolution: {integrity: sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==} @@ -19700,8 +21391,8 @@ packages: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} tar-fs@3.1.1: @@ -19750,6 +21441,10 @@ packages: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} + terminal-link@4.0.0: + resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} + engines: {node: '>=18'} + terser-webpack-plugin@4.2.3: resolution: {integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==} engines: {node: '>= 10.13.0'} @@ -19777,8 +21472,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser@5.44.1: + resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} engines: {node: '>=10'} hasBin: true @@ -19813,8 +21508,8 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - thingies@1.21.0: - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + thingies@2.5.0: + resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} engines: {node: '>=10.18'} peerDependencies: tslib: ^2 @@ -19862,39 +21557,31 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tinyrainbow@1.2.0: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} - engines: {node: '>=14.0.0'} - tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - tmp@0.2.4: - resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==} + tmp@0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-buffer@1.2.1: - resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} to-fast-properties@1.0.3: @@ -19922,9 +21609,6 @@ packages: resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} engines: {node: '>=14.16'} - toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - toposort@1.0.7: resolution: {integrity: sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==} @@ -19956,8 +21640,8 @@ packages: traverse@0.3.9: resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} - tree-dump@1.0.3: - resolution: {integrity: sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==} + tree-dump@1.1.0: + resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -20083,8 +21767,8 @@ packages: resolution: {integrity: sha512-8t3bu2FcEkXb+D4L+Cn8qiK2E2C6Ms4/GQChvz6IMbVurcFHLXrhW4EMtfaol1a1ASQACZGDUGit4NHnX9g7hQ==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} - ts-loader@9.5.2: - resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} + ts-loader@9.5.4: + resolution: {integrity: sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==} engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' @@ -20099,6 +21783,20 @@ packages: ts-morph@26.0.0: resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + ts-pnp@1.2.0: resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} @@ -20196,14 +21894,18 @@ packages: resolution: {integrity: sha512-U56aG2Ylw7psLOmakjemAzmpqVgeadwENg9oaDjaZG5NYX4WB6+7h74bNPcc+0BXsoU5A/XWiHabDXyzFOmsxQ==} hasBin: true + ttf2eot@3.1.0: + resolution: {integrity: sha512-aHTbcYosNHVqb2Qtt9Xfta77ae/5y0VfdwNLUS6sGBeGr22cX2JDMo/i5h3uuOf+FAD3akYOr17+fYd5NK8aXw==} + hasBin: true + ttf2woff2@2.0.3: resolution: {integrity: sha512-HVI+ZVmIbHAxfmbxV/Ahjh20che2WUCs4xWIcCUaD/BLEof/ylYUjnc0DAhpYsAzEJy1kQwkOQD45RLgtWQHfw==} engines: {node: '>=0.12'} hasBin: true - ttf2woff2@4.0.5: - resolution: {integrity: sha512-zpoU0NopfjoyVqkFeQ722SyKk/n607mm5OHxuDS/wCCSy82B8H3hHXrezftA2KMbKqfJIjie2lsJHdvPnBGbsw==} - engines: {node: '>=12'} + ttf2woff2@5.0.0: + resolution: {integrity: sha512-FplhShJd3rT8JGa8N04YWQuP7xRvwr9AIq+9/z5O/5ubqNiCADshKl8v51zJDFkhDVcYpdUqUpm7T4M53Z2JoQ==} + engines: {node: '>=14'} hasBin: true ttf2woff@2.0.2: @@ -20268,10 +21970,6 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -20330,8 +22028,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ua-parser-js@1.0.40: - resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + ua-parser-js@1.0.41: + resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} hasBin: true uc.micro@1.0.6: @@ -20378,8 +22076,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.13.0: - resolution: {integrity: sha512-l+zSMssRqrzDcb3fjMkjjLGmuiiK2pMIcV++mJaAc9vhjSGpvM7h43QgP+OAMb1GImHmbPyG2tBXeuyG5iY4gA==} + undici@7.16.0: + resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} engines: {node: '>=20.18.1'} unfetch@4.2.0: @@ -20396,12 +22094,12 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} - unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} unicorn-magic@0.1.0: @@ -20412,6 +22110,9 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unidiff@1.0.4: + resolution: {integrity: sha512-ynU0vsAXw0ir8roa+xPCUHmnJ5goc5BTM2Kuc3IJd8UwgaeRs7VSD5+eeaQL+xp1JtB92hu/Zy/Lgy7RZcr1pQ==} + unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -20465,8 +22166,11 @@ packages: unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} unist-util-position@3.1.0: resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} @@ -20492,8 +22196,8 @@ packages: unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@2.0.3: resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} @@ -20530,6 +22234,9 @@ packages: unraw@3.0.0: resolution: {integrity: sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==} + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + untildify@2.1.0: resolution: {integrity: sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==} engines: {node: '>=0.10.0'} @@ -20552,8 +22259,8 @@ packages: resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} engines: {node: '>=4'} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -20562,15 +22269,9 @@ packages: resolution: {integrity: sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==} engines: {node: '>=4'} - upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} - upper-case@1.1.3: resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} - upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -20662,8 +22363,8 @@ packages: '@types/react': optional: true - use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -20710,6 +22411,9 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + v8-compile-cache@2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} @@ -20740,8 +22444,8 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} - version-range@4.14.0: - resolution: {integrity: sha512-gjb0ARm9qlcBAonU4zPwkl9ecKkas+tC2CGwFfptTCWWIVTWY1YUbT2zZKsOAF1jR/tNxxyLwwG0cb42XlYcTg==} + version-range@4.15.0: + resolution: {integrity: sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==} engines: {node: '>=4'} vfile-location@3.2.0: @@ -20759,11 +22463,45 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vsce@2.15.0: - resolution: {integrity: sha512-P8E9LAZvBCQnoGoizw65JfGvyMqNGlHdlUXD1VAuxtvYAaHBKLBdKPnpy60XKVDAkQCfmMu53g+gq9FM+ydepw==} - engines: {node: '>= 14'} - deprecated: vsce has been renamed to @vscode/vsce. Install using @vscode/vsce instead. + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true vscode-debugadapter-testsupport@1.51.0: resolution: {integrity: sha512-rb8tfn7J3kxLi1rRhEyG5ggGkFcJH2WrYYrq6Vb1tDAcHoFXF580M1dAA2jPOrc0I14GuWxMnndvfGkfG10VxA==} @@ -20858,6 +22596,9 @@ packages: vscode-messenger-common@0.5.1: resolution: {integrity: sha512-YJRUdK278/K7vNyhVoePINOHmz3xjQFQbSiuNXCm3+GfQ6NSmjjWTpumAYAzNs05HKAeF9glU532livdwc3W0A==} + vscode-messenger-webview@0.4.5: + resolution: {integrity: sha512-pzGB6HoTfPszMF4HQG+u5WMJ959iGLmow6ehYVTZnZjZ+phBKEBtpTYAjJSNotyUfZJ58NCdq5+ZSvMgkAuAJw==} + vscode-messenger-webview@0.5.1: resolution: {integrity: sha512-3IXFORcjD3c9khECdqRUeBh05mt0AZA/86FhY/MlCRB2YHGzqpJeD/5rRX92fO2M42rUjXLi5bnzmXSvVGXadw==} @@ -20875,9 +22616,9 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vscode-ws-jsonrpc@3.4.0: - resolution: {integrity: sha512-jkNZvX0LdHt4skPxMw/jFePr3jRCJU6ZmO28oPoQ7RwNSkwU3uN8mgtxACYEbOY68bYmi/b/uJzhxewKCz1P4w==} - engines: {node: '>=18.19.0', npm: '>=10.2.3'} + vscode-ws-jsonrpc@3.5.0: + resolution: {integrity: sha512-13ZDy7Od4AfEPK2HIfY3DtyRi4FVsvFql1yobVJrpIoHOKGGJpIjVvIJpMxkrHzCZzWlYlg+WEu2hrYkCTvM0Q==} + engines: {node: '>=20.10.0', npm: '>=10.2.3'} w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} @@ -20893,6 +22634,9 @@ packages: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -21011,8 +22755,8 @@ packages: webpack: optional: true - webpack-dev-middleware@7.4.2: - resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} + webpack-dev-middleware@7.4.5: + resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==} engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.0.0 @@ -21052,11 +22796,6 @@ packages: peerDependencies: webpack: 1 || 2 || 3 - webpack-merge-and-include-globally@2.3.4: - resolution: {integrity: sha512-s5dd7m3ycVBlC7C6GAx91JQzbjhxC/NJRuT2sCkg8WCcF8CE1x/7xwVXqgmt0Fr/H/0sX5C5HE2RdU6+vCY5yg==} - peerDependencies: - webpack: '>=1.0.0' - webpack-merge@5.10.0: resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} engines: {node: '>=10.0.0'} @@ -21087,8 +22826,8 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.101.0: - resolution: {integrity: sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==} + webpack@5.103.0: + resolution: {integrity: sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -21224,8 +22963,8 @@ packages: workerpool@6.5.1: resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} - workerpool@9.3.3: - resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==} + workerpool@9.3.4: + resolution: {integrity: sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==} wrap-ansi@2.1.0: resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} @@ -21247,8 +22986,8 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} wrappy@1.0.2: @@ -21331,10 +23070,6 @@ packages: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} - xml2js@0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} - engines: {node: '>=4.0.0'} - xml2js@0.5.0: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} @@ -21391,8 +23126,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -21447,24 +23182,35 @@ packages: yazl@2.5.1: resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + yup@1.4.0: + resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==} + yup@1.6.1: resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==} zenscroll@4.0.2: resolution: {integrity: sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==} - zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + zod-to-json-schema@3.25.0: + resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} peerDependencies: - zod: ^3.24.1 + zod: ^3.25 || ^4 zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -21472,8 +23218,8 @@ packages: zod@4.1.11: resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} - zustand@5.0.7: - resolution: {integrity: sha512-Ot6uqHDW/O2VdYsKLLU8GQu8sCOM1LcoE8RwvLv9uuRT9s6SOHCKs0ZEOhxg+I1Ld+A1Q5lwx+UlKXXUoCZITg==} + zustand@5.0.9: + resolution: {integrity: sha512-ALBtUj0AfjJt3uNRQoL1tL2tMvj6Gp/6e39dnfT6uzpelGru8v1tPOGBzayOWbPJvujM8JojDk3E1LxeFisBNg==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -21498,31 +23244,52 @@ packages: snapshots: - '@adobe/css-tools@4.4.3': {} + '@adobe/css-tools@4.4.4': {} - '@ai-sdk/amazon-bedrock@3.0.30(zod@4.1.11)': + '@ai-sdk/amazon-bedrock@3.0.65(zod@4.1.11)': dependencies: - '@ai-sdk/anthropic': 2.0.23(zod@4.1.11) + '@ai-sdk/anthropic': 2.0.53(zod@4.1.11) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11) - '@smithy/eventstream-codec': 4.0.5 - '@smithy/util-utf8': 4.0.0 + '@ai-sdk/provider-utils': 3.0.18(zod@4.1.11) + '@smithy/eventstream-codec': 4.2.5 + '@smithy/util-utf8': 4.2.0 aws4fetch: 1.0.20 zod: 4.1.11 - '@ai-sdk/anthropic@2.0.23(zod@4.1.11)': + '@ai-sdk/anthropic@2.0.53(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) + zod: 3.25.76 + + '@ai-sdk/anthropic@2.0.53(zod@4.1.11)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11) + '@ai-sdk/provider-utils': 3.0.18(zod@4.1.11) zod: 4.1.11 - '@ai-sdk/gateway@1.0.32(zod@4.1.11)': + '@ai-sdk/gateway@2.0.18(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) + '@vercel/oidc': 3.0.5 + zod: 3.25.76 + + '@ai-sdk/gateway@2.0.18(zod@4.1.11)': dependencies: '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11) + '@ai-sdk/provider-utils': 3.0.18(zod@4.1.11) + '@vercel/oidc': 3.0.5 zod: 4.1.11 - '@ai-sdk/provider-utils@3.0.10(zod@4.1.11)': + '@ai-sdk/provider-utils@3.0.18(zod@3.25.76)': + dependencies: + '@ai-sdk/provider': 2.0.0 + '@standard-schema/spec': 1.0.0 + eventsource-parser: 3.0.6 + zod: 3.25.76 + + '@ai-sdk/provider-utils@3.0.18(zod@4.1.11)': dependencies: '@ai-sdk/provider': 2.0.0 '@standard-schema/spec': 1.0.0 @@ -21537,14 +23304,20 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@apidevtools/json-schema-ref-parser@11.6.1': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.1 '@apidevtools/json-schema-ref-parser@12.0.2': dependencies: '@jsdevtools/ono': 7.1.3 '@types/json-schema': 7.0.15 - js-yaml: 4.1.0 + js-yaml: 4.1.1 '@aw-web-design/x-default-browser@1.4.126': dependencies: @@ -21553,21 +23326,21 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.862.0 + '@aws-sdk/types': 3.936.0 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.862.0 + '@aws-sdk/types': 3.936.0 tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': dependencies: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-locate-window': 3.804.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-locate-window': 3.893.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -21576,15 +23349,15 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-locate-window': 3.804.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-locate-window': 3.893.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.862.0 + '@aws-sdk/types': 3.936.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -21593,429 +23366,442 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.862.0 + '@aws-sdk/types': 3.936.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-s3@3.862.0': + '@aws-sdk/client-s3@3.943.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/credential-provider-node': 3.862.0 - '@aws-sdk/middleware-bucket-endpoint': 3.862.0 - '@aws-sdk/middleware-expect-continue': 3.862.0 - '@aws-sdk/middleware-flexible-checksums': 3.862.0 - '@aws-sdk/middleware-host-header': 3.862.0 - '@aws-sdk/middleware-location-constraint': 3.862.0 - '@aws-sdk/middleware-logger': 3.862.0 - '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-sdk-s3': 3.862.0 - '@aws-sdk/middleware-ssec': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 - '@aws-sdk/region-config-resolver': 3.862.0 - '@aws-sdk/signature-v4-multi-region': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-endpoints': 3.862.0 - '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 - '@aws-sdk/xml-builder': 3.862.0 - '@smithy/config-resolver': 4.1.5 - '@smithy/core': 3.8.0 - '@smithy/eventstream-serde-browser': 4.0.5 - '@smithy/eventstream-serde-config-resolver': 4.1.3 - '@smithy/eventstream-serde-node': 4.0.5 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/hash-blob-browser': 4.0.5 - '@smithy/hash-node': 4.0.5 - '@smithy/hash-stream-node': 4.0.5 - '@smithy/invalid-dependency': 4.0.5 - '@smithy/md5-js': 4.0.5 - '@smithy/middleware-content-length': 4.0.5 - '@smithy/middleware-endpoint': 4.1.18 - '@smithy/middleware-retry': 4.1.19 - '@smithy/middleware-serde': 4.0.9 - '@smithy/middleware-stack': 4.0.5 - '@smithy/node-config-provider': 4.1.4 - '@smithy/node-http-handler': 4.1.1 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.26 - '@smithy/util-defaults-mode-node': 4.0.26 - '@smithy/util-endpoints': 3.0.7 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 - '@smithy/util-stream': 4.2.4 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.7 - '@types/uuid': 9.0.8 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/credential-provider-node': 3.943.0 + '@aws-sdk/middleware-bucket-endpoint': 3.936.0 + '@aws-sdk/middleware-expect-continue': 3.936.0 + '@aws-sdk/middleware-flexible-checksums': 3.943.0 + '@aws-sdk/middleware-host-header': 3.936.0 + '@aws-sdk/middleware-location-constraint': 3.936.0 + '@aws-sdk/middleware-logger': 3.936.0 + '@aws-sdk/middleware-recursion-detection': 3.936.0 + '@aws-sdk/middleware-sdk-s3': 3.943.0 + '@aws-sdk/middleware-ssec': 3.936.0 + '@aws-sdk/middleware-user-agent': 3.943.0 + '@aws-sdk/region-config-resolver': 3.936.0 + '@aws-sdk/signature-v4-multi-region': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@aws-sdk/util-user-agent-browser': 3.936.0 + '@aws-sdk/util-user-agent-node': 3.943.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.6 + '@smithy/eventstream-serde-browser': 4.2.5 + '@smithy/eventstream-serde-config-resolver': 4.3.5 + '@smithy/eventstream-serde-node': 4.2.5 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-blob-browser': 4.2.6 + '@smithy/hash-node': 4.2.5 + '@smithy/hash-stream-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/md5-js': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.13 + '@smithy/middleware-retry': 4.4.13 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.12 + '@smithy/util-defaults-mode-node': 4.2.15 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 + '@smithy/util-waiter': 4.2.5 tslib: 2.8.1 - uuid: 9.0.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.862.0': + '@aws-sdk/client-sso@3.943.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/middleware-host-header': 3.862.0 - '@aws-sdk/middleware-logger': 3.862.0 - '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 - '@aws-sdk/region-config-resolver': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-endpoints': 3.862.0 - '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 - '@smithy/config-resolver': 4.1.5 - '@smithy/core': 3.8.0 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/hash-node': 4.0.5 - '@smithy/invalid-dependency': 4.0.5 - '@smithy/middleware-content-length': 4.0.5 - '@smithy/middleware-endpoint': 4.1.18 - '@smithy/middleware-retry': 4.1.19 - '@smithy/middleware-serde': 4.0.9 - '@smithy/middleware-stack': 4.0.5 - '@smithy/node-config-provider': 4.1.4 - '@smithy/node-http-handler': 4.1.1 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.26 - '@smithy/util-defaults-mode-node': 4.0.26 - '@smithy/util-endpoints': 3.0.7 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/middleware-host-header': 3.936.0 + '@aws-sdk/middleware-logger': 3.936.0 + '@aws-sdk/middleware-recursion-detection': 3.936.0 + '@aws-sdk/middleware-user-agent': 3.943.0 + '@aws-sdk/region-config-resolver': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@aws-sdk/util-user-agent-browser': 3.936.0 + '@aws-sdk/util-user-agent-node': 3.943.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.6 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.13 + '@smithy/middleware-retry': 4.4.13 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.12 + '@smithy/util-defaults-mode-node': 4.2.15 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.862.0': - dependencies: - '@aws-sdk/types': 3.862.0 - '@aws-sdk/xml-builder': 3.862.0 - '@smithy/core': 3.8.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/property-provider': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/signature-v4': 5.1.3 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-utf8': 4.0.0 - fast-xml-parser: 5.2.5 + '@aws-sdk/core@3.943.0': + dependencies: + '@aws-sdk/types': 3.936.0 + '@aws-sdk/xml-builder': 3.930.0 + '@smithy/core': 3.18.6 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.862.0': + '@aws-sdk/credential-provider-env@3.943.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/types': 4.3.2 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.943.0': + dependencies: + '@aws-sdk/core': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.862.0': - dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/node-http-handler': 4.1.1 - '@smithy/property-provider': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - '@smithy/util-stream': 4.2.4 + '@aws-sdk/credential-provider-ini@3.943.0': + dependencies: + '@aws-sdk/core': 3.943.0 + '@aws-sdk/credential-provider-env': 3.943.0 + '@aws-sdk/credential-provider-http': 3.943.0 + '@aws-sdk/credential-provider-login': 3.943.0 + '@aws-sdk/credential-provider-process': 3.943.0 + '@aws-sdk/credential-provider-sso': 3.943.0 + '@aws-sdk/credential-provider-web-identity': 3.943.0 + '@aws-sdk/nested-clients': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt - '@aws-sdk/credential-provider-ini@3.862.0': - dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/credential-provider-env': 3.862.0 - '@aws-sdk/credential-provider-http': 3.862.0 - '@aws-sdk/credential-provider-process': 3.862.0 - '@aws-sdk/credential-provider-sso': 3.862.0 - '@aws-sdk/credential-provider-web-identity': 3.862.0 - '@aws-sdk/nested-clients': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/credential-provider-imds': 4.0.7 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@aws-sdk/credential-provider-login@3.943.0': + dependencies: + '@aws-sdk/core': 3.943.0 + '@aws-sdk/nested-clients': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.862.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.862.0 - '@aws-sdk/credential-provider-http': 3.862.0 - '@aws-sdk/credential-provider-ini': 3.862.0 - '@aws-sdk/credential-provider-process': 3.862.0 - '@aws-sdk/credential-provider-sso': 3.862.0 - '@aws-sdk/credential-provider-web-identity': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/credential-provider-imds': 4.0.7 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@aws-sdk/credential-provider-node@3.943.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.943.0 + '@aws-sdk/credential-provider-http': 3.943.0 + '@aws-sdk/credential-provider-ini': 3.943.0 + '@aws-sdk/credential-provider-process': 3.943.0 + '@aws-sdk/credential-provider-sso': 3.943.0 + '@aws-sdk/credential-provider-web-identity': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.862.0': + '@aws-sdk/credential-provider-process@3.943.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.862.0': + '@aws-sdk/credential-provider-sso@3.943.0': dependencies: - '@aws-sdk/client-sso': 3.862.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/token-providers': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@aws-sdk/client-sso': 3.943.0 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/token-providers': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.862.0': + '@aws-sdk/credential-provider-web-identity@3.943.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/nested-clients': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/types': 4.3.2 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/nested-clients': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/middleware-bucket-endpoint@3.862.0': + '@aws-sdk/middleware-bucket-endpoint@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-arn-parser': 3.804.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-config-provider': 4.0.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-arn-parser': 3.893.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-config-provider': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-expect-continue@3.862.0': + '@aws-sdk/middleware-expect-continue@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@aws-sdk/types': 3.936.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.862.0': + '@aws-sdk/middleware-flexible-checksums@3.943.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/is-array-buffer': 4.0.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-stream': 4.2.4 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/is-array-buffer': 4.2.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.862.0': + '@aws-sdk/middleware-host-header@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@aws-sdk/types': 3.936.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.862.0': + '@aws-sdk/middleware-location-constraint@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.862.0': + '@aws-sdk/middleware-logger@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.862.0': + '@aws-sdk/middleware-recursion-detection@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@aws-sdk/types': 3.936.0 + '@aws/lambda-invoke-store': 0.2.1 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.862.0': - dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-arn-parser': 3.804.0 - '@smithy/core': 3.8.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/protocol-http': 5.1.3 - '@smithy/signature-v4': 5.1.3 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-stream': 4.2.4 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/middleware-sdk-s3@3.943.0': + dependencies: + '@aws-sdk/core': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-arn-parser': 3.893.0 + '@smithy/core': 3.18.6 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-ssec@3.862.0': + '@aws-sdk/middleware-ssec@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.862.0': + '@aws-sdk/middleware-user-agent@3.943.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-endpoints': 3.862.0 - '@smithy/core': 3.8.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@smithy/core': 3.18.6 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.862.0': + '@aws-sdk/nested-clients@3.943.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.862.0 - '@aws-sdk/middleware-host-header': 3.862.0 - '@aws-sdk/middleware-logger': 3.862.0 - '@aws-sdk/middleware-recursion-detection': 3.862.0 - '@aws-sdk/middleware-user-agent': 3.862.0 - '@aws-sdk/region-config-resolver': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@aws-sdk/util-endpoints': 3.862.0 - '@aws-sdk/util-user-agent-browser': 3.862.0 - '@aws-sdk/util-user-agent-node': 3.862.0 - '@smithy/config-resolver': 4.1.5 - '@smithy/core': 3.8.0 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/hash-node': 4.0.5 - '@smithy/invalid-dependency': 4.0.5 - '@smithy/middleware-content-length': 4.0.5 - '@smithy/middleware-endpoint': 4.1.18 - '@smithy/middleware-retry': 4.1.19 - '@smithy/middleware-serde': 4.0.9 - '@smithy/middleware-stack': 4.0.5 - '@smithy/node-config-provider': 4.1.4 - '@smithy/node-http-handler': 4.1.1 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.26 - '@smithy/util-defaults-mode-node': 4.0.26 - '@smithy/util-endpoints': 3.0.7 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/middleware-host-header': 3.936.0 + '@aws-sdk/middleware-logger': 3.936.0 + '@aws-sdk/middleware-recursion-detection': 3.936.0 + '@aws-sdk/middleware-user-agent': 3.943.0 + '@aws-sdk/region-config-resolver': 3.936.0 + '@aws-sdk/types': 3.936.0 + '@aws-sdk/util-endpoints': 3.936.0 + '@aws-sdk/util-user-agent-browser': 3.936.0 + '@aws-sdk/util-user-agent-node': 3.943.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.6 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.13 + '@smithy/middleware-retry': 4.4.13 + '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.12 + '@smithy/util-defaults-mode-node': 4.2.15 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.862.0': + '@aws-sdk/region-config-resolver@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.5 + '@aws-sdk/types': 3.936.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.862.0': + '@aws-sdk/signature-v4-multi-region@3.943.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/signature-v4': 5.1.3 - '@smithy/types': 4.3.2 + '@aws-sdk/middleware-sdk-s3': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.862.0': + '@aws-sdk/token-providers@3.943.0': dependencies: - '@aws-sdk/core': 3.862.0 - '@aws-sdk/nested-clients': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@aws-sdk/core': 3.943.0 + '@aws-sdk/nested-clients': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.862.0': + '@aws-sdk/types@3.936.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/util-arn-parser@3.804.0': + '@aws-sdk/util-arn-parser@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.862.0': + '@aws-sdk/util-endpoints@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-endpoints': 3.0.7 + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-endpoints': 3.2.5 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.804.0': + '@aws-sdk/util-locate-window@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.862.0': + '@aws-sdk/util-user-agent-browser@3.936.0': dependencies: - '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 - bowser: 2.11.0 + '@aws-sdk/types': 3.936.0 + '@smithy/types': 4.9.0 + bowser: 2.13.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.862.0': + '@aws-sdk/util-user-agent-node@3.943.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.862.0 - '@aws-sdk/types': 3.862.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 + '@aws-sdk/middleware-user-agent': 3.943.0 + '@aws-sdk/types': 3.936.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.862.0': + '@aws-sdk/xml-builder@3.930.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 + fast-xml-parser: 5.2.5 tslib: 2.8.1 + '@aws/lambda-invoke-store@0.2.1': {} + '@azu/format-text@1.0.2': {} '@azu/style-format@1.0.1': @@ -22026,61 +23812,61 @@ snapshots: dependencies: tslib: 2.8.1 - '@azure/core-auth@1.10.0': + '@azure/core-auth@1.10.1': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.13.0 + '@azure/core-util': 1.13.1 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/core-client@1.10.0': + '@azure/core-client@1.10.1': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.0 - '@azure/core-rest-pipeline': 1.22.0 - '@azure/core-tracing': 1.3.0 - '@azure/core-util': 1.13.0 + '@azure/core-auth': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/core-rest-pipeline@1.22.0': + '@azure/core-rest-pipeline@1.22.2': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.0 - '@azure/core-tracing': 1.3.0 - '@azure/core-util': 1.13.0 + '@azure/core-auth': 1.10.1 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.0 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/core-tracing@1.3.0': + '@azure/core-tracing@1.3.1': dependencies: tslib: 2.8.1 - '@azure/core-util@1.13.0': + '@azure/core-util@1.13.1': dependencies: '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.0 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/identity@4.11.1': + '@azure/identity@4.13.0': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.0 - '@azure/core-client': 1.10.0 - '@azure/core-rest-pipeline': 1.22.0 - '@azure/core-tracing': 1.3.0 - '@azure/core-util': 1.13.0 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 '@azure/logger': 1.3.0 - '@azure/msal-browser': 4.19.0 - '@azure/msal-node': 3.7.0 + '@azure/msal-browser': 4.26.2 + '@azure/msal-node': 3.8.3 open: 10.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -22088,47 +23874,47 @@ snapshots: '@azure/logger@1.3.0': dependencies: - '@typespec/ts-http-runtime': 0.3.0 + '@typespec/ts-http-runtime': 0.3.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@azure/msal-browser@4.19.0': + '@azure/msal-browser@4.26.2': dependencies: - '@azure/msal-common': 15.10.0 + '@azure/msal-common': 15.13.2 - '@azure/msal-common@15.10.0': {} + '@azure/msal-common@15.13.2': {} - '@azure/msal-node@3.7.0': + '@azure/msal-node@3.8.3': dependencies: - '@azure/msal-common': 15.10.0 + '@azure/msal-common': 15.13.2 jsonwebtoken: 9.0.2 uuid: 8.3.2 '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.0': {} + '@babel/compat-data@7.28.5': {} '@babel/core@7.12.9': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.12.9) - '@babel/helpers': 7.28.2 - '@babel/parser': 7.28.0 + '@babel/generator': 7.28.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.12.9) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 convert-source-map: 1.9.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 - resolve: 1.22.10 + resolve: 1.22.11 semver: 5.7.2 source-map: 0.5.7 transitivePeerDependencies: @@ -22138,60 +23924,60 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) - '@babel/helpers': 7.28.2 - '@babel/parser': 7.28.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.27.7) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 convert-source-map: 2.0.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.28.0': + '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.28.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.7)': + '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.7)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.2.0 + regexpu-core: 6.4.0 semver: 6.3.1 '@babel/helper-define-polyfill-provider@0.0.3(@babel/core@7.27.7)': @@ -22200,10 +23986,10 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 - debug: 4.4.1(supports-color@8.1.1) + '@babel/traverse': 7.28.5 + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -22214,10 +24000,10 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 - debug: 4.4.1(supports-color@8.1.1) + '@babel/traverse': 7.28.5 + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -22227,49 +24013,49 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color '@babel/helper-globals@7.28.0': {} - '@babel/helper-member-expression-to-functions@7.27.1': + '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.12.9)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.12.9)': dependencies: '@babel/core': 7.12.9 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.7)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@babel/helper-plugin-utils@7.10.4': {} @@ -22279,55 +24065,55 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/helper-wrap-function': 7.28.3 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} - '@babel/helper-wrap-function@7.27.1': + '@babel/helper-wrap-function@7.28.3': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.2': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 - '@babel/parser@7.28.0': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -22346,22 +24132,22 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -22369,7 +24155,7 @@ snapshots: '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.7) transitivePeerDependencies: @@ -22389,13 +24175,13 @@ snapshots: '@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9)': dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-plugin-utils': 7.10.4 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.12.9) '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.27.7)': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.5 '@babel/core': 7.27.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 @@ -22414,7 +24200,7 @@ snapshots: '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -22427,7 +24213,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.7) transitivePeerDependencies: @@ -22463,6 +24249,11 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -22551,7 +24342,7 @@ snapshots: '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.7)': @@ -22564,7 +24355,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.7) - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -22582,7 +24373,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.27.7)': + '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 @@ -22590,20 +24381,20 @@ snapshots: '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.0(@babel/core@7.27.7)': + '@babel/plugin-transform-classes@7.28.4(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 @@ -22611,7 +24402,7 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -22621,18 +24412,18 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.27.7)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.7)': @@ -22643,7 +24434,7 @@ snapshots: '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.7)': @@ -22651,7 +24442,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 @@ -22680,7 +24471,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -22694,7 +24485,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 @@ -22707,7 +24498,7 @@ snapshots: '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -22715,25 +24506,25 @@ snapshots: '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -22741,7 +24532,7 @@ snapshots: '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.7)': @@ -22759,14 +24550,14 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.27.7)': + '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -22783,7 +24574,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.7)': + '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 @@ -22804,7 +24595,7 @@ snapshots: '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -22813,7 +24604,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -22842,7 +24633,7 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -22852,7 +24643,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.1(@babel/core@7.27.7)': + '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 @@ -22860,7 +24651,7 @@ snapshots: '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.7)': @@ -22896,11 +24687,11 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.27.7)': + '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7) @@ -22915,33 +24706,33 @@ snapshots: '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.27.7) '@babel/helper-plugin-utils': 7.27.1 '@babel/preset-env@7.27.2(@babel/core@7.27.7)': dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.5 '@babel/core': 7.27.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.27.7) '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.7) '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.7) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.27.7) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.7) '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.7) '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.7) @@ -22950,41 +24741,41 @@ snapshots: '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.27.7) '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.27.7) '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.27.7) '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-regenerator': 7.28.1(@babel/core@7.27.7) + '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.27.7) '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) @@ -23000,7 +24791,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.27.7) babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.7) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.27.7) - core-js-compat: 3.45.0 + core-js-compat: 3.47.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -23016,7 +24807,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 esutils: 2.0.3 '@babel/preset-react@7.27.1(@babel/core@7.27.7)': @@ -23031,6 +24822,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-typescript@7.22.15(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.27.7) + transitivePeerDependencies: + - supports-color + '@babel/preset-typescript@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -23038,11 +24840,11 @@ snapshots: '@babel/helper-validator-option': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.27.7) transitivePeerDependencies: - supports-color - '@babel/register@7.27.1(@babel/core@7.27.7)': + '@babel/register@7.28.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 clone-deep: 4.0.1 @@ -23051,38 +24853,38 @@ snapshots: pirates: 4.0.7 source-map-support: 0.5.21 - '@babel/runtime-corejs3@7.28.2': + '@babel/runtime-corejs3@7.28.4': dependencies: - core-js-pure: 3.45.0 + core-js-pure: 3.47.0 - '@babel/runtime@7.28.2': {} + '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 - '@babel/traverse@7.28.0': + '@babel/traverse@7.28.5': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.5 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.1(supports-color@8.1.1) + '@babel/types': 7.28.5 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/types@7.28.2': + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@base2/pretty-print-object@1.0.1': {} - '@bazel/runfiles@6.3.1': {} + '@bazel/runfiles@6.5.0': {} '@bcoe/v8-coverage@0.2.3': {} @@ -23123,53 +24925,266 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true + '@cacheable/memory@2.0.6': + dependencies: + '@cacheable/utils': 2.3.2 + '@keyv/bigmap': 1.3.0(keyv@5.5.4) + hookified: 1.13.0 + keyv: 5.5.4 + + '@cacheable/utils@2.3.2': + dependencies: + hashery: 1.3.0 + keyv: 5.5.4 + '@cnakazawa/watch@1.0.4': dependencies: exec-sh: 0.3.6 minimist: 1.2.8 - '@codemirror/autocomplete@6.18.6': + '@codemirror/autocomplete@6.19.1': + dependencies: + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 + + '@codemirror/commands@6.10.0': + dependencies: + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 + + '@codemirror/lang-angular@0.1.4': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.3 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@codemirror/lang-cpp@6.0.3': + dependencies: + '@codemirror/language': 6.11.3 + '@lezer/cpp': 1.1.3 + + '@codemirror/lang-css@6.3.1': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.4.0 + '@lezer/css': 1.3.0 + + '@codemirror/lang-go@6.0.1': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.4.0 + '@lezer/go': 1.0.1 + + '@codemirror/lang-html@6.4.11': dependencies: - '@codemirror/language': 6.11.2 + '@codemirror/autocomplete': 6.19.1 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 - '@lezer/common': 1.2.3 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 + '@lezer/css': 1.3.0 + '@lezer/html': 1.3.12 - '@codemirror/commands@6.8.1': + '@codemirror/lang-java@6.0.2': dependencies: - '@codemirror/language': 6.11.2 + '@codemirror/language': 6.11.3 + '@lezer/java': 1.1.3 + + '@codemirror/lang-javascript@6.2.4': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/language': 6.11.3 + '@codemirror/lint': 6.8.5 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 - '@lezer/common': 1.2.3 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 + '@lezer/javascript': 1.5.4 + + '@codemirror/lang-jinja@6.0.0': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.11.3 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@codemirror/lang-json@6.0.2': + dependencies: + '@codemirror/language': 6.11.3 + '@lezer/json': 1.0.3 + + '@codemirror/lang-less@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.11.3 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@codemirror/lang-liquid@6.3.0': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@codemirror/lang-markdown@6.5.0': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 + '@lezer/markdown': 1.6.0 + + '@codemirror/lang-php@6.0.2': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.4.0 + '@lezer/php': 1.0.5 + + '@codemirror/lang-python@6.2.1': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.4.0 + '@lezer/python': 1.1.18 + + '@codemirror/lang-rust@6.0.2': + dependencies: + '@codemirror/language': 6.11.3 + '@lezer/rust': 1.0.2 + + '@codemirror/lang-sass@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.4.0 + '@lezer/sass': 1.1.0 + + '@codemirror/lang-sql@6.10.0': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@codemirror/lang-vue@0.1.3': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.3 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@codemirror/lang-wast@6.0.2': + dependencies: + '@codemirror/language': 6.11.3 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 '@codemirror/lang-xml@6.1.0': dependencies: - '@codemirror/autocomplete': 6.18.6 - '@codemirror/language': 6.11.2 + '@codemirror/autocomplete': 6.19.1 + '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 - '@lezer/common': 1.2.3 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 '@lezer/xml': 1.0.6 - '@codemirror/language@6.11.2': + '@codemirror/lang-yaml@6.1.2': dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 - '@lezer/common': 1.2.3 - '@lezer/highlight': 1.2.1 - '@lezer/lr': 1.4.2 - style-mod: 4.1.2 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + '@lezer/yaml': 1.0.3 + + '@codemirror/language-data@6.5.2': + dependencies: + '@codemirror/lang-angular': 0.1.4 + '@codemirror/lang-cpp': 6.0.3 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-go': 6.0.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-java': 6.0.2 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/lang-jinja': 6.0.0 + '@codemirror/lang-json': 6.0.2 + '@codemirror/lang-less': 6.0.2 + '@codemirror/lang-liquid': 6.3.0 + '@codemirror/lang-markdown': 6.5.0 + '@codemirror/lang-php': 6.0.2 + '@codemirror/lang-python': 6.2.1 + '@codemirror/lang-rust': 6.0.2 + '@codemirror/lang-sass': 6.0.2 + '@codemirror/lang-sql': 6.10.0 + '@codemirror/lang-vue': 0.1.3 + '@codemirror/lang-wast': 6.0.2 + '@codemirror/lang-xml': 6.1.0 + '@codemirror/lang-yaml': 6.1.2 + '@codemirror/language': 6.11.3 + '@codemirror/legacy-modes': 6.5.2 + + '@codemirror/language@6.11.3': + dependencies: + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + style-mod: 4.1.3 + + '@codemirror/legacy-modes@6.5.2': + dependencies: + '@codemirror/language': 6.11.3 '@codemirror/lint@6.8.5': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.8 crelt: 1.0.6 + '@codemirror/merge@6.11.2': + dependencies: + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@lezer/highlight': 1.2.3 + style-mod: 4.1.3 + '@codemirror/search@6.5.11': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.8 crelt: 1.0.6 '@codemirror/state@6.5.2': @@ -23178,27 +25193,71 @@ snapshots: '@codemirror/theme-one-dark@6.1.3': dependencies: - '@codemirror/language': 6.11.2 + '@codemirror/language': 6.11.3 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 - '@lezer/highlight': 1.2.1 + '@codemirror/view': 6.38.8 + '@lezer/highlight': 1.2.3 - '@codemirror/view@6.38.1': + '@codemirror/view@6.38.8': dependencies: '@codemirror/state': 6.5.2 crelt: 1.0.6 - style-mod: 4.1.2 + style-mod: 4.1.3 w3c-keyname: 2.2.8 + '@codesandbox/nodebox@0.1.8': + dependencies: + outvariant: 1.4.0 + strict-event-emitter: 0.4.6 + + '@codesandbox/sandpack-client@2.19.8': + dependencies: + '@codesandbox/nodebox': 0.1.8 + buffer: 6.0.3 + dequal: 2.0.3 + mime-db: 1.54.0 + outvariant: 1.4.0 + static-browser-server: 1.0.3 + + '@codesandbox/sandpack-react@2.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@codemirror/autocomplete': 6.19.1 + '@codemirror/commands': 6.10.0 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@codesandbox/sandpack-client': 2.19.8 + '@lezer/highlight': 1.2.3 + '@react-hook/intersection-observer': 3.1.2(react@18.2.0) + '@stitches/core': 1.2.8 + anser: 2.3.3 + clean-set: 1.1.2 + dequal: 2.0.3 + escape-carriage: 1.3.1 + lz-string: 1.5.0 + react: 18.2.0 + react-devtools-inline: 4.4.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 17.0.2 + '@colors/colors@1.5.0': optional: true '@colors/colors@1.6.0': {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-syntax-patches-for-csstree@1.0.20': {} + '@csstools/css-tokenizer@3.0.4': {} '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': @@ -23206,13 +25265,13 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': dependencies: - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 - '@dabh/diagnostics@2.0.3': + '@dabh/diagnostics@2.0.8': dependencies: - colorspace: 1.1.4 + '@so-ric/colorspace': 1.1.6 enabled: 2.0.0 kuler: 2.0.0 @@ -23228,12 +25287,28 @@ snapshots: '@discoveryjs/json-ext@0.6.3': {} - '@dual-bundle/import-meta-resolve@4.1.0': {} + '@dual-bundle/import-meta-resolve@4.2.1': {} + + '@emnapi/core@1.7.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.7.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.27.1 - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -23271,7 +25346,7 @@ snapshots: '@emotion/memoize': 0.7.4 optional: true - '@emotion/is-prop-valid@1.3.1': + '@emotion/is-prop-valid@1.4.0': dependencies: '@emotion/memoize': 0.9.0 @@ -23280,9 +25355,9 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@17.0.87)(react@19.1.0)': + '@emotion/react@11.14.0(@types/react@17.0.90)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -23292,13 +25367,13 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.1.0 optionalDependencies: - '@types/react': 17.0.87 + '@types/react': 17.0.90 transitivePeerDependencies: - supports-color '@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -23314,7 +25389,7 @@ snapshots: '@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 @@ -23334,30 +25409,30 @@ snapshots: '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 - csstype: 3.1.3 + csstype: 3.2.3 '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@17.0.87)(react@19.1.0))(@types/react@17.0.87)(react@19.1.0)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@17.0.90)(react@19.1.0))(@types/react@17.0.90)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 - '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.14.0(@types/react@17.0.87)(react@19.1.0) + '@emotion/is-prop-valid': 1.4.0 + '@emotion/react': 11.14.0(@types/react@17.0.90)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) '@emotion/utils': 1.4.2 react: 19.1.0 optionalDependencies: - '@types/react': 17.0.87 + '@types/react': 17.0.90 transitivePeerDependencies: - supports-color '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 - '@emotion/is-prop-valid': 1.3.1 + '@emotion/is-prop-valid': 1.4.0 '@emotion/react': 11.14.0(@types/react@18.2.0)(react@18.2.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.2.0) @@ -23370,9 +25445,9 @@ snapshots: '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@18.2.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 - '@emotion/is-prop-valid': 1.3.1 + '@emotion/is-prop-valid': 1.4.0 '@emotion/react': 11.14.0(@types/react@18.2.0)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.2.0) @@ -23385,9 +25460,9 @@ snapshots: '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.13.5 - '@emotion/is-prop-valid': 1.3.1 + '@emotion/is-prop-valid': 1.4.0 '@emotion/react': 11.14.0(@types/react@18.2.0)(react@19.1.0) '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) @@ -23412,105 +25487,105 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.25.8': + '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.8': + '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm@0.25.8': + '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-x64@0.25.8': + '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.8': + '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.8': + '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.8': + '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.8': + '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.8': + '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm@0.25.8': + '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.8': + '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.8': + '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.8': + '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.8': + '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.8': + '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.8': + '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-x64@0.25.8': + '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.8': + '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.8': + '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.8': + '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.8': + '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.25.8': + '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/sunos-x64@0.25.8': + '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.8': + '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-ia32@0.25.8': + '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-x64@0.25.8': + '@esbuild/win32-x64@0.25.12': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.26.0(jiti@2.6.1))': dependencies: - eslint: 9.26.0(jiti@2.5.1) + eslint: 9.26.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.27.0(jiti@2.6.1))': dependencies: - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} '@eslint/config-array@0.20.1': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1(supports-color@8.1.1) + '@eslint/object-schema': 2.1.7 + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -23525,33 +25600,33 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/core@0.15.1': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -23563,11 +25638,11 @@ snapshots: '@eslint/js@9.27.0': {} - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.7': {} - '@eslint/plugin-kit@0.3.4': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.15.1 + '@eslint/core': 0.15.2 levn: 0.4.1 '@fal-works/esbuild-plugin-global-externals@2.1.2': {} @@ -23576,37 +25651,43 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.10 - '@floating-ui/dom@1.7.3': + '@floating-ui/dom@1.7.4': dependencies: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@floating-ui/react-dom@2.1.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/dom': 1.7.3 + '@floating-ui/dom': 1.7.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@floating-ui/react-dom@2.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.7.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/react-dom@2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@floating-ui/dom': 1.7.3 + '@floating-ui/dom': 1.7.4 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) '@floating-ui/react@0.26.28(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/react-dom': 2.1.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@floating-ui/utils': 0.2.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tabbable: 6.2.0 + tabbable: 6.3.0 '@floating-ui/utils@0.2.10': {} - '@formatjs/ecma402-abstract@2.3.4': + '@formatjs/ecma402-abstract@2.3.6': dependencies: '@formatjs/fast-memoize': 2.2.7 - '@formatjs/intl-localematcher': 0.6.1 + '@formatjs/intl-localematcher': 0.6.2 decimal.js: 10.6.0 tslib: 2.8.1 @@ -23614,37 +25695,37 @@ snapshots: dependencies: tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.11.2': + '@formatjs/icu-messageformat-parser@2.11.4': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/icu-skeleton-parser': 1.8.14 + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/icu-skeleton-parser': 1.8.16 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.8.14': + '@formatjs/icu-skeleton-parser@1.8.16': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/ecma402-abstract': 2.3.6 tslib: 2.8.1 - '@formatjs/intl-localematcher@0.6.1': + '@formatjs/intl-localematcher@0.6.2': dependencies: tslib: 2.8.1 - '@formatjs/intl@3.1.6(typescript@4.9.5)': + '@formatjs/intl@3.1.8(typescript@4.9.5)': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/ecma402-abstract': 2.3.6 '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.2 - intl-messageformat: 10.7.16 + '@formatjs/icu-messageformat-parser': 2.11.4 + intl-messageformat: 10.7.18 tslib: 2.8.1 optionalDependencies: typescript: 4.9.5 - '@formatjs/intl@3.1.6(typescript@5.8.3)': + '@formatjs/intl@3.1.8(typescript@5.8.3)': dependencies: - '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/ecma402-abstract': 2.3.6 '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.2 - intl-messageformat: 10.7.16 + '@formatjs/icu-messageformat-parser': 2.11.4 + intl-messageformat: 10.7.18 tslib: 2.8.1 optionalDependencies: typescript: 5.8.3 @@ -23653,23 +25734,25 @@ snapshots: '@gar/promisify@1.1.3': {} - '@graphiql/react@0.26.2(@codemirror/language@6.11.2)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@github/markdown-toolbar-element@2.2.3': {} + + '@graphiql/react@0.26.2(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@graphiql/toolkit': 0.11.3(@types/node@22.15.35)(graphql@16.11.0) + '@graphiql/toolkit': 0.11.3(@types/node@22.15.35)(graphql@16.12.0) '@headlessui/react': 1.7.19(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-dialog': 1.1.14(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-dropdown-menu': 2.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-tooltip': 1.2.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@types/codemirror': 5.60.16 + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.2.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/codemirror': 5.60.17 clsx: 1.2.1 - codemirror: 5.65.19 - codemirror-graphql: 2.2.4(@codemirror/language@6.11.2)(codemirror@5.65.19)(graphql@16.11.0) + codemirror: 5.65.20 + codemirror-graphql: 2.2.4(@codemirror/language@6.11.3)(codemirror@5.65.20)(graphql@16.12.0) copy-to-clipboard: 3.3.3 framer-motion: 6.5.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) get-value: 3.0.1 - graphql: 16.11.0 - graphql-language-service: 5.5.0(graphql@16.11.0) + graphql: 16.12.0 + graphql-language-service: 5.5.0(graphql@16.12.0) markdown-it: 14.1.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -23681,11 +25764,11 @@ snapshots: - '@types/react-dom' - graphql-ws - '@graphiql/toolkit@0.11.3(@types/node@22.15.35)(graphql@16.11.0)': + '@graphiql/toolkit@0.11.3(@types/node@22.15.35)(graphql@16.12.0)': dependencies: '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 - graphql: 16.11.0 - meros: 1.3.1(@types/node@22.15.35) + graphql: 16.12.0 + meros: 1.3.2(@types/node@22.15.35) transitivePeerDependencies: - '@types/node' @@ -23709,25 +25792,34 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@headlessui/react@2.2.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@headlessui/react@2.2.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react': 0.26.28(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/focus': 3.21.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/interactions': 3.25.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/focus': 3.21.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/interactions': 3.25.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-virtual': 3.13.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-sync-external-store: 1.5.0(react@18.2.0) + use-sync-external-store: 1.6.0(react@18.2.0) '@hookform/resolvers@2.9.11(react-hook-form@7.56.4(react@18.2.0))': dependencies: react-hook-form: 7.56.4(react@18.2.0) + '@hookform/resolvers@3.3.4(react-hook-form@7.56.4(react@18.2.0))': + dependencies: + react-hook-form: 7.56.4(react@18.2.0) + '@hookform/resolvers@5.0.1(react-hook-form@7.56.4(react@18.2.0))': dependencies: '@standard-schema/utils': 0.3.0 react-hook-form: 7.56.4(react@18.2.0) + '@hookform/resolvers@5.2.2(react-hook-form@7.56.4(react@18.2.0))': + dependencies: + '@standard-schema/utils': 0.3.0 + react-hook-form: 7.56.4(react@18.2.0) + '@hookform/resolvers@5.2.2(react-hook-form@7.63.0(react@18.2.0))': dependencies: '@standard-schema/utils': 0.3.0 @@ -23735,15 +25827,15 @@ snapshots: '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -23752,8 +25844,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.3': {} '@iarna/toml@2.2.5': {} @@ -23768,7 +25858,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -23778,7 +25868,7 @@ snapshots: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.14.1 + js-yaml: 4.1.1 resolve-from: 5.0.0 '@istanbuljs/schema@0.1.3': {} @@ -23800,6 +25890,15 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 + '@jest/console@30.2.0': + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + chalk: 4.1.2 + jest-message-util: 30.2.0 + jest-util: 30.2.0 + slash: 3.0.0 + '@jest/core@25.5.4': dependencies: '@jest/console': 25.5.0 @@ -23836,7 +25935,7 @@ snapshots: - supports-color - utf-8-validate - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -23850,7 +25949,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -23871,6 +25970,44 @@ snapshots: - supports-color - ts-node + '@jest/core@30.2.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3))': + dependencies: + '@jest/console': 30.2.0 + '@jest/pattern': 30.0.1 + '@jest/reporters': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 4.3.1 + exit-x: 0.2.2 + graceful-fs: 4.2.11 + jest-changed-files: 30.2.0 + jest-config: 30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) + jest-haste-map: 30.2.0 + jest-message-util: 30.2.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.2.0 + jest-resolve-dependencies: 30.2.0 + jest-runner: 30.2.0 + jest-runtime: 30.2.0 + jest-snapshot: 30.2.0 + jest-util: 30.2.0 + jest-validate: 30.2.0 + jest-watcher: 30.2.0 + micromatch: 4.0.8 + pretty-format: 30.2.0 + slash: 3.0.0 + transitivePeerDependencies: + - babel-plugin-macros + - esbuild-register + - supports-color + - ts-node + + '@jest/diff-sequences@30.0.1': {} + '@jest/environment@25.5.0': dependencies: '@jest/fake-timers': 25.5.0 @@ -23884,10 +26021,21 @@ snapshots: '@types/node': 22.15.35 jest-mock: 29.7.0 + '@jest/environment@30.2.0': + dependencies: + '@jest/fake-timers': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + jest-mock: 30.2.0 + '@jest/expect-utils@29.7.0': dependencies: jest-get-type: 29.6.3 + '@jest/expect-utils@30.2.0': + dependencies: + '@jest/get-type': 30.1.0 + '@jest/expect@29.7.0': dependencies: expect: 29.7.0 @@ -23895,6 +26043,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/expect@30.2.0': + dependencies: + expect: 30.2.0 + jest-snapshot: 30.2.0 + transitivePeerDependencies: + - supports-color + '@jest/fake-timers@25.5.0': dependencies: '@jest/types': 25.5.0 @@ -23912,6 +26067,17 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 + '@jest/fake-timers@30.2.0': + dependencies: + '@jest/types': 30.2.0 + '@sinonjs/fake-timers': 13.0.5 + '@types/node': 22.15.35 + jest-message-util: 30.2.0 + jest-mock: 30.2.0 + jest-util: 30.2.0 + + '@jest/get-type@30.1.0': {} + '@jest/globals@25.5.2': dependencies: '@jest/environment': 25.5.0 @@ -23927,6 +26093,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/globals@30.2.0': + dependencies: + '@jest/environment': 30.2.0 + '@jest/expect': 30.2.0 + '@jest/types': 30.2.0 + jest-mock: 30.2.0 + transitivePeerDependencies: + - supports-color + + '@jest/pattern@30.0.1': + dependencies: + '@types/node': 22.15.35 + jest-regex-util: 30.0.1 + '@jest/reporters@25.5.1': dependencies: '@bcoe/v8-coverage': 0.2.3 @@ -23935,7 +26115,7 @@ snapshots: '@jest/transform': 25.5.1 '@jest/types': 25.5.0 chalk: 3.0.0 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -23943,7 +26123,7 @@ snapshots: istanbul-lib-instrument: 4.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 jest-haste-map: 25.5.1 jest-resolve: 25.5.1 jest-util: 25.5.0 @@ -23965,10 +26145,10 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 '@types/node': 22.15.35 chalk: 4.1.2 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -23976,7 +26156,7 @@ snapshots: istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 @@ -23987,10 +26167,49 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/reporters@30.2.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 22.15.35 + chalk: 4.1.2 + collect-v8-coverage: 1.0.3 + exit-x: 0.2.2 + glob: 10.5.0 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + jest-message-util: 30.2.0 + jest-util: 30.2.0 + jest-worker: 30.2.0 + slash: 3.0.0 + string-length: 4.0.2 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 + '@jest/schemas@30.0.5': + dependencies: + '@sinclair/typebox': 0.34.41 + + '@jest/snapshot-utils@30.2.0': + dependencies: + '@jest/types': 30.2.0 + chalk: 4.1.2 + graceful-fs: 4.2.11 + natural-compare: 1.4.0 + '@jest/source-map@25.5.0': dependencies: callsites: 3.1.0 @@ -23999,7 +26218,13 @@ snapshots: '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/source-map@30.0.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -24008,14 +26233,21 @@ snapshots: '@jest/console': 25.5.0 '@jest/types': 25.5.0 '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 '@jest/test-result@29.7.0': dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 + + '@jest/test-result@30.2.0': + dependencies: + '@jest/console': 30.2.0 + '@jest/types': 30.2.0 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.3 '@jest/test-sequencer@25.5.4': dependencies: @@ -24037,6 +26269,13 @@ snapshots: jest-haste-map: 29.7.0 slash: 3.0.0 + '@jest/test-sequencer@30.2.0': + dependencies: + '@jest/test-result': 30.2.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + slash: 3.0.0 + '@jest/transform@25.5.1': dependencies: '@babel/core': 7.27.7 @@ -24082,7 +26321,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -24098,11 +26337,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/transform@30.2.0': + dependencies: + '@babel/core': 7.27.7 + '@jest/types': 30.2.0 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 7.0.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + jest-regex-util: 30.0.1 + jest-util: 30.2.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + '@jest/types@25.5.0': dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 1.1.2 - '@types/yargs': 15.0.19 + '@types/yargs': 15.0.20 chalk: 3.0.0 '@jest/types@26.6.2': @@ -24110,7 +26369,7 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 22.15.35 - '@types/yargs': 15.0.19 + '@types/yargs': 15.0.20 chalk: 4.1.2 '@jest/types@29.6.3': @@ -24119,35 +26378,51 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 22.15.35 - '@types/yargs': 17.0.33 + '@types/yargs': 17.0.35 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)': + '@jest/types@30.2.0': dependencies: - glob: 10.4.5 - magic-string: 0.30.17 + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.5 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.15.35 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))': + dependencies: + glob: 10.5.0 + magic-string: 0.27.0 react-docgen-typescript: 2.4.0(typescript@5.8.3) + vite: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2) optionalDependencies: typescript: 5.8.3 - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/source-map@0.3.10': + '@jridgewell/source-map@0.3.11': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping@0.3.29': + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@jsdevtools/ono@7.1.3': {} @@ -24155,7 +26430,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/buffers@1.0.0(tslib@2.8.1)': + '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': dependencies: tslib: 2.8.1 @@ -24163,47 +26438,278 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/json-pack@1.8.0(tslib@2.8.1)': + '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) - '@jsonjoy.com/json-pointer': 1.0.1(tslib@2.8.1) + '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) hyperdyperid: 1.2.0 - thingies: 1.21.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/json-pointer@1.0.1(tslib@2.8.1)': + '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': dependencies: + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) tslib: 2.8.1 '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': dependencies: - '@jsonjoy.com/buffers': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) tslib: 2.8.1 '@juggle/resize-observer@3.4.0': {} - '@keyv/serialize@1.1.0': {} + '@keyv/bigmap@1.3.0(keyv@5.5.4)': + dependencies: + hashery: 1.3.0 + hookified: 1.13.0 + keyv: 5.5.4 + + '@keyv/serialize@1.1.1': {} '@leichtgewicht/ip-codec@2.0.5': {} - '@lezer/common@1.2.3': {} + '@lexical/clipboard@0.17.1': + dependencies: + '@lexical/html': 0.17.1 + '@lexical/list': 0.17.1 + '@lexical/selection': 0.17.1 + '@lexical/utils': 0.17.1 + lexical: 0.17.1 - '@lezer/highlight@1.2.1': + '@lexical/code@0.17.1': dependencies: - '@lezer/common': 1.2.3 + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + prismjs: 1.30.0 - '@lezer/lr@1.4.2': + '@lexical/devtools-core@0.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@lezer/common': 1.2.3 + '@lexical/html': 0.17.1 + '@lexical/link': 0.17.1 + '@lexical/mark': 0.17.1 + '@lexical/table': 0.17.1 + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@lexical/dragon@0.17.1': + dependencies: + lexical: 0.17.1 + + '@lexical/hashtag@0.17.1': + dependencies: + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/history@0.17.1': + dependencies: + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/html@0.17.1': + dependencies: + '@lexical/selection': 0.17.1 + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/link@0.17.1': + dependencies: + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/list@0.17.1': + dependencies: + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/mark@0.17.1': + dependencies: + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/markdown@0.17.1': + dependencies: + '@lexical/code': 0.17.1 + '@lexical/link': 0.17.1 + '@lexical/list': 0.17.1 + '@lexical/rich-text': 0.17.1 + '@lexical/text': 0.17.1 + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/offset@0.17.1': + dependencies: + lexical: 0.17.1 + + '@lexical/overflow@0.17.1': + dependencies: + lexical: 0.17.1 + + '@lexical/plain-text@0.17.1': + dependencies: + '@lexical/clipboard': 0.17.1 + '@lexical/selection': 0.17.1 + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/react@0.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@lexical/clipboard': 0.17.1 + '@lexical/code': 0.17.1 + '@lexical/devtools-core': 0.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@lexical/dragon': 0.17.1 + '@lexical/hashtag': 0.17.1 + '@lexical/history': 0.17.1 + '@lexical/link': 0.17.1 + '@lexical/list': 0.17.1 + '@lexical/mark': 0.17.1 + '@lexical/markdown': 0.17.1 + '@lexical/overflow': 0.17.1 + '@lexical/plain-text': 0.17.1 + '@lexical/rich-text': 0.17.1 + '@lexical/selection': 0.17.1 + '@lexical/table': 0.17.1 + '@lexical/text': 0.17.1 + '@lexical/utils': 0.17.1 + '@lexical/yjs': 0.17.1 + lexical: 0.17.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 3.1.4(react@18.2.0) + transitivePeerDependencies: + - yjs + + '@lexical/rich-text@0.17.1': + dependencies: + '@lexical/clipboard': 0.17.1 + '@lexical/selection': 0.17.1 + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/selection@0.17.1': + dependencies: + lexical: 0.17.1 + + '@lexical/table@0.17.1': + dependencies: + '@lexical/utils': 0.17.1 + lexical: 0.17.1 + + '@lexical/text@0.17.1': + dependencies: + lexical: 0.17.1 + + '@lexical/utils@0.17.1': + dependencies: + '@lexical/list': 0.17.1 + '@lexical/selection': 0.17.1 + '@lexical/table': 0.17.1 + lexical: 0.17.1 + + '@lexical/yjs@0.17.1': + dependencies: + '@lexical/offset': 0.17.1 + lexical: 0.17.1 + + '@lezer/common@1.4.0': {} + + '@lezer/cpp@1.1.3': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/css@1.3.0': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/go@1.0.1': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/highlight@1.2.3': + dependencies: + '@lezer/common': 1.4.0 + + '@lezer/html@1.3.12': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/java@1.1.3': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/javascript@1.5.4': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/json@1.0.3': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/lr@1.4.4': + dependencies: + '@lezer/common': 1.4.0 + + '@lezer/markdown@1.6.0': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + + '@lezer/php@1.0.5': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/python@1.1.18': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/rust@1.0.2': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/sass@1.1.0': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 '@lezer/xml@1.0.6': dependencies: - '@lezer/common': 1.2.3 - '@lezer/highlight': 1.2.1 - '@lezer/lr': 1.4.2 + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 + + '@lezer/yaml@1.0.3': + dependencies: + '@lezer/common': 1.4.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.4 '@marijn/find-cluster-break@1.0.2': {} @@ -24235,13 +26741,19 @@ snapshots: dependencies: react: 18.2.0 + '@mdx-js/react@2.3.0(react@18.2.0)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 18.2.0 + react: 18.2.0 + '@mdx-js/react@2.3.0(react@19.1.0)': dependencies: '@types/mdx': 2.0.13 '@types/react': 18.2.0 react: 19.1.0 - '@mdx-js/react@3.1.0(@types/react@18.2.0)(react@19.1.0)': + '@mdx-js/react@3.1.1(@types/react@18.2.0)(react@19.1.0)': dependencies: '@types/mdx': 2.0.13 '@types/react': 18.2.0 @@ -24249,9 +26761,78 @@ snapshots: '@mdx-js/util@1.6.22': {} - '@microsoft/1ds-core-js@4.3.9(tslib@2.8.1)': + '@mdxeditor/editor@3.14.0(@codemirror/language@6.11.3)(@lezer/highlight@1.2.3)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@codemirror/lang-markdown': 6.5.0 + '@codemirror/language-data': 6.5.2 + '@codemirror/merge': 6.11.2 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@codesandbox/sandpack-react': 2.20.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@lexical/clipboard': 0.17.1 + '@lexical/link': 0.17.1 + '@lexical/list': 0.17.1 + '@lexical/markdown': 0.17.1 + '@lexical/plain-text': 0.17.1 + '@lexical/react': 0.17.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@lexical/rich-text': 0.17.1 + '@lexical/selection': 0.17.1 + '@lexical/utils': 0.17.1 + '@mdxeditor/gurx': 1.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/colors': 3.0.0 + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-icons': 1.3.2(react@18.2.0) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-select': 2.2.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + classnames: 2.5.1 + cm6-theme-basic-light: 0.2.0(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.8)(@lezer/highlight@1.2.3) + codemirror: 6.0.2 + downshift: 7.6.2(react@18.2.0) + js-yaml: 4.1.1 + lexical: 0.17.1 + mdast-util-directive: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-frontmatter: 2.0.1 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-mdx: 3.0.0 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-to-markdown: 2.1.2 + micromark-extension-directive: 3.0.2 + micromark-extension-frontmatter: 2.0.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs: 3.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-hook-form: 7.56.4(react@18.2.0) + unidiff: 1.0.4 + transitivePeerDependencies: + - '@codemirror/language' + - '@lezer/highlight' + - '@types/react' + - '@types/react-dom' + - supports-color + - yjs + + '@mdxeditor/gurx@1.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@microsoft/applicationinsights-core-js': 3.3.9(tslib@2.8.1) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@microsoft/1ds-core-js@4.3.10(tslib@2.8.1)': + dependencies: + '@microsoft/applicationinsights-core-js': 3.3.10(tslib@2.8.1) '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.4 @@ -24259,9 +26840,9 @@ snapshots: transitivePeerDependencies: - tslib - '@microsoft/1ds-post-js@4.3.9(tslib@2.8.1)': + '@microsoft/1ds-post-js@4.3.10(tslib@2.8.1)': dependencies: - '@microsoft/1ds-core-js': 4.3.9(tslib@2.8.1) + '@microsoft/1ds-core-js': 4.3.10(tslib@2.8.1) '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.4 @@ -24269,25 +26850,25 @@ snapshots: transitivePeerDependencies: - tslib - '@microsoft/applicationinsights-channel-js@3.3.9(tslib@2.8.1)': + '@microsoft/applicationinsights-channel-js@3.3.10(tslib@2.8.1)': dependencies: - '@microsoft/applicationinsights-common': 3.3.9(tslib@2.8.1) - '@microsoft/applicationinsights-core-js': 3.3.9(tslib@2.8.1) + '@microsoft/applicationinsights-common': 3.3.10(tslib@2.8.1) + '@microsoft/applicationinsights-core-js': 3.3.10(tslib@2.8.1) '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.4 '@nevware21/ts-utils': 0.12.5 tslib: 2.8.1 - '@microsoft/applicationinsights-common@3.3.9(tslib@2.8.1)': + '@microsoft/applicationinsights-common@3.3.10(tslib@2.8.1)': dependencies: - '@microsoft/applicationinsights-core-js': 3.3.9(tslib@2.8.1) + '@microsoft/applicationinsights-core-js': 3.3.10(tslib@2.8.1) '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-utils': 0.12.5 tslib: 2.8.1 - '@microsoft/applicationinsights-core-js@3.3.9(tslib@2.8.1)': + '@microsoft/applicationinsights-core-js@3.3.10(tslib@2.8.1)': dependencies: '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 @@ -24299,11 +26880,11 @@ snapshots: dependencies: '@nevware21/ts-utils': 0.12.5 - '@microsoft/applicationinsights-web-basic@3.3.9(tslib@2.8.1)': + '@microsoft/applicationinsights-web-basic@3.3.10(tslib@2.8.1)': dependencies: - '@microsoft/applicationinsights-channel-js': 3.3.9(tslib@2.8.1) - '@microsoft/applicationinsights-common': 3.3.9(tslib@2.8.1) - '@microsoft/applicationinsights-core-js': 3.3.9(tslib@2.8.1) + '@microsoft/applicationinsights-channel-js': 3.3.10(tslib@2.8.1) + '@microsoft/applicationinsights-common': 3.3.10(tslib@2.8.1) + '@microsoft/applicationinsights-core-js': 3.3.10(tslib@2.8.1) '@microsoft/applicationinsights-shims': 3.0.1 '@microsoft/dynamicproto-js': 2.0.3 '@nevware21/ts-async': 0.5.4 @@ -24339,37 +26920,121 @@ snapshots: dependencies: exenv-es6: 1.1.1 - '@modelcontextprotocol/sdk@1.17.1': + '@modelcontextprotocol/inspector-cli@0.17.2': + dependencies: + '@modelcontextprotocol/sdk': 1.24.0 + commander: 13.1.0 + spawn-rx: 5.1.2 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + + '@modelcontextprotocol/inspector-client@0.17.2(@types/react-dom@18.2.0)(@types/react@18.2.0)': dependencies: + '@modelcontextprotocol/sdk': 1.24.0 + '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-icons': 1.3.2(react@18.3.1) + '@radix-ui/react-label': 2.1.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 2.2.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.4(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-switch': 1.2.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toast': 1.2.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ajv: 6.12.6 + class-variance-authority: 0.7.1 + clsx: 2.1.1 + cmdk: 1.1.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + lucide-react: 0.523.0(react@18.3.1) + pkce-challenge: 4.1.0 + prismjs: 1.30.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-simple-code-editor: 0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + serve-handler: 6.1.6 + tailwind-merge: 2.6.0 + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@types/react' + - '@types/react-dom' + - supports-color + + '@modelcontextprotocol/inspector-server@0.17.2': + dependencies: + '@modelcontextprotocol/sdk': 1.24.0 + cors: 2.8.5 + express: 5.2.1 + shell-quote: 1.8.3 + spawn-rx: 5.1.2 + ws: 8.18.3 + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - bufferutil + - supports-color + - utf-8-validate + + '@modelcontextprotocol/inspector@0.17.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.18)(@types/react-dom@18.2.0)(@types/react@18.2.0)(typescript@5.8.3)': + dependencies: + '@modelcontextprotocol/inspector-cli': 0.17.2 + '@modelcontextprotocol/inspector-client': 0.17.2(@types/react-dom@18.2.0)(@types/react@18.2.0) + '@modelcontextprotocol/inspector-server': 0.17.2 + '@modelcontextprotocol/sdk': 1.24.0 + concurrently: 9.2.1 + node-fetch: 3.3.2 + open: 10.2.0 + shell-quote: 1.8.3 + spawn-rx: 5.1.2 + ts-node: 10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.18)(typescript@5.8.3) + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - bufferutil + - supports-color + - typescript + - utf-8-validate + + '@modelcontextprotocol/sdk@1.24.0': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 cors: 2.8.5 cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.0.6 - express: 5.1.0 - express-rate-limit: 7.5.1(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.0 + express: 5.2.1 + express-rate-limit: 7.5.1(express@5.2.1) + jose: 6.1.3 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) + zod-to-json-schema: 3.25.0(zod@3.25.76) transitivePeerDependencies: - supports-color - '@monaco-editor/loader@1.5.0': + '@monaco-editor/loader@1.7.0': dependencies: state-local: 1.0.7 '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@monaco-editor/loader': 1.5.0 + '@monaco-editor/loader': 1.7.0 monaco-editor: 0.52.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@monaco-editor/loader': 1.5.0 + '@monaco-editor/loader': 1.7.0 monaco-editor: 0.52.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -24416,12 +27081,20 @@ snapshots: '@n1ru4l/push-pull-async-iterable-iterator@3.2.0': {} + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@ndelangen/get-tarball@3.0.9': dependencies: gunzip-maybe: 1.4.2 pump: 3.0.3 tar-fs: 3.1.1 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a @@ -24448,12 +27121,12 @@ snapshots: '@npmcli/fs@1.1.1': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/move-file@1.1.2': dependencies: @@ -24482,6 +27155,8 @@ snapshots: '@oozcitak/util@8.3.8': {} + '@open-draft/deferred-promise@2.2.0': {} + '@opentelemetry/api@1.9.0': {} '@parcel/watcher-android-arm64@2.5.1': @@ -24548,75 +27223,111 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.52.0': + '@pkgr/core@0.2.9': {} + + '@playwright/test@1.55.1': + dependencies: + playwright: 1.55.1 + + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0)': + dependencies: + ansi-html: 0.0.9 + core-js-pure: 3.47.0 + error-stack-parser: 2.1.4 + html-entities: 2.6.0 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 4.3.3 + source-map: 0.7.6 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + optionalDependencies: + '@types/webpack': 5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + type-fest: 4.41.0 + webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) + webpack-hot-middleware: 2.26.1 + + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17)))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)))': dependencies: - playwright: 1.52.0 + ansi-html: 0.0.9 + core-js-pure: 3.47.0 + error-stack-parser: 2.1.4 + html-entities: 2.6.0 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 4.3.3 + source-map: 0.7.6 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + optionalDependencies: + '@types/webpack': 5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) + type-fest: 4.41.0 + webpack-dev-server: 5.2.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0)': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.47.0 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 react-refresh: 0.11.0 - schema-utils: 4.3.2 + schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(webpack-cli@4.10.0) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@4.10.0) type-fest: 4.41.0 - webpack-dev-server: 5.2.2(webpack-cli@4.10.0)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@4.10.0)(webpack@5.103.0) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0)': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.47.0 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 react-refresh: 0.11.0 - schema-utils: 4.3.2 + schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: - '@types/webpack': 5.28.5(webpack-cli@6.0.1) + '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 - webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)(webpack@5.101.0)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)(webpack@5.103.0)': dependencies: ansi-html: 0.0.9 - core-js-pure: 3.45.0 + core-js-pure: 3.47.0 error-stack-parser: 2.1.4 html-entities: 2.6.0 loader-utils: 2.0.4 react-refresh: 0.11.0 - schema-utils: 4.3.2 + schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: '@types/webpack': 5.28.5 type-fest: 4.41.0 - webpack-dev-server: 5.2.2(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack@5.103.0) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.6.1(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0)': + '@pmmmwh/react-refresh-webpack-plugin@0.6.2(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0)': dependencies: - anser: 2.3.2 - core-js-pure: 3.45.0 + anser: 2.3.3 + core-js-pure: 3.47.0 error-stack-parser: 2.1.4 html-entities: 2.6.0 react-refresh: 0.11.0 - schema-utils: 4.3.2 + schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: '@types/webpack': 5.28.5(webpack-cli@5.1.4) type-fest: 4.41.0 - webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) webpack-hot-middleware: 2.26.1 '@projectstorm/geometry@6.7.4': {} @@ -24810,19 +27521,56 @@ snapshots: - '@types/react' - supports-color + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@radix-ui/colors@3.0.0': {} + '@radix-ui/number@1.0.1': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 + + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 + + '@radix-ui/primitive@1.1.3': {} - '@radix-ui/primitive@1.1.2': {} + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -24839,9 +27587,47 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -24864,6 +27650,18 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@19.1.0) @@ -24876,9 +27674,16 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 @@ -24889,15 +27694,28 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.2.0)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.2.0)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-context@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-context@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 @@ -24908,37 +27726,72 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-context@1.1.2(@types/react@18.2.0)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-context@1.1.2(@types/react@18.2.0)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 - '@radix-ui/react-dialog@1.1.14(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.2.0) aria-hidden: 1.2.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.7.1(@types/react@18.2.0)(react@18.2.0) + react-remove-scroll: 2.7.2(@types/react@18.2.0)(react@18.2.0) optionalDependencies: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.2.0)(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-direction@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-direction@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 @@ -24949,15 +27802,35 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-direction@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-direction@1.1.1(@types/react@18.2.0)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -24969,9 +27842,9 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.2.0) @@ -24982,13 +27855,26 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.2.0) - '@radix-ui/react-menu': 2.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.2.0) react: 18.2.0 @@ -24997,22 +27883,47 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 - '@radix-ui/react-focus-guards@1.1.2(@types/react@18.2.0)(react@18.2.0)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@18.2.0)(react@18.2.0)': dependencies: react: 18.2.0 optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-focus-guards@1.1.3(@types/react@18.2.0)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@19.1.0) @@ -25033,9 +27944,36 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-icons@1.3.2(react@18.2.0)': + dependencies: + react: 18.2.0 + + '@radix-ui/react-icons@1.3.2(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@radix-ui/react-id@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-id@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 optionalDependencies: @@ -25048,6 +27986,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-id@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-id@1.1.1(@types/react@18.2.0)(react@19.1.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@19.1.0) @@ -25055,36 +28000,110 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - '@radix-ui/react-menu@2.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-label@2.1.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-menu@2.1.16(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.2.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.2.0) aria-hidden: 1.2.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.7.1(@types/react@18.2.0)(react@18.2.0) + react-remove-scroll: 2.7.2(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-popover@1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.2.0) + aria-hidden: 1.2.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.7.2(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-popover@1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.2.0)(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@floating-ui/react-dom': 2.1.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) optionalDependencies: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 - '@floating-ui/react-dom': 2.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@babel/runtime': 7.28.4 + '@floating-ui/react-dom': 2.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@19.1.0) @@ -25100,9 +28119,9 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-popper@1.2.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-popper@1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/react-dom': 2.1.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) @@ -25118,9 +28137,37 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-popper@1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -25138,7 +28185,17 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-presence@1.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-presence@1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.2.0) @@ -25148,9 +28205,29 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-presence@1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -25167,6 +28244,15 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@19.1.0) @@ -25176,9 +28262,27 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-primitive@2.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-slot': 1.2.4(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-primitive@2.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.2.4(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) @@ -25193,9 +28297,26 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@19.1.0) @@ -25210,9 +28331,39 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-select@1.2.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + aria-hidden: 1.2.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-select@1.2.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -25240,6 +28391,73 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-select@2.2.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + aria-hidden: 1.2.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.7.2(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-select@2.2.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.2.0)(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-separator@1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-separator@1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -25249,9 +28467,17 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-slot@1.0.2(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-slot@1.0.2(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 optionalDependencies: @@ -25264,6 +28490,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-slot@1.2.3(@types/react@18.2.0)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-slot@1.2.3(@types/react@18.2.0)(react@19.1.0)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@19.1.0) @@ -25271,14 +28504,94 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - '@radix-ui/react-toggle-group@1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-slot@1.2.4(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-slot@1.2.4(@types/react@18.2.0)(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-switch@1.2.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-toast@1.2.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -25286,9 +28599,20 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-toggle@1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-toggle@1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 @@ -25297,31 +28621,46 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-toolbar@1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-separator': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-toolbar@1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-direction': 1.1.1(@types/react@18.2.0)(react@19.1.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@radix-ui/react-separator': 1.1.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toggle-group': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 - '@radix-ui/react-tooltip@1.2.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.2.0) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.2.0) @@ -25332,9 +28671,36 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 @@ -25345,15 +28711,29 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.2.0)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 optionalDependencies: @@ -25367,6 +28747,14 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.2.0)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.2.0)(react@19.1.0)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.2.0)(react@19.1.0) @@ -25382,6 +28770,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.2.0)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.2.0)(react@19.1.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@19.1.0) @@ -25389,9 +28784,17 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 optionalDependencies: @@ -25404,9 +28807,23 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 @@ -25417,22 +28834,55 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.2.0)(react@19.1.0)': dependencies: react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-previous@1.1.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-previous@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-rect@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-rect@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/rect': 1.0.1 react: 19.1.0 optionalDependencies: @@ -25445,9 +28895,24 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-rect@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-use-size@1.0.1(@types/react@18.2.0)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.0 + '@radix-ui/react-use-size@1.0.1(@types/react@18.2.0)(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.0)(react@19.1.0) react: 19.1.0 optionalDependencies: @@ -25460,9 +28925,26 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + '@radix-ui/react-use-size@1.1.1(@types/react@18.2.0)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.2.0)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.2.0 + + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -25479,28 +28961,46 @@ snapshots: '@types/react': 18.2.0 '@types/react-dom': 18.2.0 + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + + '@radix-ui/react-visually-hidden@1.2.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + '@types/react-dom': 18.2.0 + '@radix-ui/rect@1.0.1': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@radix-ui/rect@1.1.1': {} - '@react-aria/focus@3.21.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/focus@3.21.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@react-aria/interactions': 3.25.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-aria/utils': 3.30.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-types/shared': 3.31.0(react@18.2.0) + '@react-aria/interactions': 3.25.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.31.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-types/shared': 3.32.1(react@18.2.0) '@swc/helpers': 0.5.17 clsx: 2.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@react-aria/interactions@3.25.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/interactions@3.25.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/ssr': 3.9.10(react@18.2.0) - '@react-aria/utils': 3.30.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@react-aria/utils': 3.31.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.31.0(react@18.2.0) + '@react-types/shared': 3.32.1(react@18.2.0) '@swc/helpers': 0.5.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -25510,12 +29010,12 @@ snapshots: '@swc/helpers': 0.5.17 react: 18.2.0 - '@react-aria/utils@3.30.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@react-aria/utils@3.31.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@react-aria/ssr': 3.9.10(react@18.2.0) '@react-stately/flags': 3.1.2 '@react-stately/utils': 3.10.8(react@18.2.0) - '@react-types/shared': 3.31.0(react@18.2.0) + '@react-types/shared': 3.32.1(react@18.2.0) '@swc/helpers': 0.5.17 clsx: 2.1.1 react: 18.2.0 @@ -25527,6 +29027,16 @@ snapshots: '@react-dnd/shallowequal@4.0.2': {} + '@react-hook/intersection-observer@3.1.2(react@18.2.0)': + dependencies: + '@react-hook/passive-layout-effect': 1.2.1(react@18.2.0) + intersection-observer: 0.10.0 + react: 18.2.0 + + '@react-hook/passive-layout-effect@1.2.1(react@18.2.0)': + dependencies: + react: 18.2.0 + '@react-stately/flags@3.1.2': dependencies: '@swc/helpers': 0.5.17 @@ -25536,22 +29046,22 @@ snapshots: '@swc/helpers': 0.5.17 react: 18.2.0 - '@react-types/shared@3.31.0(react@18.2.0)': + '@react-types/shared@3.32.1(react@18.2.0)': dependencies: react: 18.2.0 - '@redhat-developer/locators@1.15.0(@redhat-developer/page-objects@1.15.0(selenium-webdriver@4.34.0)(typescript@5.8.3))(selenium-webdriver@4.34.0)': + '@redhat-developer/locators@1.17.0(@redhat-developer/page-objects@1.17.0(selenium-webdriver@4.38.0)(typescript@5.8.3))(selenium-webdriver@4.38.0)': dependencies: - '@redhat-developer/page-objects': 1.15.0(selenium-webdriver@4.34.0)(typescript@5.8.3) - selenium-webdriver: 4.34.0 + '@redhat-developer/page-objects': 1.17.0(selenium-webdriver@4.38.0)(typescript@5.8.3) + selenium-webdriver: 4.38.0 - '@redhat-developer/page-objects@1.15.0(selenium-webdriver@4.34.0)(typescript@5.8.3)': + '@redhat-developer/page-objects@1.17.0(selenium-webdriver@4.38.0)(typescript@5.8.3)': dependencies: - clipboardy: 4.0.0 + clipboardy: 5.0.1 clone-deep: 4.0.1 compare-versions: 6.1.1 - fs-extra: 11.3.1 - selenium-webdriver: 4.34.0 + fs-extra: 11.3.2 + selenium-webdriver: 4.38.0 type-fest: 4.41.0 typescript: 5.8.3 @@ -25574,41 +29084,41 @@ snapshots: glob: 7.2.3 is-reference: 1.2.1 magic-string: 0.25.9 - resolve: 1.22.10 + resolve: 1.22.11 rollup: 1.32.1 - '@rollup/plugin-commonjs@28.0.6(rollup@4.46.2)': + '@rollup/plugin-commonjs@28.0.9(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.46.2) + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) is-reference: 1.2.1 - magic-string: 0.30.17 + magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.46.2 + rollup: 4.53.3 '@rollup/plugin-json@4.1.0(rollup@1.32.1)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@1.32.1) rollup: 1.32.1 - '@rollup/plugin-json@6.1.0(rollup@4.46.2)': + '@rollup/plugin-json@6.1.0(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.46.2) + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) optionalDependencies: - rollup: 4.46.2 + rollup: 4.53.3 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.46.2)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.46.2) + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 optionalDependencies: - rollup: 4.46.2 + rollup: 4.53.3 '@rollup/plugin-node-resolve@9.0.0(rollup@1.32.1)': dependencies: @@ -25617,7 +29127,7 @@ snapshots: builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 rollup: 1.32.1 '@rollup/plugin-replace@2.4.2(rollup@1.32.1)': @@ -25638,72 +29148,78 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.2.0(rollup@4.46.2)': + '@rollup/pluginutils@5.3.0(rollup@4.53.3)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.46.2 + rollup: 4.53.3 + + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true - '@rollup/rollup-android-arm-eabi@4.46.2': + '@rollup/rollup-android-arm64@4.53.3': optional: true - '@rollup/rollup-android-arm64@4.46.2': + '@rollup/rollup-darwin-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-arm64@4.46.2': + '@rollup/rollup-darwin-x64@4.53.3': optional: true - '@rollup/rollup-darwin-x64@4.46.2': + '@rollup/rollup-freebsd-arm64@4.53.3': optional: true - '@rollup/rollup-freebsd-arm64@4.46.2': + '@rollup/rollup-freebsd-x64@4.53.3': optional: true - '@rollup/rollup-freebsd-x64@4.46.2': + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + '@rollup/rollup-linux-arm-musleabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.2': + '@rollup/rollup-linux-arm64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.2': + '@rollup/rollup-linux-arm64-musl@4.53.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.2': + '@rollup/rollup-linux-loong64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + '@rollup/rollup-linux-ppc64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-musl@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.2': + '@rollup/rollup-linux-s390x-gnu@4.53.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.2': + '@rollup/rollup-linux-x64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.2': + '@rollup/rollup-linux-x64-musl@4.53.3': optional: true - '@rollup/rollup-linux-x64-musl@4.46.2': + '@rollup/rollup-openharmony-arm64@4.53.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.2': + '@rollup/rollup-win32-arm64-msvc@4.53.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.2': + '@rollup/rollup-win32-ia32-msvc@4.53.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.2': + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': optional: true '@rtsao/scc@1.1.0': {} @@ -25712,85 +29228,85 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@secretlint/config-creator@9.3.4': + '@secretlint/config-creator@10.2.2': dependencies: - '@secretlint/types': 9.3.4 + '@secretlint/types': 10.2.2 - '@secretlint/config-loader@9.3.4': + '@secretlint/config-loader@10.2.2': dependencies: - '@secretlint/profiler': 9.3.4 - '@secretlint/resolver': 9.3.4 - '@secretlint/types': 9.3.4 + '@secretlint/profiler': 10.2.2 + '@secretlint/resolver': 10.2.2 + '@secretlint/types': 10.2.2 ajv: 8.17.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) rc-config-loader: 4.1.3 transitivePeerDependencies: - supports-color - '@secretlint/core@9.3.4': + '@secretlint/core@10.2.2': dependencies: - '@secretlint/profiler': 9.3.4 - '@secretlint/types': 9.3.4 - debug: 4.4.1(supports-color@8.1.1) + '@secretlint/profiler': 10.2.2 + '@secretlint/types': 10.2.2 + debug: 4.4.3(supports-color@8.1.1) structured-source: 4.0.0 transitivePeerDependencies: - supports-color - '@secretlint/formatter@9.3.4': + '@secretlint/formatter@10.2.2': dependencies: - '@secretlint/resolver': 9.3.4 - '@secretlint/types': 9.3.4 - '@textlint/linter-formatter': 14.8.4 - '@textlint/module-interop': 14.8.4 - '@textlint/types': 14.8.4 - chalk: 4.1.2 - debug: 4.4.1(supports-color@8.1.1) + '@secretlint/resolver': 10.2.2 + '@secretlint/types': 10.2.2 + '@textlint/linter-formatter': 15.4.0 + '@textlint/module-interop': 15.4.0 + '@textlint/types': 15.4.0 + chalk: 5.6.2 + debug: 4.4.3(supports-color@8.1.1) pluralize: 8.0.0 - strip-ansi: 6.0.1 + strip-ansi: 7.1.2 table: 6.9.0 - terminal-link: 2.1.1 + terminal-link: 4.0.0 transitivePeerDependencies: - supports-color - '@secretlint/node@9.3.4': + '@secretlint/node@10.2.2': dependencies: - '@secretlint/config-loader': 9.3.4 - '@secretlint/core': 9.3.4 - '@secretlint/formatter': 9.3.4 - '@secretlint/profiler': 9.3.4 - '@secretlint/source-creator': 9.3.4 - '@secretlint/types': 9.3.4 - debug: 4.4.1(supports-color@8.1.1) - p-map: 4.0.0 + '@secretlint/config-loader': 10.2.2 + '@secretlint/core': 10.2.2 + '@secretlint/formatter': 10.2.2 + '@secretlint/profiler': 10.2.2 + '@secretlint/source-creator': 10.2.2 + '@secretlint/types': 10.2.2 + debug: 4.4.3(supports-color@8.1.1) + p-map: 7.0.4 transitivePeerDependencies: - supports-color - '@secretlint/profiler@9.3.4': {} + '@secretlint/profiler@10.2.2': {} - '@secretlint/resolver@9.3.4': {} + '@secretlint/resolver@10.2.2': {} - '@secretlint/secretlint-formatter-sarif@9.3.4': + '@secretlint/secretlint-formatter-sarif@10.2.2': dependencies: - node-sarif-builder: 2.0.3 + node-sarif-builder: 3.3.1 - '@secretlint/secretlint-rule-no-dotenv@9.3.4': + '@secretlint/secretlint-rule-no-dotenv@10.2.2': dependencies: - '@secretlint/types': 9.3.4 + '@secretlint/types': 10.2.2 - '@secretlint/secretlint-rule-preset-recommend@9.3.4': {} + '@secretlint/secretlint-rule-preset-recommend@10.2.2': {} - '@secretlint/source-creator@9.3.4': + '@secretlint/source-creator@10.2.2': dependencies: - '@secretlint/types': 9.3.4 + '@secretlint/types': 10.2.2 istextorbinary: 9.5.0 - '@secretlint/types@9.3.4': {} + '@secretlint/types@10.2.2': {} '@sentry/cli@1.77.3(encoding@0.1.13)': dependencies: https-proxy-agent: 5.0.1 mkdirp: 0.5.6 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) progress: 2.0.3 proxy-from-env: 1.1.0 which: 2.0.2 @@ -25816,12 +29332,16 @@ snapshots: '@sinclair/typebox@0.27.8': {} + '@sinclair/typebox@0.34.41': {} + '@sindresorhus/is@5.6.0': {} - '@sindresorhus/is@7.0.2': {} + '@sindresorhus/is@7.1.1': {} '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@sinonjs/commons@1.8.6': dependencies: type-detect: 4.0.8 @@ -25834,10 +29354,14 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers@13.0.5': + dependencies: + '@sinonjs/commons': 3.0.1 + '@size-limit/esbuild@11.2.0(size-limit@11.2.0)': dependencies: - esbuild: 0.25.8 - nanoid: 5.1.5 + esbuild: 0.25.12 + nanoid: 5.1.6 size-limit: 11.2.0 '@size-limit/file@11.2.0(size-limit@11.2.0)': @@ -25850,255 +29374,254 @@ snapshots: '@size-limit/file': 11.2.0(size-limit@11.2.0) size-limit: 11.2.0 - '@smithy/abort-controller@4.0.5': + '@smithy/abort-controller@4.2.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/chunked-blob-reader-native@4.0.0': + '@smithy/chunked-blob-reader-native@4.2.1': dependencies: - '@smithy/util-base64': 4.0.0 + '@smithy/util-base64': 4.3.0 tslib: 2.8.1 - '@smithy/chunked-blob-reader@5.0.0': + '@smithy/chunked-blob-reader@5.2.0': dependencies: tslib: 2.8.1 - '@smithy/config-resolver@4.1.5': + '@smithy/config-resolver@4.4.3': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-config-provider': 4.2.0 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 tslib: 2.8.1 - '@smithy/core@3.8.0': - dependencies: - '@smithy/middleware-serde': 4.0.9 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-stream': 4.2.4 - '@smithy/util-utf8': 4.0.0 - '@types/uuid': 9.0.8 + '@smithy/core@3.18.6': + dependencies: + '@smithy/middleware-serde': 4.2.6 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 tslib: 2.8.1 - uuid: 9.0.1 - '@smithy/credential-provider-imds@4.0.7': + '@smithy/credential-provider-imds@4.2.5': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/property-provider': 4.0.5 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 tslib: 2.8.1 - '@smithy/eventstream-codec@4.0.5': + '@smithy/eventstream-codec@4.2.5': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.3.2 - '@smithy/util-hex-encoding': 4.0.0 + '@smithy/types': 4.9.0 + '@smithy/util-hex-encoding': 4.2.0 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@4.0.5': + '@smithy/eventstream-serde-browser@4.2.5': dependencies: - '@smithy/eventstream-serde-universal': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/eventstream-serde-universal': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@4.1.3': + '@smithy/eventstream-serde-config-resolver@4.3.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/eventstream-serde-node@4.0.5': + '@smithy/eventstream-serde-node@4.2.5': dependencies: - '@smithy/eventstream-serde-universal': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/eventstream-serde-universal': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@4.0.5': + '@smithy/eventstream-serde-universal@4.2.5': dependencies: - '@smithy/eventstream-codec': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/eventstream-codec': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.1.1': + '@smithy/fetch-http-handler@5.3.6': dependencies: - '@smithy/protocol-http': 5.1.3 - '@smithy/querystring-builder': 4.0.5 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 tslib: 2.8.1 - '@smithy/hash-blob-browser@4.0.5': + '@smithy/hash-blob-browser@4.2.6': dependencies: - '@smithy/chunked-blob-reader': 5.0.0 - '@smithy/chunked-blob-reader-native': 4.0.0 - '@smithy/types': 4.3.2 + '@smithy/chunked-blob-reader': 5.2.0 + '@smithy/chunked-blob-reader-native': 4.2.1 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/hash-node@4.0.5': + '@smithy/hash-node@4.2.5': dependencies: - '@smithy/types': 4.3.2 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/types': 4.9.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/hash-stream-node@4.0.5': + '@smithy/hash-stream-node@4.2.5': dependencies: - '@smithy/types': 4.3.2 - '@smithy/util-utf8': 4.0.0 + '@smithy/types': 4.9.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.0.5': + '@smithy/invalid-dependency@4.2.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 - '@smithy/is-array-buffer@4.0.0': + '@smithy/is-array-buffer@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/md5-js@4.0.5': + '@smithy/md5-js@4.2.5': dependencies: - '@smithy/types': 4.3.2 - '@smithy/util-utf8': 4.0.0 + '@smithy/types': 4.9.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/middleware-content-length@4.0.5': + '@smithy/middleware-content-length@4.2.5': dependencies: - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.1.18': + '@smithy/middleware-endpoint@4.3.13': dependencies: - '@smithy/core': 3.8.0 - '@smithy/middleware-serde': 4.0.9 - '@smithy/node-config-provider': 4.1.4 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-middleware': 4.0.5 + '@smithy/core': 3.18.6 + '@smithy/middleware-serde': 4.2.6 + '@smithy/node-config-provider': 4.3.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-middleware': 4.2.5 tslib: 2.8.1 - '@smithy/middleware-retry@4.1.19': + '@smithy/middleware-retry@4.4.13': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/protocol-http': 5.1.3 - '@smithy/service-error-classification': 4.0.7 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 - '@types/uuid': 9.0.8 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/service-error-classification': 4.2.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 + '@smithy/uuid': 1.1.0 tslib: 2.8.1 - uuid: 9.0.1 - '@smithy/middleware-serde@4.0.9': + '@smithy/middleware-serde@4.2.6': dependencies: - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.0.5': + '@smithy/middleware-stack@4.2.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.1.4': + '@smithy/node-config-provider@4.3.5': dependencies: - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.1.1': + '@smithy/node-http-handler@4.4.5': dependencies: - '@smithy/abort-controller': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/querystring-builder': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/abort-controller': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/property-provider@4.0.5': + '@smithy/property-provider@4.2.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/protocol-http@5.1.3': + '@smithy/protocol-http@5.3.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.0.5': + '@smithy/querystring-builder@4.2.5': dependencies: - '@smithy/types': 4.3.2 - '@smithy/util-uri-escape': 4.0.0 + '@smithy/types': 4.9.0 + '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.0.5': + '@smithy/querystring-parser@4.2.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.0.7': + '@smithy/service-error-classification@4.2.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 - '@smithy/shared-ini-file-loader@4.0.5': + '@smithy/shared-ini-file-loader@4.4.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/signature-v4@5.1.3': + '@smithy/signature-v4@5.3.5': dependencies: - '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-uri-escape': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/is-array-buffer': 4.2.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-uri-escape': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.4.10': + '@smithy/smithy-client@4.9.9': dependencies: - '@smithy/core': 3.8.0 - '@smithy/middleware-endpoint': 4.1.18 - '@smithy/middleware-stack': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-stream': 4.2.4 + '@smithy/core': 3.18.6 + '@smithy/middleware-endpoint': 4.3.13 + '@smithy/middleware-stack': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 tslib: 2.8.1 - '@smithy/types@4.3.2': + '@smithy/types@4.9.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.0.5': + '@smithy/url-parser@4.2.5': dependencies: - '@smithy/querystring-parser': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/querystring-parser': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-base64@4.0.0': + '@smithy/util-base64@4.3.0': dependencies: - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.0.0': + '@smithy/util-body-length-browser@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-body-length-node@4.0.0': + '@smithy/util-body-length-node@4.2.1': dependencies: tslib: 2.8.1 @@ -26107,66 +29630,65 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-buffer-from@4.0.0': + '@smithy/util-buffer-from@4.2.0': dependencies: - '@smithy/is-array-buffer': 4.0.0 + '@smithy/is-array-buffer': 4.2.0 tslib: 2.8.1 - '@smithy/util-config-provider@4.0.0': + '@smithy/util-config-provider@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.0.26': + '@smithy/util-defaults-mode-browser@4.3.12': dependencies: - '@smithy/property-provider': 4.0.5 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 - bowser: 2.11.0 + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.0.26': + '@smithy/util-defaults-mode-node@4.2.15': dependencies: - '@smithy/config-resolver': 4.1.5 - '@smithy/credential-provider-imds': 4.0.7 - '@smithy/node-config-provider': 4.1.4 - '@smithy/property-provider': 4.0.5 - '@smithy/smithy-client': 4.4.10 - '@smithy/types': 4.3.2 + '@smithy/config-resolver': 4.4.3 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.9 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.0.7': + '@smithy/util-endpoints@3.2.5': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-hex-encoding@4.0.0': + '@smithy/util-hex-encoding@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.0.5': + '@smithy/util-middleware@4.2.5': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-retry@4.0.7': + '@smithy/util-retry@4.2.5': dependencies: - '@smithy/service-error-classification': 4.0.7 - '@smithy/types': 4.3.2 + '@smithy/service-error-classification': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-stream@4.2.4': + '@smithy/util-stream@4.5.6': dependencies: - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/node-http-handler': 4.1.1 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/types': 4.9.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/util-uri-escape@4.0.0': + '@smithy/util-uri-escape@4.2.0': dependencies: tslib: 2.8.1 @@ -26175,21 +29697,32 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.0.0': + '@smithy/util-utf8@4.2.0': + dependencies: + '@smithy/util-buffer-from': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-waiter@4.2.5': dependencies: - '@smithy/util-buffer-from': 4.0.0 + '@smithy/abort-controller': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-waiter@4.0.7': + '@smithy/uuid@1.1.0': dependencies: - '@smithy/abort-controller': 4.0.5 - '@smithy/types': 4.3.2 tslib: 2.8.1 + '@so-ric/colorspace@1.1.6': + dependencies: + color: 5.0.3 + text-hex: 1.0.0 + '@standard-schema/spec@1.0.0': {} '@standard-schema/utils@0.3.0': {} + '@stitches/core@1.2.8': {} + '@storybook/addon-actions@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26199,7 +29732,7 @@ snapshots: '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -26215,6 +29748,31 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@storybook/addon-actions@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.6 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + dequal: 2.0.3 + lodash: 4.17.21 + polished: 4.3.1 + prop-types: 15.8.1 + react-inspector: 6.0.2(react@18.2.0) + telejson: 7.2.0 + ts-dedent: 2.2.0 + uuid: 9.0.1 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + '@storybook/addon-actions@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 7.4.6 @@ -26249,15 +29807,6 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) uuid: 9.0.1 - '@storybook/addon-actions@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - '@types/uuid': 9.0.8 - dequal: 2.0.3 - polished: 4.3.1 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - uuid: 9.0.1 - '@storybook/addon-backgrounds@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26267,7 +29816,7 @@ snapshots: '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 memoizerific: 1.11.3 regenerator-runtime: 0.13.11 @@ -26277,6 +29826,25 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@storybook/addon-backgrounds@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.6 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + memoizerific: 1.11.3 + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + '@storybook/addon-backgrounds@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 7.4.6 @@ -26303,25 +29871,18 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-backgrounds@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - - '@storybook/addon-controls@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/addon-controls@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/node-logger': 6.5.16 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 lodash: 4.17.21 ts-dedent: 2.2.0 optionalDependencies: @@ -26337,18 +29898,18 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/addon-controls@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/addon-controls@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/node-logger': 6.5.16 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 lodash: 4.17.21 ts-dedent: 2.2.0 optionalDependencies: @@ -26364,6 +29925,29 @@ snapshots: - vue-template-compiler - webpack-cli + '@storybook/addon-controls@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/blocks': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 7.4.6(encoding@0.1.13) + '@storybook/core-events': 7.4.6 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 7.4.6 + '@storybook/preview-api': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + lodash: 4.17.21 + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - encoding + - supports-color + '@storybook/addon-controls@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/blocks': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -26394,14 +29978,7 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - dequal: 2.0.3 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - - '@storybook/addon-docs@6.5.16(@babel/core@7.27.7)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.101.0)': + '@storybook/addon-docs@6.5.16(@babel/core@7.27.7)(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.103.0)': dependencies: '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) '@babel/preset-env': 7.27.2(@babel/core@7.27.7) @@ -26410,7 +29987,7 @@ snapshots: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26421,8 +29998,8 @@ snapshots: '@storybook/source-loader': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) - core-js: 3.45.0 + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -26446,7 +30023,7 @@ snapshots: - webpack - webpack-cli - '@storybook/addon-docs@6.5.16(@babel/core@7.27.7)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.101.0)': + '@storybook/addon-docs@6.5.16(@babel/core@7.27.7)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.103.0)': dependencies: '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) '@babel/preset-env': 7.27.2(@babel/core@7.27.7) @@ -26455,7 +30032,7 @@ snapshots: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26466,8 +30043,8 @@ snapshots: '@storybook/source-loader': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) - core-js: 3.45.0 + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -26491,6 +30068,35 @@ snapshots: - webpack - webpack-cli + '@storybook/addon-docs@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@jest/transform': 29.7.0 + '@mdx-js/react': 2.3.0(react@18.2.0) + '@storybook/blocks': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/csf-plugin': 7.4.6 + '@storybook/csf-tools': 7.4.6 + '@storybook/global': 5.0.0 + '@storybook/mdx2-csf': 1.1.0 + '@storybook/node-logger': 7.4.6 + '@storybook/postinstall': 7.4.6 + '@storybook/preview-api': 7.4.6 + '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + fs-extra: 11.3.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + remark-external-links: 8.0.0 + remark-slug: 6.1.0 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - encoding + - supports-color + '@storybook/addon-docs@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@jest/transform': 29.7.0 @@ -26508,7 +30114,7 @@ snapshots: '@storybook/react-dom-shim': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/types': 7.4.6 - fs-extra: 11.3.1 + fs-extra: 11.3.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) remark-external-links: 8.0.0 @@ -26522,7 +30128,7 @@ snapshots: '@storybook/addon-docs@8.6.14(@types/react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@18.2.0)(react@19.1.0) + '@mdx-js/react': 3.1.1(@types/react@18.2.0)(react@19.1.0) '@storybook/blocks': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3)) '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/react-dom-shim': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3)) @@ -26533,55 +30139,29 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-docs@8.6.14(@types/react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@mdx-js/react': 3.1.0(@types/react@18.2.0)(react@19.1.0) - '@storybook/blocks': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/csf-plugin': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@storybook/addon-docs@9.1.1(@types/react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@mdx-js/react': 3.1.0(@types/react@18.2.0)(react@19.1.0) - '@storybook/csf-plugin': 9.1.1(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/icons': 1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/react-dom-shim': 9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - - '@storybook/addon-essentials@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.101.0)': + '@storybook/addon-essentials@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.103.0)': dependencies: '@babel/core': 7.27.7 '@storybook/addon-actions': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-backgrounds': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-controls': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/addon-docs': 6.5.16(@babel/core@7.27.7)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.101.0) + '@storybook/addon-controls': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/addon-docs': 6.5.16(@babel/core@7.27.7)(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.103.0) '@storybook/addon-measure': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-outline': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-toolbars': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-viewport': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) transitivePeerDependencies: - '@storybook/mdx2-csf' - '@swc/core' @@ -26593,29 +30173,29 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/addon-essentials@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.101.0)': + '@storybook/addon-essentials@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.103.0)': dependencies: '@babel/core': 7.27.7 '@storybook/addon-actions': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-backgrounds': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/addon-controls': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/addon-docs': 6.5.16(@babel/core@7.27.7)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.101.0) + '@storybook/addon-controls': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/addon-docs': 6.5.16(@babel/core@7.27.7)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.103.0) '@storybook/addon-measure': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-outline': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-toolbars': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-viewport': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/node-logger': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@4.10.0) transitivePeerDependencies: - '@storybook/mdx2-csf' - '@swc/core' @@ -26627,6 +30207,30 @@ snapshots: - vue-template-compiler - webpack-cli + '@storybook/addon-essentials@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/addon-actions': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-backgrounds': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-controls': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-docs': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-highlight': 7.4.6 + '@storybook/addon-measure': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-outline': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-toolbars': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-viewport': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 7.4.6(encoding@0.1.13) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 7.4.6 + '@storybook/preview-api': 7.4.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - encoding + - supports-color + '@storybook/addon-essentials@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/addon-actions': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -26667,22 +30271,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.6.14(@types/react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/addon-actions': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-backgrounds': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-controls': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-docs': 8.6.14(@types/react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-highlight': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-measure': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-outline': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-toolbars': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/addon-viewport': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - '@storybook/addon-highlight@7.4.6': dependencies: '@storybook/core-events': 7.4.6 @@ -26694,11 +30282,6 @@ snapshots: '@storybook/global': 5.0.0 storybook: 8.6.14(prettier@3.5.3) - '@storybook/addon-highlight@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - '@storybook/addon-interactions@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 @@ -26716,7 +30299,7 @@ snapshots: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/qs': 6.14.0 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 prop-types: 15.8.1 qs: 6.14.0 @@ -26750,14 +30333,6 @@ snapshots: optionalDependencies: react: 18.2.0 - '@storybook/addon-links@8.6.14(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - optionalDependencies: - react: 18.2.0 - '@storybook/addon-measure@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26766,12 +30341,29 @@ snapshots: '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@storybook/addon-measure@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.6 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/types': 7.4.6 + tiny-invariant: 1.3.3 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + '@storybook/addon-measure@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 7.4.6 @@ -26795,12 +30387,6 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) tiny-invariant: 1.3.3 - '@storybook/addon-measure@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: storybook: 8.6.14(prettier@3.5.3) @@ -26813,7 +30399,7 @@ snapshots: '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 @@ -26821,6 +30407,23 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@storybook/addon-outline@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.6 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/types': 7.4.6 + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + '@storybook/addon-outline@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 7.4.6 @@ -26844,12 +30447,6 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-outline@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - '@storybook/addon-toolbars@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26857,12 +30454,26 @@ snapshots: '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 regenerator-runtime: 0.13.11 optionalDependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@storybook/addon-toolbars@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + '@storybook/addon-toolbars@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 7.4.6 @@ -26881,10 +30492,6 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.5.3) - '@storybook/addon-toolbars@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - '@storybook/addon-viewport@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26893,7 +30500,7 @@ snapshots: '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 memoizerific: 1.11.3 prop-types: 15.8.1 @@ -26902,6 +30509,24 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@storybook/addon-viewport@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.6 + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + memoizerific: 1.11.3 + prop-types: 15.8.1 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + '@storybook/addon-viewport@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 7.4.6 @@ -26925,11 +30550,6 @@ snapshots: memoizerific: 1.11.3 storybook: 8.6.14(prettier@3.5.3) - '@storybook/addon-viewport@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - memoizerific: 1.11.3 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - '@storybook/addons@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -26940,7 +30560,7 @@ snapshots: '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/webpack-env': 1.18.8 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -26956,12 +30576,20 @@ snapshots: '@storybook/router': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/webpack-env': 1.18.8 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 + '@storybook/addons@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/types': 7.4.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@storybook/addons@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/manager-api': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -26979,7 +30607,7 @@ snapshots: '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -27001,7 +30629,7 @@ snapshots: '@storybook/router': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/semver': 7.3.2 '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - core-js: 3.45.0 + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -27014,6 +30642,39 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 + '@storybook/blocks@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/channels': 7.4.6 + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-events': 7.4.6 + '@storybook/csf': 0.1.13 + '@storybook/docs-tools': 7.4.6(encoding@0.1.13) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/preview-api': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + '@types/lodash': 4.17.17 + color-convert: 2.0.1 + dequal: 2.0.3 + lodash: 4.17.21 + markdown-to-jsx: 7.7.17(react@18.2.0) + memoizerific: 1.11.3 + polished: 4.3.1 + react: 18.2.0 + react-colorful: 5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + telejson: 7.2.0 + tocbot: 4.36.4 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - encoding + - supports-color + '@storybook/blocks@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/channels': 7.4.6 @@ -27031,7 +30692,7 @@ snapshots: color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 - markdown-to-jsx: 7.7.13(react@19.1.0) + markdown-to-jsx: 7.7.17(react@19.1.0) memoizerific: 1.11.3 polished: 4.3.1 react: 19.1.0 @@ -27049,7 +30710,7 @@ snapshots: '@storybook/blocks@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@storybook/icons': 1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/icons': 1.6.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 optionalDependencies: @@ -27058,22 +30719,13 @@ snapshots: '@storybook/blocks@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: - '@storybook/icons': 1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@storybook/icons': 1.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 optionalDependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@storybook/blocks@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/icons': 1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 - optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - '@storybook/builder-manager@7.6.20(encoding@0.1.13)': dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 @@ -27082,27 +30734,29 @@ snapshots: '@storybook/node-logger': 7.6.20 '@types/ejs': 3.1.5 '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.25.8) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.25.12) browser-assert: 1.2.1 ejs: 3.1.10 - esbuild: 0.25.8 + esbuild: 0.25.12 esbuild-plugin-alias: 0.2.1 - express: 4.21.2 + express: 4.22.1 find-cache-dir: 3.3.2 - fs-extra: 11.3.1 + fs-extra: 11.3.2 process: 0.11.10 util: 0.12.5 transitivePeerDependencies: - encoding - supports-color - '@storybook/builder-vite@9.1.1(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/builder-vite@8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: - '@storybook/csf-plugin': 9.1.1(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + '@storybook/csf-plugin': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + browser-assert: 1.2.1 + storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 + vite: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2) - '@storybook/builder-webpack4@6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/builder-webpack4@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27112,7 +30766,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27124,33 +30778,33 @@ snapshots: '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + file-loader: 6.2.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) + html-webpack-plugin: 4.5.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.101.0) - raw-loader: 4.0.2(webpack@5.101.0) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + raw-loader: 4.0.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.101.0) - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + terser-webpack-plugin: 4.2.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + webpack-dev-middleware: 3.7.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + webpack-filter-warnings-plugin: 1.2.1(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: @@ -27164,7 +30818,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/builder-webpack4@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/builder-webpack4@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@babel/core': 7.27.7 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27174,7 +30828,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27186,33 +30840,33 @@ snapshots: '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) + html-webpack-plugin: 4.5.2(webpack@5.103.0) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.101.0) - raw-loader: 4.0.2(webpack@5.101.0) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.103.0) + raw-loader: 4.0.2(webpack@5.103.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.101.0) - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@5.103.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: @@ -27226,7 +30880,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/builder-webpack4@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/builder-webpack4@6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27236,7 +30890,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27248,33 +30902,33 @@ snapshots: '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) + html-webpack-plugin: 4.5.2(webpack@5.103.0) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.101.0) - raw-loader: 4.0.2(webpack@5.101.0) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.103.0) + raw-loader: 4.0.2(webpack@5.103.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.101.0) - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@4.10.0) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@5.103.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: @@ -27288,7 +30942,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/builder-webpack4@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/builder-webpack4@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27298,7 +30952,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27310,33 +30964,33 @@ snapshots: '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) + html-webpack-plugin: 4.5.2(webpack@5.103.0) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.101.0) - raw-loader: 4.0.2(webpack@5.101.0) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.103.0) + raw-loader: 4.0.2(webpack@5.103.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.101.0) - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@5.103.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: @@ -27350,7 +31004,69 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/builder-webpack4@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/builder-webpack4@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + dependencies: + '@babel/core': 7.27.7 + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.16 + '@storybook/channels': 6.5.16 + '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.16 + '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-events': 6.5.16 + '@storybook/node-logger': 6.5.16 + '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/semver': 7.3.2 + '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/node': 16.18.126 + '@types/webpack': 4.41.40 + autoprefixer: 9.8.8 + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) + case-sensitive-paths-webpack-plugin: 2.4.0 + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + file-loader: 6.2.0(webpack@5.103.0) + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 4.1.6 + glob: 7.2.3 + glob-promise: 3.4.0(glob@7.2.3) + global: 4.4.0 + html-webpack-plugin: 4.5.2(webpack@5.103.0) + pnp-webpack-plugin: 1.6.4(typescript@5.8.3) + postcss: 7.0.39 + postcss-flexbugs-fixes: 4.2.1 + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.103.0) + raw-loader: 4.0.2(webpack@5.103.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + stable: 0.1.8 + style-loader: 1.3.0(webpack@5.103.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) + ts-dedent: 2.2.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) + util-deprecate: 1.0.2 + webpack: 5.103.0(webpack-cli@4.10.0) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@5.103.0) + webpack-hot-middleware: 2.26.1 + webpack-virtual-modules: 0.2.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - eslint + - supports-color + - uglify-js + - vue-template-compiler + - webpack-cli + + '@storybook/builder-webpack4@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': dependencies: '@babel/core': 7.27.7 '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -27360,7 +31076,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -27372,33 +31088,33 @@ snapshots: '@types/node': 16.18.126 '@types/webpack': 4.41.40 autoprefixer: 9.8.8 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fork-ts-checker-webpack-plugin: 4.1.6 glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) global: 4.4.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) + html-webpack-plugin: 4.5.2(webpack@5.103.0) pnp-webpack-plugin: 1.6.4(typescript@4.9.5) postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.101.0) - raw-loader: 4.0.2(webpack@5.101.0) + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@5.103.0) + raw-loader: 4.0.2(webpack@5.103.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) stable: 0.1.8 - style-loader: 1.3.0(webpack@5.101.0) - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) - webpack-filter-warnings-plugin: 1.2.1(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@5.103.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.2.2 optionalDependencies: @@ -27412,7 +31128,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@babel/core': 7.27.7 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27422,7 +31138,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27431,27 +31147,27 @@ snapshots: '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.45.0 - css-loader: 5.2.7(webpack@5.101.0) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 5.2.7(webpack@5.103.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0) glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) - html-webpack-plugin: 5.6.3(webpack@5.101.0) + html-webpack-plugin: 5.6.5(webpack@5.103.0) path-browserify: 1.0.1 process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 2.0.0(webpack@5.101.0) - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + style-loader: 2.0.0(webpack@5.103.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@4.10.0) - webpack-dev-middleware: 4.3.0(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-dev-middleware: 4.3.0(webpack@5.103.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.4.6 optionalDependencies: @@ -27466,7 +31182,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@babel/core': 7.27.7 '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27476,7 +31192,7 @@ snapshots: '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/components': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/core-events': 6.5.16 '@storybook/node-logger': 6.5.16 '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -27485,27 +31201,27 @@ snapshots: '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.45.0 - css-loader: 5.2.7(webpack@5.101.0) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 5.2.7(webpack@5.103.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0) glob: 7.2.3 glob-promise: 3.4.0(glob@7.2.3) - html-webpack-plugin: 5.6.3(webpack@5.101.0) + html-webpack-plugin: 5.6.5(webpack@5.103.0) path-browserify: 1.0.1 process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) stable: 0.1.8 - style-loader: 2.0.0(webpack@5.101.0) - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + style-loader: 2.0.0(webpack@5.103.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-dev-middleware: 4.3.0(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@4.10.0) + webpack-dev-middleware: 4.3.0(webpack@5.103.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.4.6 optionalDependencies: @@ -27520,6 +31236,67 @@ snapshots: - vue-template-compiler - webpack-cli + '@storybook/builder-webpack5@7.4.6(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@5.1.4)': + dependencies: + '@babel/core': 7.27.7 + '@storybook/addons': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channels': 7.4.6 + '@storybook/client-api': 7.4.6 + '@storybook/client-logger': 7.4.6 + '@storybook/components': 7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-common': 7.4.6(encoding@0.1.13) + '@storybook/core-events': 7.4.6 + '@storybook/core-webpack': 7.4.6(encoding@0.1.13) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 7.4.6 + '@storybook/preview': 7.4.6 + '@storybook/preview-api': 7.4.6 + '@storybook/router': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 7.4.6 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@swc/core': 1.15.3(@swc/helpers@0.5.17) + '@types/node': 16.18.126 + '@types/semver': 7.7.1 + babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.103.0) + babel-plugin-named-exports-order: 0.0.2 + browser-assert: 1.2.1 + case-sensitive-paths-webpack-plugin: 2.4.0 + constants-browserify: 1.0.0 + css-loader: 6.11.0(webpack@5.103.0) + express: 4.22.1 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.103.0) + fs-extra: 11.3.2 + html-webpack-plugin: 5.6.5(webpack@5.103.0) + path-browserify: 1.0.1 + process: 0.11.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + semver: 7.7.3 + style-loader: 3.3.4(webpack@5.103.0) + swc-loader: 0.2.6(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) + ts-dedent: 2.2.0 + url: 0.11.4 + util: 0.12.5 + util-deprecate: 1.0.2 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-dev-middleware: 6.1.3(webpack@5.103.0) + webpack-hot-middleware: 2.26.1 + webpack-virtual-modules: 0.5.0 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@rspack/core' + - '@swc/helpers' + - '@types/react' + - '@types/react-dom' + - encoding + - esbuild + - supports-color + - uglify-js + - webpack-cli + '@storybook/builder-webpack5@7.4.6(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 @@ -27539,33 +31316,33 @@ snapshots: '@storybook/router': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/store': 7.4.6 '@storybook/theming': 7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@swc/core': 1.13.3(@swc/helpers@0.5.17) + '@swc/core': 1.15.3(@swc/helpers@0.5.17) '@types/node': 16.18.126 - '@types/semver': 7.7.0 - babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.101.0) + '@types/semver': 7.7.1 + babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.101.0) - express: 4.21.2 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.101.0) - fs-extra: 11.3.1 - html-webpack-plugin: 5.6.3(webpack@5.101.0) + css-loader: 6.11.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + express: 4.22.1 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + fs-extra: 11.3.2 + html-webpack-plugin: 5.6.5(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) path-browserify: 1.0.1 process: 0.11.10 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - semver: 7.7.2 - style-loader: 3.3.4(webpack@5.101.0) - swc-loader: 0.2.6(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0) - terser-webpack-plugin: 5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0) + semver: 7.7.3 + style-loader: 3.3.4(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + swc-loader: 0.2.6(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) - webpack-dev-middleware: 6.1.3(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + webpack-dev-middleware: 6.1.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 optionalDependencies: @@ -27581,31 +31358,31 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-webpack5@8.6.14(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/builder-webpack5@8.6.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.101.0) + css-loader: 6.11.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.101.0) - html-webpack-plugin: 5.6.3(webpack@5.101.0) - magic-string: 0.30.17 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) + html-webpack-plugin: 5.6.5(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) + magic-string: 0.30.21 path-browserify: 1.0.1 process: 0.11.10 - semver: 7.7.2 + semver: 7.7.3 storybook: 8.6.14(prettier@3.5.3) - style-loader: 3.3.4(webpack@5.101.0) - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + style-loader: 3.3.4(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 6.1.3(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) + webpack-dev-middleware: 6.1.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -27617,31 +31394,31 @@ snapshots: - uglify-js - webpack-cli - '@storybook/builder-webpack5@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': + '@storybook/builder-webpack5@8.6.14(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': dependencies: - '@storybook/core-webpack': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@types/semver': 7.7.0 + '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@types/semver': 7.7.1 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.101.0) + css-loader: 6.11.0(webpack@5.103.0) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.101.0) - html-webpack-plugin: 5.6.3(webpack@5.101.0) - magic-string: 0.30.17 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.103.0) + html-webpack-plugin: 5.6.5(webpack@5.103.0) + magic-string: 0.30.21 path-browserify: 1.0.1 process: 0.11.10 - semver: 7.7.2 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - style-loader: 3.3.4(webpack@5.101.0) - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + semver: 7.7.3 + storybook: 8.6.14(prettier@3.5.3) + style-loader: 3.3.4(webpack@5.103.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 6.1.3(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-middleware: 6.1.3(webpack@5.103.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -27658,7 +31435,7 @@ snapshots: '@storybook/channels': 6.5.16 '@storybook/client-logger': 6.5.16 '@storybook/core-events': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 qs: 6.14.0 telejson: 6.0.8 @@ -27667,13 +31444,13 @@ snapshots: dependencies: '@storybook/channels': 6.5.16 '@storybook/client-logger': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 telejson: 6.0.8 '@storybook/channels@6.5.16': dependencies: - core-js: 3.45.0 + core-js: 3.47.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -27699,7 +31476,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 7.6.20 '@storybook/core-common': 7.6.20(encoding@0.1.13) @@ -27709,18 +31486,18 @@ snapshots: '@storybook/node-logger': 7.6.20 '@storybook/telemetry': 7.6.20(encoding@0.1.13) '@storybook/types': 7.6.20 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 chalk: 4.1.2 commander: 6.2.1 cross-spawn: 7.0.6 detect-indent: 6.1.0 - envinfo: 7.14.0 + envinfo: 7.21.0 execa: 5.1.1 - express: 4.21.2 + express: 4.22.1 find-up: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 get-npm-tarball-url: 2.1.0 get-port: 5.1.1 giget: 1.2.5 @@ -27732,12 +31509,13 @@ snapshots: prompts: 2.4.2 puppeteer-core: 2.1.1 read-pkg-up: 7.0.1 - semver: 7.7.2 + semver: 7.7.3 strip-json-comments: 3.1.1 tempy: 1.0.1 ts-dedent: 2.2.0 util-deprecate: 1.0.2 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - encoding @@ -27745,25 +31523,35 @@ snapshots: - supports-color - utf-8-validate - '@storybook/cli@9.1.1(@babel/preset-env@7.27.2(@babel/core@7.27.7))(@testing-library/dom@10.4.1)(prettier@3.5.3)': + '@storybook/cli@8.6.14(@babel/preset-env@7.27.2(@babel/core@7.27.7))(prettier@3.5.3)': dependencies: - '@storybook/codemod': 9.1.1(@babel/preset-env@7.27.2(@babel/core@7.27.7))(@testing-library/dom@10.4.1) - '@types/semver': 7.7.0 + '@babel/core': 7.27.7 + '@babel/types': 7.28.5 + '@storybook/codemod': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@types/semver': 7.7.1 commander: 12.1.0 - create-storybook: 9.1.1 + create-storybook: 8.6.14 + cross-spawn: 7.0.6 + envinfo: 7.21.0 + fd-package-json: 1.2.0 + find-up: 5.0.0 giget: 1.2.5 + glob: 10.5.0 + globby: 14.1.0 jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + leven: 3.1.0 + p-limit: 6.2.0 + prompts: 2.4.2 + semver: 7.7.3 + storybook: 8.6.14(prettier@3.5.3) + tiny-invariant: 1.3.3 ts-dedent: 2.2.0 transitivePeerDependencies: - '@babel/preset-env' - - '@testing-library/dom' - bufferutil - - msw - prettier - supports-color - utf-8-validate - - vite '@storybook/client-api@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -27776,7 +31564,7 @@ snapshots: '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/qs': 6.14.0 '@types/webpack-env': 1.18.8 - core-js: 3.45.0 + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -27801,7 +31589,7 @@ snapshots: '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/qs': 6.14.0 '@types/webpack-env': 1.18.8 - core-js: 3.45.0 + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -27822,7 +31610,7 @@ snapshots: '@storybook/client-logger@6.5.16': dependencies: - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 '@storybook/client-logger@7.4.6': @@ -27837,7 +31625,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@storybook/csf': 0.1.13 '@storybook/csf-tools': 7.6.20 '@storybook/node-logger': 7.6.20 @@ -27852,31 +31640,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/codemod@9.1.1(@babel/preset-env@7.27.2(@babel/core@7.27.7))(@testing-library/dom@10.4.1)': + '@storybook/codemod@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: + '@babel/core': 7.27.7 + '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/types': 7.28.5 + '@storybook/core': 8.6.14(prettier@3.5.3)(storybook@8.6.14(prettier@3.5.3)) '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.6 - es-toolkit: 1.39.8 + es-toolkit: 1.42.0 globby: 14.1.0 jscodeshift: 0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)) prettier: 3.5.3 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + recast: 0.23.11 tiny-invariant: 1.3.3 transitivePeerDependencies: - - '@babel/preset-env' - - '@testing-library/dom' - bufferutil - - msw + - storybook - supports-color - utf-8-validate - - vite '@storybook/components@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 qs: 6.14.0 react: 18.2.0 @@ -27889,7 +31678,7 @@ snapshots: '@storybook/client-logger': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 qs: 6.14.0 react: 19.1.0 @@ -27897,10 +31686,28 @@ snapshots: regenerator-runtime: 0.13.11 util-deprecate: 1.0.2 + '@storybook/components@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 7.4.6 + '@storybook/csf': 0.1.13 + '@storybook/global': 5.0.0 + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-resize-observer: 9.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + '@storybook/components@7.4.6(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-toolbar': 1.1.10(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/client-logger': 7.4.6 '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 @@ -27919,11 +31726,35 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.5.3) - '@storybook/components@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)))': dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/channel-postmessage': 6.5.16 + '@storybook/channel-websocket': 6.5.16 + '@storybook/client-api': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.16 + '@storybook/core-events': 6.5.16 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/preview-web': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 + core-js: 3.47.0 + global: 4.4.0 + lodash: 4.17.21 + qs: 6.14.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + ts-dedent: 2.2.0 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + optionalDependencies: + typescript: 5.8.3 - '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0)': + '@storybook/core-client@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/channel-postmessage': 6.5.16 @@ -27937,7 +31768,7 @@ snapshots: '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 lodash: 4.17.21 qs: 6.14.0 @@ -27947,11 +31778,11 @@ snapshots: ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) optionalDependencies: typescript: 5.8.3 - '@storybook/core-client@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.101.0)': + '@storybook/core-client@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.103.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/channel-postmessage': 6.5.16 @@ -27965,7 +31796,7 @@ snapshots: '@storybook/ui': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 lodash: 4.17.21 qs: 6.14.0 @@ -27975,7 +31806,7 @@ snapshots: ts-dedent: 2.2.0 unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 4.9.5 @@ -27984,7 +31815,7 @@ snapshots: '@storybook/client-logger': 7.4.6 '@storybook/preview-api': 7.4.6 - '@storybook/core-common@6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/core-common@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) @@ -27997,9 +31828,9 @@ snapshots: '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) @@ -28007,20 +31838,20 @@ snapshots: '@babel/preset-env': 7.27.2(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.27.1(@babel/core@7.27.7) + '@babel/register': 7.28.3(@babel/core@7.27.7) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) chalk: 4.1.2 - core-js: 3.45.0 - express: 4.21.2 + core-js: 3.47.0 + express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -28037,7 +31868,7 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -28049,7 +31880,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-common@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/core-common@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) @@ -28062,9 +31893,9 @@ snapshots: '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) @@ -28072,20 +31903,20 @@ snapshots: '@babel/preset-env': 7.27.2(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.27.1(@babel/core@7.27.7) + '@babel/register': 7.28.3(@babel/core@7.27.7) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) chalk: 4.1.2 - core-js: 3.45.0 - express: 4.21.2 + core-js: 3.47.0 + express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -28102,7 +31933,7 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -28114,7 +31945,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-common@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/core-common@6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) @@ -28127,9 +31958,9 @@ snapshots: '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) @@ -28137,20 +31968,20 @@ snapshots: '@babel/preset-env': 7.27.2(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.27.1(@babel/core@7.27.7) + '@babel/register': 7.28.3(@babel/core@7.27.7) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) chalk: 4.1.2 - core-js: 3.45.0 - express: 4.21.2 + core-js: 3.47.0 + express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -28167,7 +31998,7 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -28179,7 +32010,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-common@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/core-common@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) @@ -28192,9 +32023,9 @@ snapshots: '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) @@ -28202,20 +32033,20 @@ snapshots: '@babel/preset-env': 7.27.2(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.27.1(@babel/core@7.27.7) + '@babel/register': 7.28.3(@babel/core@7.27.7) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) chalk: 4.1.2 - core-js: 3.45.0 - express: 4.21.2 + core-js: 3.47.0 + express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -28232,7 +32063,7 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -28244,7 +32075,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-common@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/core-common@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) @@ -28257,9 +32088,9 @@ snapshots: '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-classes': 7.28.0(@babel/core@7.27.7) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) @@ -28267,20 +32098,85 @@ snapshots: '@babel/preset-env': 7.27.2(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.27.1(@babel/core@7.27.7) + '@babel/register': 7.28.3(@babel/core@7.27.7) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@types/node': 16.18.126 '@types/pretty-hrtime': 1.0.3 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) chalk: 4.1.2 - core-js: 3.45.0 - express: 4.21.2 + core-js: 3.47.0 + express: 4.22.1 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@4.9.5)(webpack@5.101.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0) + fs-extra: 9.1.0 + glob: 7.2.3 + handlebars: 4.7.8 + interpret: 2.2.0 + json5: 2.2.3 + lazy-universal-dotenv: 3.0.1 + picomatch: 2.3.1 + pkg-dir: 5.0.0 + pretty-hrtime: 1.0.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + resolve-from: 5.0.0 + slash: 3.0.0 + telejson: 6.0.8 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + webpack: 5.103.0(webpack-cli@4.10.0) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - eslint + - supports-color + - uglify-js + - vue-template-compiler + - webpack-cli + + '@storybook/core-common@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + dependencies: + '@babel/core': 7.27.7 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.27.7) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.27.7) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.27.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.7) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.27.7) + '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.27.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.27.7) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.7) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.7) + '@babel/preset-env': 7.27.2(@babel/core@7.27.7) + '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) + '@babel/register': 7.28.3(@babel/core@7.27.7) + '@storybook/node-logger': 6.5.16 + '@storybook/semver': 7.3.2 + '@types/node': 16.18.126 + '@types/pretty-hrtime': 1.0.3 + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) + babel-plugin-macros: 3.1.0 + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.27.7) + chalk: 4.1.2 + core-js: 3.47.0 + express: 4.22.1 + file-system-cache: 1.1.0 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@4.9.5)(webpack@5.103.0) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -28297,7 +32193,7 @@ snapshots: telejson: 6.0.8 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: @@ -28319,16 +32215,16 @@ snapshots: '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 - esbuild: 0.25.8 - esbuild-register: 3.6.0(esbuild@0.25.8) + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 - fs-extra: 11.3.1 - glob: 10.4.5 + fs-extra: 11.3.2 + glob: 10.5.0 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 @@ -28344,20 +32240,20 @@ snapshots: '@storybook/node-logger': 7.6.20 '@storybook/types': 7.6.20 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.121 + '@types/node': 18.19.130 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 - esbuild: 0.25.8 - esbuild-register: 3.6.0(esbuild@0.25.8) + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) file-system-cache: 2.3.0 find-cache-dir: 3.3.2 find-up: 5.0.0 - fs-extra: 11.3.1 - glob: 10.4.5 + fs-extra: 11.3.2 + glob: 10.5.0 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 @@ -28369,7 +32265,7 @@ snapshots: '@storybook/core-events@6.5.16': dependencies: - core-js: 3.45.0 + core-js: 3.47.0 '@storybook/core-events@7.4.6': dependencies: @@ -28379,20 +32275,20 @@ snapshots: dependencies: ts-dedent: 2.2.0 - '@storybook/core-server@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/core-server@6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack4': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack4': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/telemetry': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -28403,16 +32299,16 @@ snapshots: cli-table3: 0.6.5 commander: 6.2.1 compression: 1.8.1 - core-js: 3.45.0 + core-js: 3.47.0 cpy: 8.1.2 detect-port: 1.6.1 - express: 4.21.2 + express: 4.22.1 fs-extra: 9.1.0 global: 4.4.0 globby: 11.1.0 ip: 2.0.1 lodash: 4.17.21 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -28425,12 +32321,12 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.4.4 - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) ws: 8.18.3 x-default-browser: 0.4.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/manager-webpack5': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -28445,20 +32341,20 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-server@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/core-server@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/builder-webpack4': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -28469,16 +32365,16 @@ snapshots: cli-table3: 0.6.5 commander: 6.2.1 compression: 1.8.1 - core-js: 3.45.0 + core-js: 3.47.0 cpy: 8.1.2 detect-port: 1.6.1 - express: 4.21.2 + express: 4.22.1 fs-extra: 9.1.0 global: 4.4.0 globby: 11.1.0 ip: 2.0.1 lodash: 4.17.21 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -28491,12 +32387,12 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.4.4 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@4.10.0) ws: 8.18.3 x-default-browser: 0.4.0 optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -28511,20 +32407,20 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/core-server@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/builder-webpack4': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/manager-webpack4': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/telemetry': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -28535,16 +32431,16 @@ snapshots: cli-table3: 0.6.5 commander: 6.2.1 compression: 1.8.1 - core-js: 3.45.0 + core-js: 3.47.0 cpy: 8.1.2 detect-port: 1.6.1 - express: 4.21.2 + express: 4.22.1 fs-extra: 9.1.0 global: 4.4.0 globby: 11.1.0 ip: 2.0.1 lodash: 4.17.21 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -28557,7 +32453,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.4.4 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) ws: 8.18.3 x-default-browser: 0.4.0 optionalDependencies: @@ -28575,20 +32471,20 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/builder-webpack4': 6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -28599,16 +32495,80 @@ snapshots: cli-table3: 0.6.5 commander: 6.2.1 compression: 1.8.1 - core-js: 3.45.0 + core-js: 3.47.0 cpy: 8.1.2 detect-port: 1.6.1 - express: 4.21.2 + express: 4.22.1 fs-extra: 9.1.0 global: 4.4.0 globby: 11.1.0 ip: 2.0.1 lodash: 4.17.21 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) + open: 8.4.2 + pretty-hrtime: 1.0.3 + prompts: 2.4.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + regenerator-runtime: 0.13.11 + serve-favicon: 2.5.1 + slash: 3.0.0 + telejson: 6.0.8 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + watchpack: 2.4.4 + webpack: 5.103.0(webpack-cli@5.1.4) + ws: 8.18.3 + x-default-browser: 0.4.0 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@storybook/mdx2-csf' + - '@swc/core' + - bufferutil + - encoding + - esbuild + - eslint + - supports-color + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + + '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@storybook/builder-webpack4': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-events': 6.5.16 + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/csf-tools': 6.5.16 + '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/node-logger': 6.5.16 + '@storybook/semver': 7.3.2 + '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@types/node': 16.18.126 + '@types/node-fetch': 2.6.13 + '@types/pretty-hrtime': 1.0.3 + '@types/webpack': 4.41.40 + better-opn: 2.1.1 + boxen: 5.1.2 + chalk: 4.1.2 + cli-table3: 0.6.5 + commander: 6.2.1 + compression: 1.8.1 + core-js: 3.47.0 + cpy: 8.1.2 + detect-port: 1.6.1 + express: 4.22.1 + fs-extra: 9.1.0 + global: 4.4.0 + globby: 11.1.0 + ip: 2.0.1 + lodash: 4.17.21 + node-fetch: 2.6.13(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -28621,7 +32581,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.4.4 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) ws: 8.18.3 x-default-browser: 0.4.0 optionalDependencies: @@ -28639,20 +32599,20 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/core-server@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) - '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/builder-webpack4': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/csf-tools': 6.5.16 - '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/manager-webpack4': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) '@storybook/node-logger': 6.5.16 '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/telemetry': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) '@types/node': 16.18.126 '@types/node-fetch': 2.6.13 '@types/pretty-hrtime': 1.0.3 @@ -28663,16 +32623,16 @@ snapshots: cli-table3: 0.6.5 commander: 6.2.1 compression: 1.8.1 - core-js: 3.45.0 + core-js: 3.47.0 cpy: 8.1.2 detect-port: 1.6.1 - express: 4.21.2 + express: 4.22.1 fs-extra: 9.1.0 global: 4.4.0 globby: 11.1.0 ip: 2.0.1 lodash: 4.17.21 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 @@ -28685,7 +32645,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.4.4 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) ws: 8.18.3 x-default-browser: 0.4.0 optionalDependencies: @@ -28721,23 +32681,23 @@ snapshots: '@storybook/telemetry': 7.6.20(encoding@0.1.13) '@storybook/types': 7.6.20 '@types/detect-port': 1.3.5 - '@types/node': 18.19.121 + '@types/node': 18.19.130 '@types/pretty-hrtime': 1.0.3 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 better-opn: 3.0.2 chalk: 4.1.2 cli-table3: 0.6.5 compression: 1.8.1 detect-port: 1.6.1 - express: 4.21.2 - fs-extra: 11.3.1 + express: 4.22.1 + fs-extra: 11.3.2 globby: 11.1.0 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 prompts: 2.4.2 read-pkg-up: 7.0.1 - semver: 7.7.2 + semver: 7.7.3 telejson: 7.2.0 tiny-invariant: 1.3.3 ts-dedent: 2.2.0 @@ -28767,21 +32727,40 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/core-webpack@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/core@6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.103.0)': dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - ts-dedent: 2.2.0 + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-server': 6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + optionalDependencies: + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/manager-webpack5': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + typescript: 5.8.3 + transitivePeerDependencies: + - '@storybook/mdx2-csf' + - '@swc/core' + - bufferutil + - encoding + - esbuild + - eslint + - supports-color + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli - '@storybook/core@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.101.0)': + '@storybook/core@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.103.0)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-server': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-server': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(webpack-cli@4.10.0) optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -28796,16 +32775,14 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core@6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.101.0)': + '@storybook/core@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)))': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-server': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + '@storybook/core-server': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) optionalDependencies: - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -28820,13 +32797,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0)': + '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -28842,13 +32819,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0)': + '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -28864,13 +32841,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.101.0)': + '@storybook/core@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.103.0)': dependencies: - '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.101.0) - '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.103.0) + '@storybook/core-server': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: @@ -28891,12 +32868,12 @@ snapshots: '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) better-opn: 3.0.2 browser-assert: 1.2.1 - esbuild: 0.25.8 - esbuild-register: 3.6.0(esbuild@0.25.8) - jsdoc-type-pratt-parser: 4.1.0 + esbuild: 0.25.12 + esbuild-register: 3.6.0(esbuild@0.25.12) + jsdoc-type-pratt-parser: 4.8.0 process: 0.11.10 recast: 0.23.11 - semver: 7.7.2 + semver: 7.7.3 util: 0.12.5 ws: 8.18.3 optionalDependencies: @@ -28919,28 +32896,18 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) unplugin: 1.16.1 - '@storybook/csf-plugin@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - unplugin: 1.16.1 - - '@storybook/csf-plugin@9.1.1(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - unplugin: 1.16.1 - '@storybook/csf-tools@6.5.16': dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/mdx1-csf': 0.0.1(@babel/core@7.27.7) - core-js: 3.45.0 + core-js: 3.47.0 fs-extra: 9.1.0 global: 4.4.0 regenerator-runtime: 0.13.11 @@ -28950,13 +32917,13 @@ snapshots: '@storybook/csf-tools@7.4.6': dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@storybook/csf': 0.1.13 '@storybook/types': 7.4.6 - fs-extra: 11.3.1 + fs-extra: 11.3.2 recast: 0.23.11 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -28964,18 +32931,22 @@ snapshots: '@storybook/csf-tools@7.6.20': dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@storybook/csf': 0.1.13 '@storybook/types': 7.6.20 - fs-extra: 11.3.1 + fs-extra: 11.3.2 recast: 0.23.11 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color + '@storybook/csf@0.0.1': + dependencies: + lodash: 4.17.21 + '@storybook/csf@0.0.2--canary.4566f4d.1': dependencies: lodash: 4.17.21 @@ -28991,7 +32962,7 @@ snapshots: '@babel/core': 7.27.7 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 doctrine: 3.0.0 lodash: 4.17.21 regenerator-runtime: 0.13.11 @@ -29005,7 +32976,7 @@ snapshots: '@babel/core': 7.27.7 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - core-js: 3.45.0 + core-js: 3.47.0 doctrine: 3.0.0 lodash: 4.17.21 regenerator-runtime: 0.13.11 @@ -29028,12 +32999,12 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.4.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@storybook/icons@1.6.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/icons@1.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/icons@1.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -29044,12 +33015,25 @@ snapshots: '@vitest/utils': 2.1.9 storybook: 8.6.14(prettier@3.5.3) - '@storybook/instrumenter@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/manager-api@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: + '@storybook/channels': 7.4.6 + '@storybook/client-logger': 7.4.6 + '@storybook/core-events': 7.4.6 + '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 - '@vitest/utils': 2.1.9 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - optional: true + '@storybook/router': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + semver: 7.7.3 + store2: 2.14.4 + telejson: 7.2.0 + ts-dedent: 2.2.0 '@storybook/manager-api@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: @@ -29066,7 +33050,7 @@ snapshots: memoizerific: 1.11.3 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - semver: 7.7.2 + semver: 7.7.3 store2: 2.14.4 telejson: 7.2.0 ts-dedent: 2.2.0 @@ -29075,48 +33059,95 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.5.3) - '@storybook/manager-api@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/manager-webpack4@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + '@babel/core': 7.27.7 + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) + '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/node-logger': 6.5.16 + '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/node': 16.18.126 + '@types/webpack': 4.41.40 + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + case-sensitive-paths-webpack-plugin: 2.4.0 + chalk: 4.1.2 + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + express: 4.22.1 + file-loader: 6.2.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + find-up: 5.0.0 + fs-extra: 9.1.0 + html-webpack-plugin: 4.5.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + node-fetch: 2.6.13(encoding@0.1.13) + pnp-webpack-plugin: 1.6.4(typescript@5.8.3) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.11 + resolve-from: 5.0.0 + style-loader: 1.3.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + telejson: 6.0.8 + terser-webpack-plugin: 4.2.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + ts-dedent: 2.2.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + util-deprecate: 1.0.2 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + webpack-dev-middleware: 3.7.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + webpack-virtual-modules: 0.2.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - '@swc/core' + - encoding + - esbuild + - eslint + - supports-color + - uglify-js + - vue-template-compiler + - webpack-cli - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/manager-webpack4@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - express: 4.21.2 - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + express: 4.22.1 + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) - node-fetch: 2.7.0(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@5.103.0) + node-fetch: 2.6.13(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 @@ -29130,44 +33161,44 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - express: 4.21.2 - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + express: 4.22.1 + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) - node-fetch: 2.7.0(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@5.103.0) + node-fetch: 2.6.13(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 @@ -29181,44 +33212,44 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - express: 4.21.2 - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + express: 4.22.1 + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) - node-fetch: 2.7.0(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@5.103.0) + node-fetch: 2.6.13(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@4.10.0) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 @@ -29232,44 +33263,44 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - express: 4.21.2 - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + express: 4.22.1 + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) - node-fetch: 2.7.0(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@5.103.0) + node-fetch: 2.6.13(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@4.10.0) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 5.8.3 @@ -29283,44 +33314,44 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/manager-webpack4@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/core-client': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/ui': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/node': 16.18.126 '@types/webpack': 4.41.40 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.45.0 - css-loader: 3.6.0(webpack@5.101.0) - express: 4.21.2 - file-loader: 6.2.0(webpack@5.101.0) + core-js: 3.47.0 + css-loader: 3.6.0(webpack@5.103.0) + express: 4.22.1 + file-loader: 6.2.0(webpack@5.103.0) find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 4.5.2(webpack@5.101.0) - node-fetch: 2.7.0(encoding@0.1.13) + html-webpack-plugin: 4.5.2(webpack@5.103.0) + node-fetch: 2.6.13(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@4.9.5) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 1.3.0(webpack@5.101.0) + style-loader: 1.3.0(webpack@5.103.0) telejson: 6.0.8 - terser-webpack-plugin: 4.2.3(webpack@5.101.0) + terser-webpack-plugin: 4.2.3(webpack@5.103.0) ts-dedent: 2.2.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0) util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-middleware: 3.7.3(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-middleware: 3.7.3(webpack@5.103.0) webpack-virtual-modules: 0.2.2 optionalDependencies: typescript: 4.9.5 @@ -29334,41 +33365,41 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/manager-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.45.0 - css-loader: 5.2.7(webpack@5.101.0) - express: 4.21.2 + core-js: 3.47.0 + css-loader: 5.2.7(webpack@5.103.0) + express: 4.22.1 find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 5.6.3(webpack@5.101.0) - node-fetch: 2.7.0(encoding@0.1.13) + html-webpack-plugin: 5.6.5(webpack@5.103.0) + node-fetch: 2.6.13(encoding@0.1.13) process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 2.0.0(webpack@5.101.0) + style-loader: 2.0.0(webpack@5.103.0) telejson: 6.0.8 - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@4.10.0) - webpack-dev-middleware: 4.3.0(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-dev-middleware: 4.3.0(webpack@5.103.0) webpack-virtual-modules: 0.4.6 optionalDependencies: typescript: 5.8.3 @@ -29383,41 +33414,41 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-client': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/node-logger': 6.5.16 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/ui': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/node': 16.18.126 - babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 8.4.1(@babel/core@7.27.7)(webpack@5.103.0) case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.45.0 - css-loader: 5.2.7(webpack@5.101.0) - express: 4.21.2 + core-js: 3.47.0 + css-loader: 5.2.7(webpack@5.103.0) + express: 4.22.1 find-up: 5.0.0 fs-extra: 9.1.0 - html-webpack-plugin: 5.6.3(webpack@5.101.0) - node-fetch: 2.7.0(encoding@0.1.13) + html-webpack-plugin: 5.6.5(webpack@5.103.0) + node-fetch: 2.6.13(encoding@0.1.13) process: 0.11.10 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) read-pkg-up: 7.0.1 regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - style-loader: 2.0.0(webpack@5.101.0) + style-loader: 2.0.0(webpack@5.103.0) telejson: 6.0.8 - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-dev-middleware: 4.3.0(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@4.10.0) + webpack-dev-middleware: 4.3.0(webpack@5.103.0) webpack-virtual-modules: 0.4.6 optionalDependencies: typescript: 5.8.3 @@ -29436,10 +33467,10 @@ snapshots: '@storybook/mdx1-csf@0.0.1(@babel/core@7.27.7)': dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@mdx-js/mdx': 1.6.22 '@types/lodash': 4.17.17 js-string-escape: 1.0.1 @@ -29457,7 +33488,7 @@ snapshots: dependencies: '@types/npmlog': 4.1.6 chalk: 4.1.2 - core-js: 3.45.0 + core-js: 3.47.0 npmlog: 5.0.1 pretty-hrtime: 1.0.3 @@ -29467,30 +33498,67 @@ snapshots: '@storybook/postinstall@6.5.16': dependencies: - core-js: 3.45.0 + core-js: 3.47.0 '@storybook/postinstall@7.4.6': {} - '@storybook/preset-react-webpack@7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)': + '@storybook/preset-react-webpack@7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)': + dependencies: + '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) + '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@5.1.4))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0) + '@storybook/core-webpack': 7.4.6(encoding@0.1.13) + '@storybook/docs-tools': 7.4.6(encoding@0.1.13) + '@storybook/node-logger': 7.4.6 + '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.103.0) + '@types/node': 16.18.126 + '@types/semver': 7.7.1 + babel-plugin-add-react-displayname: 0.0.5 + babel-plugin-react-docgen: 4.2.1 + fs-extra: 11.3.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-refresh: 0.11.0 + semver: 7.7.3 + webpack: 5.103.0(webpack-cli@5.1.4) + optionalDependencies: + '@babel/core': 7.27.7 + typescript: 5.8.3 + transitivePeerDependencies: + - '@swc/core' + - '@types/webpack' + - encoding + - esbuild + - sockjs-client + - supports-color + - type-fest + - uglify-js + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + + '@storybook/preset-react-webpack@7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)(webpack@5.103.0) '@storybook/core-webpack': 7.4.6(encoding@0.1.13) '@storybook/docs-tools': 7.4.6(encoding@0.1.13) '@storybook/node-logger': 7.4.6 '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.101.0) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.103.0) '@types/node': 16.18.126 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - fs-extra: 11.3.1 + fs-extra: 11.3.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-refresh: 0.11.0 - semver: 7.7.2 - webpack: 5.101.0(webpack-cli@5.1.4) + semver: 7.7.3 + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: '@babel/core': 7.27.7 typescript: 5.8.3 @@ -29508,22 +33576,22 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.101.0) - '@types/semver': 7.7.0 + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) + '@types/semver': 7.7.1 find-up: 5.0.0 - magic-string: 0.30.17 + magic-string: 0.30.21 react: 18.2.0 react-docgen: 7.1.1 react-dom: 18.2.0(react@18.2.0) - resolve: 1.22.10 - semver: 7.7.2 + resolve: 1.22.11 + semver: 7.7.3 storybook: 8.6.14(prettier@3.5.3) tsconfig-paths: 4.2.0 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -29534,22 +33602,22 @@ snapshots: - uglify-js - webpack-cli - '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': + '@storybook/preset-react-webpack@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': dependencies: - '@storybook/core-webpack': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.101.0) - '@types/semver': 7.7.0 + '@storybook/core-webpack': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.103.0) + '@types/semver': 7.7.1 find-up: 5.0.0 - magic-string: 0.30.17 + magic-string: 0.30.21 react: 18.2.0 react-docgen: 7.1.1 react-dom: 18.2.0(react@18.2.0) - resolve: 1.22.10 - semver: 7.7.2 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + resolve: 1.22.11 + semver: 7.7.3 + storybook: 8.6.14(prettier@3.5.3) tsconfig-paths: 4.2.0 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -29598,10 +33666,6 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.5.3) - '@storybook/preview-api@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - '@storybook/preview-web@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -29611,7 +33675,7 @@ snapshots: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) ansi-to-html: 0.6.15 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 lodash: 4.17.21 qs: 6.14.0 @@ -29632,7 +33696,7 @@ snapshots: '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) ansi-to-html: 0.6.15 - core-js: 3.45.0 + core-js: 3.47.0 global: 4.4.0 lodash: 4.17.21 qs: 6.14.0 @@ -29646,9 +33710,9 @@ snapshots: '@storybook/preview@7.4.6': {} - '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.5)(webpack@5.101.0)': + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.5)(webpack@5.103.0)': dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -29656,13 +33720,13 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@4.9.5) tslib: 2.8.1 typescript: 4.9.5 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.101.0)': + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)))': dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -29670,13 +33734,13 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.101.0)': + '@storybook/react-docgen-typescript-plugin@1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.103.0)': dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -29684,68 +33748,115 @@ snapshots: react-docgen-typescript: 2.4.0(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12))': dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + debug: 4.4.3(supports-color@8.1.1) + endent: 2.1.0 + find-cache-dir: 3.3.2 + flat-cache: 3.2.0 + micromatch: 4.0.8 + react-docgen-typescript: 2.4.0(typescript@5.8.3) + tslib: 2.8.1 + typescript: 5.8.3 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) + transitivePeerDependencies: + - supports-color - '@storybook/react-dom-shim@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.3)(webpack@5.103.0)': dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - storybook: 8.6.14(prettier@3.5.3) + debug: 4.4.3(supports-color@8.1.1) + endent: 2.1.0 + find-cache-dir: 3.3.2 + flat-cache: 3.2.0 + micromatch: 4.0.8 + react-docgen-typescript: 2.4.0(typescript@5.8.3) + tslib: 2.8.1 + typescript: 5.8.3 + webpack: 5.103.0(webpack-cli@5.1.4) + transitivePeerDependencies: + - supports-color - '@storybook/react-dom-shim@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/react-dom-shim@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - '@storybook/react-dom-shim@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))': + '@storybook/react-dom-shim@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - storybook: 8.6.14(prettier@3.5.3) - '@storybook/react-dom-shim@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/react-dom-shim@8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + storybook: 8.6.14(prettier@3.5.3) - '@storybook/react-dom-shim@9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': + '@storybook/react-dom-shim@8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))': dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) - '@storybook/react-vite@9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.46.2)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.53.3)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3) - '@rollup/pluginutils': 5.2.0(rollup@4.46.2) - '@storybook/builder-vite': 9.1.1(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/react': 9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3) - find-up: 7.0.0 - magic-string: 0.30.17 + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)) + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) + '@storybook/builder-vite': 8.6.14(storybook@8.6.14(prettier@3.5.3))(vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2)) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + find-up: 5.0.0 + magic-string: 0.30.21 react: 19.1.0 - react-docgen: 8.0.0 + react-docgen: 7.1.1 react-dom: 19.1.0(react@19.1.0) - resolve: 1.22.10 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + resolve: 1.22.11 + storybook: 8.6.14(prettier@3.5.3) tsconfig-paths: 4.2.0 + vite: 6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2) + optionalDependencies: + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) transitivePeerDependencies: - rollup - supports-color - typescript - '@storybook/react-webpack5@7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)': + '@storybook/react-webpack5@7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)': + dependencies: + '@storybook/builder-webpack5': 7.4.6(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@5.1.4) + '@storybook/preset-react-webpack': 7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5(webpack-cli@5.1.4))(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1) + '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@types/node': 16.18.126 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@babel/core': 7.27.7 + typescript: 5.8.3 + transitivePeerDependencies: + - '@rspack/core' + - '@swc/core' + - '@swc/helpers' + - '@types/react' + - '@types/react-dom' + - '@types/webpack' + - encoding + - esbuild + - sockjs-client + - supports-color + - type-fest + - uglify-js + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + + '@storybook/react-webpack5@7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': dependencies: '@storybook/builder-webpack5': 7.4.6(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@storybook/preset-react-webpack': 7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + '@storybook/preset-react-webpack': 7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@types/node': 16.18.126 react: 19.1.0 @@ -29771,10 +33882,10 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: - '@storybook/builder-webpack5': 8.6.14(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) - '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + '@storybook/builder-webpack5': 8.6.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) + '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -29790,14 +33901,14 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': + '@storybook/react-webpack5@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4)': dependencies: - '@storybook/builder-webpack5': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) - '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) - '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3) + '@storybook/builder-webpack5': 8.6.14(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) + '@storybook/preset-react-webpack': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(webpack-cli@5.1.4) + '@storybook/react': 8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -29809,19 +33920,19 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core': 6.5.16(@storybook/builder-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.101.0) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.103.0) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -29832,7 +33943,7 @@ snapshots: acorn-walk: 7.2.0 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - core-js: 3.45.0 + core-js: 3.47.0 escodegen: 2.1.0 fs-extra: 9.1.0 global: 4.4.0 @@ -29848,11 +33959,11 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) optionalDependencies: '@babel/core': 7.27.7 - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) - '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/builder-webpack5': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/manager-webpack5': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -29873,19 +33984,19 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@types/webpack@5.28.5(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.16(@babel/core@7.27.7)(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@types/webpack@5.28.5(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(webpack-cli@4.10.0))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.103.0) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1))(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core': 6.5.16(@storybook/builder-webpack5@6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(@storybook/manager-webpack5@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.101.0) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.103.0) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -29896,7 +34007,7 @@ snapshots: acorn-walk: 7.2.0 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - core-js: 3.45.0 + core-js: 3.47.0 escodegen: 2.1.0 fs-extra: 9.1.0 global: 4.4.0 @@ -29912,11 +34023,11 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@4.10.0) optionalDependencies: '@babel/core': 7.27.7 - '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) - '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/builder-webpack5': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/manager-webpack5': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) typescript: 5.8.3 transitivePeerDependencies: - '@storybook/mdx2-csf' @@ -29937,19 +34048,19 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.16(@babel/core@7.27.7)(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17)))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17)))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack-hot-middleware@2.26.1)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.101.0) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -29960,7 +34071,7 @@ snapshots: acorn-walk: 7.2.0 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - core-js: 3.45.0 + core-js: 3.47.0 escodegen: 2.1.0 fs-extra: 9.1.0 global: 4.4.0 @@ -29976,7 +34087,7 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) optionalDependencies: '@babel/core': 7.27.7 typescript: 5.8.3 @@ -29999,19 +34110,19 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)(webpack@5.103.0) '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.101.0) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.103.0) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/estree': 0.0.51 @@ -30022,7 +34133,7 @@ snapshots: acorn-walk: 7.2.0 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - core-js: 3.45.0 + core-js: 3.47.0 escodegen: 2.1.0 fs-extra: 9.1.0 global: 4.4.0 @@ -30038,7 +34149,7 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: '@babel/core': 7.27.7 typescript: 5.8.3 @@ -30061,19 +34172,81 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.5)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)': + '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)(webpack@5.103.0) + '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/client-logger': 6.5.16 + '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/csf': 0.0.2--canary.4566f4d.1 + '@storybook/docs-tools': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/node-logger': 6.5.16 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@5.8.3)(webpack@5.103.0) + '@storybook/semver': 7.3.2 + '@storybook/store': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/estree': 0.0.51 + '@types/node': 16.18.126 + '@types/webpack-env': 1.18.8 + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-walk: 7.2.0 + babel-plugin-add-react-displayname: 0.0.5 + babel-plugin-react-docgen: 4.2.1 + core-js: 3.47.0 + escodegen: 2.1.0 + fs-extra: 9.1.0 + global: 4.4.0 + html-tags: 3.3.1 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-element-to-jsx-string: 14.3.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-refresh: 0.11.0 + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.11 + require-from-string: 2.0.2 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + webpack: 5.103.0(webpack-cli@5.1.4) + optionalDependencies: + '@babel/core': 7.27.7 + typescript: 5.8.3 + transitivePeerDependencies: + - '@storybook/mdx2-csf' + - '@swc/core' + - '@types/webpack' + - bufferutil + - encoding + - esbuild + - eslint + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + + '@storybook/react@6.5.16(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(require-from-string@2.0.2)(type-fest@4.41.0)(typescript@4.9.5)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)': + dependencies: + '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) + '@babel/preset-react': 7.27.1(@babel/core@7.27.7) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@5.28.5)(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.103.0))(webpack-hot-middleware@2.26.1)(webpack@5.103.0) '@storybook/addons': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/client-logger': 6.5.16 - '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.101.0) - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/core': 6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)(webpack@5.103.0) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/docs-tools': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/node-logger': 6.5.16 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.5)(webpack@5.101.0) + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0(typescript@4.9.5)(webpack@5.103.0) '@storybook/semver': 7.3.2 '@storybook/store': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/estree': 0.0.51 @@ -30084,7 +34257,7 @@ snapshots: acorn-walk: 7.2.0 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-react-docgen: 4.2.1 - core-js: 3.45.0 + core-js: 3.47.0 escodegen: 2.1.0 fs-extra: 9.1.0 global: 4.4.0 @@ -30100,7 +34273,7 @@ snapshots: require-from-string: 2.0.2 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: '@babel/core': 7.27.7 typescript: 4.9.5 @@ -30123,6 +34296,37 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve + '@storybook/react@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + dependencies: + '@storybook/client-logger': 7.4.6 + '@storybook/core-client': 7.4.6 + '@storybook/docs-tools': 7.4.6(encoding@0.1.13) + '@storybook/global': 5.0.0 + '@storybook/preview-api': 7.4.6 + '@storybook/react-dom-shim': 7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/types': 7.4.6 + '@types/escodegen': 0.0.6 + '@types/estree': 0.0.51 + '@types/node': 16.18.126 + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-walk: 7.2.0 + escodegen: 2.1.0 + html-tags: 3.3.1 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-element-to-jsx-string: 15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + ts-dedent: 2.2.0 + type-fest: 2.19.0 + util-deprecate: 1.0.2 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - encoding + - supports-color + '@storybook/react@7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': dependencies: '@storybook/client-logger': 7.4.6 @@ -30169,35 +34373,25 @@ snapshots: '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) typescript: 5.8.3 - '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)': - dependencies: - '@storybook/components': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/preview-api': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/react-dom-shim': 8.6.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@storybook/theming': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - optionalDependencies: - '@storybook/test': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - typescript: 5.8.3 - - '@storybook/react@9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3)': + '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: + '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) + '@storybook/manager-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/preview-api': 8.6.14(storybook@8.6.14(prettier@3.5.3)) + '@storybook/react-dom-shim': 8.6.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@8.6.14(prettier@3.5.3)) + '@storybook/theming': 8.6.14(storybook@8.6.14(prettier@3.5.3)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + storybook: 8.6.14(prettier@3.5.3) optionalDependencies: + '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) typescript: 5.8.3 '@storybook/router@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 qs: 6.14.0 react: 18.2.0 @@ -30207,13 +34401,21 @@ snapshots: '@storybook/router@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 qs: 6.14.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 + '@storybook/router@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@storybook/client-logger': 7.4.6 + memoizerific: 1.11.3 + qs: 6.14.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@storybook/router@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 7.4.6 @@ -30224,7 +34426,7 @@ snapshots: '@storybook/semver@7.3.2': dependencies: - core-js: 3.45.0 + core-js: 3.47.0 find-up: 4.1.0 '@storybook/source-loader@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -30232,7 +34434,7 @@ snapshots: '@storybook/addons': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 - core-js: 3.45.0 + core-js: 3.47.0 estraverse: 5.3.0 global: 4.4.0 loader-utils: 2.0.4 @@ -30248,7 +34450,7 @@ snapshots: '@storybook/client-logger': 6.5.16 '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 - core-js: 3.45.0 + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -30268,7 +34470,7 @@ snapshots: '@storybook/client-logger': 6.5.16 '@storybook/core-events': 6.5.16 '@storybook/csf': 0.0.2--canary.4566f4d.1 - core-js: 3.45.0 + core-js: 3.47.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -30287,12 +34489,12 @@ snapshots: '@storybook/client-logger': 7.4.6 '@storybook/preview-api': 7.4.6 - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/telemetry@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) chalk: 4.1.2 - core-js: 3.45.0 + core-js: 3.47.0 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 fs-extra: 9.1.0 @@ -30314,12 +34516,12 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': + '@storybook/telemetry@6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) + '@storybook/core-common': 6.5.16(@swc/core@1.15.3(@swc/helpers@0.5.17))(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) chalk: 4.1.2 - core-js: 3.45.0 + core-js: 3.47.0 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 fs-extra: 9.1.0 @@ -30341,12 +34543,12 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': + '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) + '@storybook/core-common': 6.5.16(eslint@9.26.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) chalk: 4.1.2 - core-js: 3.45.0 + core-js: 3.47.0 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 fs-extra: 9.1.0 @@ -30368,12 +34570,12 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1)': + '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)': dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@6.0.1) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3) chalk: 4.1.2 - core-js: 3.45.0 + core-js: 3.47.0 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 fs-extra: 9.1.0 @@ -30395,12 +34597,39 @@ snapshots: - vue-template-compiler - webpack-cli - '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0)': dependencies: '@storybook/client-logger': 6.5.16 - '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.5.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.8.3)(webpack-cli@4.10.0) chalk: 4.1.2 - core-js: 3.45.0 + core-js: 3.47.0 + detect-package-manager: 2.0.1 + fetch-retry: 5.0.6 + fs-extra: 9.1.0 + global: 4.4.0 + isomorphic-unfetch: 3.1.0(encoding@0.1.13) + nanoid: 3.3.11 + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - '@swc/core' + - encoding + - esbuild + - eslint + - react + - react-dom + - supports-color + - typescript + - uglify-js + - vue-template-compiler + - webpack-cli + + '@storybook/telemetry@6.5.16(encoding@0.1.13)(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5)': + dependencies: + '@storybook/client-logger': 6.5.16 + '@storybook/core-common': 6.5.16(eslint@9.27.0(jiti@2.6.1))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@4.9.5) + chalk: 4.1.2 + core-js: 3.47.0 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 fs-extra: 9.1.0 @@ -30430,7 +34659,7 @@ snapshots: chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 - fs-extra: 11.3.1 + fs-extra: 11.3.2 read-pkg-up: 7.0.1 transitivePeerDependencies: - encoding @@ -30447,22 +34676,10 @@ snapshots: '@vitest/spy': 2.0.5 storybook: 8.6.14(prettier@3.5.3) - '@storybook/test@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3)) - '@testing-library/dom': 10.4.0 - '@testing-library/jest-dom': 6.5.0 - '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/expect': 2.0.5 - '@vitest/spy': 2.0.5 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - optional: true - '@storybook/theming@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -30471,12 +34688,21 @@ snapshots: '@storybook/theming@6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@storybook/client-logger': 6.5.16 - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) regenerator-runtime: 0.13.11 + '@storybook/theming@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.2.0) + '@storybook/client-logger': 7.4.6 + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@storybook/theming@7.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.1.0) @@ -30490,22 +34716,18 @@ snapshots: dependencies: storybook: 8.6.14(prettier@3.5.3) - '@storybook/theming@8.6.14(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))': - dependencies: - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) - '@storybook/types@7.4.6': dependencies: '@storybook/channels': 7.4.6 '@types/babel__core': 7.20.5 - '@types/express': 4.17.23 + '@types/express': 4.17.25 file-system-cache: 2.3.0 '@storybook/types@7.6.20': dependencies: '@storybook/channels': 7.6.20 '@types/babel__core': 7.20.5 - '@types/express': 4.17.23 + '@types/express': 4.17.25 file-system-cache: 2.3.0 '@storybook/ui@6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -30519,7 +34741,7 @@ snapshots: '@storybook/router': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/semver': 7.3.2 '@storybook/theming': 6.5.16(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 qs: 6.14.0 react: 18.2.0 @@ -30538,7 +34760,7 @@ snapshots: '@storybook/router': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@storybook/semver': 7.3.2 '@storybook/theming': 6.5.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - core-js: 3.45.0 + core-js: 3.47.0 memoizerific: 1.11.3 qs: 6.14.0 react: 19.1.0 @@ -30546,20 +34768,20 @@ snapshots: regenerator-runtime: 0.13.11 resolve-from: 5.0.0 - '@swagger-api/apidom-ast@1.0.0-beta.45': + '@swagger-api/apidom-ast@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-error': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) unraw: 3.0.0 - '@swagger-api/apidom-core@1.0.0-beta.45': + '@swagger-api/apidom-core@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-ast': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-ast': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 '@types/ramda': 0.30.2 minim: 0.23.8 ramda: 0.30.1 @@ -30567,213 +34789,213 @@ snapshots: short-unique-id: 5.3.2 ts-mixer: 6.0.4 - '@swagger-api/apidom-error@1.0.0-beta.45': + '@swagger-api/apidom-error@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 + '@babel/runtime-corejs3': 7.28.4 - '@swagger-api/apidom-json-pointer@1.0.0-beta.45': + '@swagger-api/apidom-json-pointer@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 '@swaggerexpert/json-pointer': 2.10.2 - '@swagger-api/apidom-ns-api-design-systems@1.0.0-beta.45': + '@swagger-api/apidom-ns-api-design-systems@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-arazzo-1@1.0.0-beta.45': + '@swagger-api/apidom-ns-arazzo-1@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-2@1.0.0-beta.45': + '@swagger-api/apidom-ns-asyncapi-2@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-json-schema-2019-09@1.0.0-beta.45': + '@swagger-api/apidom-ns-json-schema-2019-09@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-2020-12@1.0.0-beta.45': + '@swagger-api/apidom-ns-json-schema-2020-12@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-2019-09': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-2019-09': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-4@1.0.0-beta.45': + '@swagger-api/apidom-ns-json-schema-draft-4@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-ast': 1.0.0-beta.45 - '@swagger-api/apidom-core': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-ast': 1.0.0-rc.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-6@1.0.0-beta.45': + '@swagger-api/apidom-ns-json-schema-draft-6@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-7@1.0.0-beta.45': + '@swagger-api/apidom-ns-json-schema-draft-7@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-draft-6': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-draft-6': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-2@1.0.0-beta.45': + '@swagger-api/apidom-ns-openapi-2@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-openapi-3-0@1.0.0-beta.45': + '@swagger-api/apidom-ns-openapi-3-0@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-3-1@1.0.0-beta.45': + '@swagger-api/apidom-ns-openapi-3-1@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-ast': 1.0.0-beta.45 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-json-pointer': 1.0.0-beta.45 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-ast': 1.0.0-rc.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-json-pointer': 1.0.0-rc.4 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-api-design-systems': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-json': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-api-design-systems': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-json': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-api-design-systems': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-api-design-systems': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-arazzo-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-json': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-arazzo-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-json': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-arazzo-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-arazzo-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-asyncapi-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-json': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-asyncapi-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-json': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-asyncapi-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-asyncapi-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-json@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-json@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-ast': 1.0.0-beta.45 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-ast': 1.0.0-rc.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) @@ -30782,78 +35004,78 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-json': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-json': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-json': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-json': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-json': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-json': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-rc.4 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.0.0-beta.45': + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-ast': 1.0.0-beta.45 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-ast': 1.0.0-rc.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 '@tree-sitter-grammars/tree-sitter-yaml': 0.7.1(tree-sitter@0.22.4) '@types/ramda': 0.30.2 ramda: 0.30.1 @@ -30862,38 +35084,38 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-reference@1.0.0-beta.45': + '@swagger-api/apidom-reference@1.0.0-rc.4': dependencies: - '@babel/runtime-corejs3': 7.28.2 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 + '@babel/runtime-corejs3': 7.28.4 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 '@types/ramda': 0.30.2 - axios: 1.12.0 + axios: 1.12.2 minimatch: 7.4.6 process: 0.11.10 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optionalDependencies: - '@swagger-api/apidom-json-pointer': 1.0.0-beta.45 - '@swagger-api/apidom-ns-arazzo-1': 1.0.0-beta.45 - '@swagger-api/apidom-ns-asyncapi-2': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-2': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-json': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.0.0-beta.45 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.45 + '@swagger-api/apidom-json-pointer': 1.0.0-rc.4 + '@swagger-api/apidom-ns-arazzo-1': 1.0.0-rc.4 + '@swagger-api/apidom-ns-asyncapi-2': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-2': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-0': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-json': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.0.0-rc.4 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-rc.4 transitivePeerDependencies: - debug @@ -30905,51 +35127,51 @@ snapshots: dependencies: apg-lite: 1.0.5 - '@swc/core-darwin-arm64@1.13.3': + '@swc/core-darwin-arm64@1.15.3': optional: true - '@swc/core-darwin-x64@1.13.3': + '@swc/core-darwin-x64@1.15.3': optional: true - '@swc/core-linux-arm-gnueabihf@1.13.3': + '@swc/core-linux-arm-gnueabihf@1.15.3': optional: true - '@swc/core-linux-arm64-gnu@1.13.3': + '@swc/core-linux-arm64-gnu@1.15.3': optional: true - '@swc/core-linux-arm64-musl@1.13.3': + '@swc/core-linux-arm64-musl@1.15.3': optional: true - '@swc/core-linux-x64-gnu@1.13.3': + '@swc/core-linux-x64-gnu@1.15.3': optional: true - '@swc/core-linux-x64-musl@1.13.3': + '@swc/core-linux-x64-musl@1.15.3': optional: true - '@swc/core-win32-arm64-msvc@1.13.3': + '@swc/core-win32-arm64-msvc@1.15.3': optional: true - '@swc/core-win32-ia32-msvc@1.13.3': + '@swc/core-win32-ia32-msvc@1.15.3': optional: true - '@swc/core-win32-x64-msvc@1.13.3': + '@swc/core-win32-x64-msvc@1.15.3': optional: true - '@swc/core@1.13.3(@swc/helpers@0.5.17)': + '@swc/core@1.15.3(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.24 - optionalDependencies: - '@swc/core-darwin-arm64': 1.13.3 - '@swc/core-darwin-x64': 1.13.3 - '@swc/core-linux-arm-gnueabihf': 1.13.3 - '@swc/core-linux-arm64-gnu': 1.13.3 - '@swc/core-linux-arm64-musl': 1.13.3 - '@swc/core-linux-x64-gnu': 1.13.3 - '@swc/core-linux-x64-musl': 1.13.3 - '@swc/core-win32-arm64-msvc': 1.13.3 - '@swc/core-win32-ia32-msvc': 1.13.3 - '@swc/core-win32-x64-msvc': 1.13.3 + '@swc/types': 0.1.25 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.3 + '@swc/core-darwin-x64': 1.15.3 + '@swc/core-linux-arm-gnueabihf': 1.15.3 + '@swc/core-linux-arm64-gnu': 1.15.3 + '@swc/core-linux-arm64-musl': 1.15.3 + '@swc/core-linux-x64-gnu': 1.15.3 + '@swc/core-linux-x64-musl': 1.15.3 + '@swc/core-win32-arm64-msvc': 1.15.3 + '@swc/core-win32-ia32-msvc': 1.15.3 + '@swc/core-win32-x64-msvc': 1.15.3 '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} @@ -30958,7 +35180,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/types@0.1.24': + '@swc/types@0.1.25': dependencies: '@swc/counter': 0.1.3 @@ -30968,7 +35190,7 @@ snapshots: '@tanstack/query-core@4.27.0': {} - '@tanstack/query-core@4.40.0': {} + '@tanstack/query-core@4.41.0': {} '@tanstack/query-core@5.76.0': {} @@ -30976,7 +35198,7 @@ snapshots: '@tanstack/query-core@5.77.1': {} - '@tanstack/query-core@5.83.1': {} + '@tanstack/query-core@5.90.11': {} '@tanstack/query-persist-client-core@4.27.0': dependencies: @@ -30987,12 +35209,21 @@ snapshots: '@tanstack/query-persist-client-core': 4.27.0 '@tanstack/react-query': 4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-query@4.0.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@tanstack/query-core': 4.41.0 + '@types/use-sync-external-store': 0.0.3 + react: 18.2.0 + use-sync-external-store: 1.6.0(react@18.2.0) + optionalDependencies: + react-dom: 18.2.0(react@18.2.0) + '@tanstack/react-query@4.0.10(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/query-core': 4.40.0 + '@tanstack/query-core': 4.41.0 '@types/use-sync-external-store': 0.0.3 react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + use-sync-external-store: 1.6.0(react@19.1.0) optionalDependencies: react-dom: 19.1.0(react@19.1.0) @@ -31000,7 +35231,7 @@ snapshots: dependencies: '@tanstack/query-core': 4.27.0 react: 18.2.0 - use-sync-external-store: 1.5.0(react@18.2.0) + use-sync-external-store: 1.6.0(react@18.2.0) optionalDependencies: react-dom: 18.2.0(react@18.2.0) @@ -31036,7 +35267,7 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -31047,7 +35278,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -31057,7 +35288,7 @@ snapshots: '@testing-library/jest-dom@6.5.0': dependencies: - '@adobe/css-tools': 4.4.3 + '@adobe/css-tools': 4.4.4 aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 @@ -31067,7 +35298,7 @@ snapshots: '@testing-library/jest-dom@6.6.4': dependencies: - '@adobe/css-tools': 4.4.3 + '@adobe/css-tools': 4.4.4 aria-query: 5.3.2 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 @@ -31077,7 +35308,7 @@ snapshots: '@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@testing-library/dom': 10.4.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -31089,22 +35320,18 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': - dependencies: - '@testing-library/dom': 10.4.1 - - '@textlint/ast-node-types@14.8.4': {} + '@textlint/ast-node-types@15.4.0': {} - '@textlint/linter-formatter@14.8.4': + '@textlint/linter-formatter@15.4.0': dependencies: '@azu/format-text': 1.0.2 '@azu/style-format': 1.0.1 - '@textlint/module-interop': 14.8.4 - '@textlint/resolver': 14.8.4 - '@textlint/types': 14.8.4 + '@textlint/module-interop': 15.4.0 + '@textlint/resolver': 15.4.0 + '@textlint/types': 15.4.0 chalk: 4.1.2 - debug: 4.4.1(supports-color@8.1.1) - js-yaml: 3.14.1 + debug: 4.4.3(supports-color@8.1.1) + js-yaml: 4.1.1 lodash: 4.17.21 pluralize: 2.0.0 string-width: 4.2.3 @@ -31114,13 +35341,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@textlint/module-interop@14.8.4': {} + '@textlint/module-interop@15.4.0': {} - '@textlint/resolver@14.8.4': {} + '@textlint/resolver@15.4.0': {} - '@textlint/types@14.8.4': + '@textlint/types@15.4.0': dependencies: - '@textlint/ast-node-types': 14.8.4 + '@textlint/ast-node-types': 15.4.0 '@tokenizer/token@0.3.0': {} @@ -31148,31 +35375,44 @@ snapshots: '@ts-morph/common@0.27.0': dependencies: fast-glob: 3.3.3 - minimatch: 10.0.3 + minimatch: 10.1.1 path-browserify: 1.0.1 + '@tsconfig/node10@1.0.12': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@types/blueimp-md5@2.18.2': {} @@ -31191,10 +35431,6 @@ snapshots: '@types/chai@4.3.20': {} - '@types/chai@5.2.2': - dependencies: - '@types/deep-eql': 4.0.2 - '@types/classnames@2.3.4': dependencies: classnames: 2.5.1 @@ -31203,13 +35439,13 @@ snapshots: dependencies: '@types/tern': 0.23.9 - '@types/codemirror@5.60.16': + '@types/codemirror@5.60.17': dependencies: '@types/tern': 0.23.9 '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 4.19.6 + '@types/express-serve-static-core': 4.19.7 '@types/node': 22.15.35 '@types/connect@3.4.38': @@ -31226,8 +35462,6 @@ snapshots: dependencies: '@types/ms': 2.1.0 - '@types/deep-eql@4.0.2': {} - '@types/deep-equal@1.0.4': {} '@types/detect-port@1.3.5': {} @@ -31238,7 +35472,7 @@ snapshots: '@types/ejs@3.1.5': {} - '@types/emscripten@1.40.1': {} + '@types/emscripten@1.41.5': {} '@types/escodegen@0.0.6': {} @@ -31264,19 +35498,19 @@ snapshots: '@types/estree@1.0.8': {} - '@types/express-serve-static-core@4.19.6': + '@types/express-serve-static-core@4.19.7': dependencies: '@types/node': 22.15.35 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 - '@types/send': 0.17.5 + '@types/send': 1.2.1 - '@types/express@4.17.23': + '@types/express@4.17.25': dependencies: '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 4.19.6 + '@types/express-serve-static-core': 4.19.7 '@types/qs': 6.14.0 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/find-cache-dir@3.2.1': {} @@ -31324,7 +35558,7 @@ snapshots: '@types/http-errors@2.0.5': {} - '@types/http-proxy@1.17.16': + '@types/http-proxy@1.17.17': dependencies: '@types/node': 22.15.35 @@ -31355,6 +35589,11 @@ snapshots: expect: 29.7.0 pretty-format: 29.7.0 + '@types/jest@30.0.0': + dependencies: + expect: 30.2.0 + pretty-format: 30.2.0 + '@types/js-yaml@4.0.9': {} '@types/jsdom@20.0.1': @@ -31371,6 +35610,8 @@ snapshots: dependencies: '@types/node': 22.15.35 + '@types/linkify-it@5.0.0': {} + '@types/lodash.camelcase@4.3.9': dependencies: '@types/lodash': 4.17.17 @@ -31389,6 +35630,11 @@ snapshots: '@types/lodash@4.17.17': {} + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 @@ -31397,6 +35643,10 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/mdurl@1.0.5': {} + + '@types/mdurl@2.0.0': {} + '@types/mdx@2.0.13': {} '@types/mime-types@2.1.4': {} @@ -31407,7 +35657,7 @@ snapshots: '@types/minimatch@6.0.0': dependencies: - minimatch: 10.0.3 + minimatch: 10.1.1 '@types/minimist@1.2.5': {} @@ -31422,18 +35672,22 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: '@types/node': 22.15.35 - form-data: 4.0.4 + form-data: 4.0.5 - '@types/node-forge@1.3.13': + '@types/node-forge@1.3.14': dependencies: '@types/node': 22.15.35 '@types/node@16.18.126': {} - '@types/node@18.19.121': + '@types/node@18.19.130': dependencies: undici-types: 5.26.5 + '@types/node@20.19.25': + dependencies: + undici-types: 6.21.0 + '@types/node@22.15.18': dependencies: undici-types: 6.21.0 @@ -31509,17 +35763,17 @@ snapshots: dependencies: '@types/react': 18.2.0 - '@types/react@17.0.87': + '@types/react@17.0.90': dependencies: '@types/prop-types': 15.7.15 '@types/scheduler': 0.16.8 - csstype: 3.1.3 + csstype: 3.2.3 '@types/react@18.2.0': dependencies: '@types/prop-types': 15.7.15 '@types/scheduler': 0.26.0 - csstype: 3.1.3 + csstype: 3.2.3 '@types/resolve@1.17.1': dependencies: @@ -31537,27 +35791,31 @@ snapshots: '@types/scheduler@0.26.0': {} - '@types/selenium-webdriver@4.1.28': + '@types/selenium-webdriver@4.35.4': dependencies: '@types/node': 22.15.35 '@types/ws': 8.18.1 - '@types/semver@7.7.0': {} + '@types/semver@7.7.1': {} - '@types/send@0.17.5': + '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 '@types/node': 22.15.35 + '@types/send@1.2.1': + dependencies: + '@types/node': 22.15.35 + '@types/serve-index@1.9.4': dependencies: - '@types/express': 4.17.23 + '@types/express': 4.17.25 - '@types/serve-static@1.15.8': + '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 '@types/node': 22.15.35 - '@types/send': 0.17.5 + '@types/send': 0.17.6 '@types/sockjs@0.3.36': dependencies: @@ -31610,11 +35868,11 @@ snapshots: '@types/uuid@9.0.8': {} - '@types/vscode-notebook-renderer@1.72.3': {} + '@types/vscode-notebook-renderer@1.72.4': {} '@types/vscode-webview@1.57.5': {} - '@types/vscode@1.102.0': {} + '@types/vscode@1.106.1': {} '@types/webpack-env@1.18.8': {} @@ -31636,8 +35894,8 @@ snapshots: '@types/webpack@5.28.5': dependencies: '@types/node': 22.15.35 - tapable: 2.2.2 - webpack: 5.101.0(webpack-cli@5.1.4) + tapable: 2.3.0 + webpack: 5.103.0(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -31645,11 +35903,11 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.5(webpack-cli@4.10.0)': + '@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))': dependencies: '@types/node': 22.15.35 - tapable: 2.2.2 - webpack: 5.101.0(webpack-cli@4.10.0) + tapable: 2.3.0 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@swc/core' - esbuild @@ -31657,22 +35915,34 @@ snapshots: - webpack-cli optional: true - '@types/webpack@5.28.5(webpack-cli@5.1.4)': + '@types/webpack@5.28.5(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1)': + dependencies: + '@types/node': 22.15.35 + tapable: 2.3.0 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + + '@types/webpack@5.28.5(webpack-cli@4.10.0)': dependencies: '@types/node': 22.15.35 - tapable: 2.2.2 - webpack: 5.101.0(webpack-cli@5.1.4) + tapable: 2.3.0 + webpack: 5.103.0(webpack-cli@4.10.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack-cli + optional: true - '@types/webpack@5.28.5(webpack-cli@6.0.1)': + '@types/webpack@5.28.5(webpack-cli@5.1.4)': dependencies: '@types/node': 22.15.35 - tapable: 2.2.2 - webpack: 5.101.0(webpack-cli@6.0.1) + tapable: 2.3.0 + webpack: 5.103.0(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -31691,11 +35961,11 @@ snapshots: '@types/yargs-parser@21.0.3': {} - '@types/yargs@15.0.19': + '@types/yargs@15.0.20': dependencies: '@types/yargs-parser': 21.0.3 - '@types/yargs@17.0.33': + '@types/yargs@17.0.35': dependencies: '@types/yargs-parser': 21.0.3 @@ -31718,12 +35988,12 @@ snapshots: '@typescript-eslint/scope-manager': 5.48.2 '@typescript-eslint/type-utils': 5.48.2(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/utils': 5.48.2(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 ignore: 5.3.2 natural-compare-lite: 1.4.0 regexpp: 3.2.0 - semver: 7.7.2 + semver: 7.7.3 tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -31732,18 +36002,18 @@ snapshots: '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -31752,18 +36022,18 @@ snapshots: '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@8.33.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 '@typescript-eslint/parser': 8.33.1(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -31772,7 +36042,7 @@ snapshots: '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) @@ -31788,15 +36058,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -31805,15 +36075,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.33.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.33.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.26.0(jiti@2.5.1) + eslint: 9.26.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -31822,15 +36092,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -31839,15 +36109,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.33.1 - '@typescript-eslint/type-utils': 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.33.1 - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -31884,7 +36154,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.48.2 '@typescript-eslint/types': 5.48.2 '@typescript-eslint/typescript-estree': 5.48.2(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 optionalDependencies: typescript: 5.8.3 @@ -31897,7 +36167,7 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 optionalDependencies: typescript: 5.8.3 @@ -31910,21 +36180,21 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.5.1) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.27.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -31935,32 +36205,32 @@ snapshots: '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.33.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.33.1 '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.33.1 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.26.0(jiti@2.5.1) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.26.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.33.1 '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.33.1 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.5.1) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.27.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -31969,16 +36239,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) '@typescript-eslint/types': 8.33.1 - debug: 4.4.1(supports-color@8.1.1) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.39.0(typescript@5.8.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.8.3) - '@typescript-eslint/types': 8.39.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -31988,6 +36249,11 @@ snapshots: '@typescript-eslint/types': 5.48.2 '@typescript-eslint/visitor-keys': 5.48.2 + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -32008,24 +36274,15 @@ snapshots: '@typescript-eslint/types': 8.33.1 '@typescript-eslint/visitor-keys': 8.33.1 - '@typescript-eslint/scope-manager@8.39.0': - dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 - '@typescript-eslint/tsconfig-utils@8.33.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.8.3)': - dependencies: - typescript: 5.8.3 - '@typescript-eslint/type-utils@5.48.2(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 5.48.2(typescript@5.8.3) '@typescript-eslint/utils': 5.48.2(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: @@ -32037,7 +36294,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: @@ -32049,7 +36306,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: @@ -32057,34 +36314,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.32.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.26.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.32.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.26.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.27.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.5.1) + '@typescript-eslint/utils': 8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.27.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -32092,6 +36349,8 @@ snapshots: '@typescript-eslint/types@5.48.2': {} + '@typescript-eslint/types@5.62.0': {} + '@typescript-eslint/types@6.21.0': {} '@typescript-eslint/types@7.18.0': {} @@ -32100,16 +36359,14 @@ snapshots: '@typescript-eslint/types@8.33.1': {} - '@typescript-eslint/types@8.39.0': {} - '@typescript-eslint/typescript-estree@2.34.0(typescript@3.9.10)': dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) eslint-visitor-keys: 1.3.0 glob: 7.2.3 is-glob: 4.0.3 lodash: 4.17.21 - semver: 7.7.2 + semver: 7.7.3 tsutils: 3.21.0(typescript@3.9.10) optionalDependencies: typescript: 3.9.10 @@ -32120,10 +36377,24 @@ snapshots: dependencies: '@typescript-eslint/types': 5.48.2 '@typescript-eslint/visitor-keys': 5.48.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.2 + semver: 7.7.3 + tsutils: 3.21.0(typescript@5.8.3) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.3(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.7.3 tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -32134,11 +36405,11 @@ snapshots: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -32149,11 +36420,11 @@ snapshots: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 1.4.3(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -32164,11 +36435,11 @@ snapshots: dependencies: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -32180,27 +36451,11 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.33.1(typescript@5.8.3) '@typescript-eslint/types': 8.33.1 '@typescript-eslint/visitor-keys': 8.33.1 - debug: 4.4.1(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.39.0(typescript@5.8.3)': - dependencies: - '@typescript-eslint/project-service': 8.39.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.8.3) - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.2 + semver: 7.7.3 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -32209,35 +36464,50 @@ snapshots: '@typescript-eslint/utils@5.48.2(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 5.48.2 '@typescript-eslint/types': 5.48.2 '@typescript-eslint/typescript-estree': 5.48.2(typescript@5.8.3) eslint: 8.57.1 eslint-scope: 5.1.1 eslint-utils: 3.0.0(eslint@8.57.1) - semver: 7.7.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.7.1 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.7.3 transitivePeerDependencies: - supports-color - typescript '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) eslint: 8.57.1 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color - typescript '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) @@ -32246,46 +36516,35 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.32.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/utils@8.32.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.26.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.26.0(jiti@2.5.1) + eslint: 9.26.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.27.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)': + '@typescript-eslint/utils@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.27.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.33.1 '@typescript-eslint/types': 8.33.1 '@typescript-eslint/typescript-estree': 8.33.1(typescript@5.8.3) - eslint: 9.27.0(jiti@2.5.1) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.39.0(eslint@8.57.1)(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.8.3) - eslint: 8.57.1 + eslint: 9.27.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -32295,6 +36554,11 @@ snapshots: '@typescript-eslint/types': 5.48.2 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -32315,12 +36579,7 @@ snapshots: '@typescript-eslint/types': 8.33.1 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.39.0': - dependencies: - '@typescript-eslint/types': 8.39.0 - eslint-visitor-keys: 4.2.1 - - '@typespec/ts-http-runtime@0.3.0': + '@typespec/ts-http-runtime@0.3.2': dependencies: http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -32330,21 +36589,21 @@ snapshots: '@uiw/codemirror-extensions-basic-setup@4.23.14(@codemirror/lint@6.8.5)': dependencies: - '@codemirror/autocomplete': 6.18.6 - '@codemirror/commands': 6.8.1 - '@codemirror/language': 6.11.2 + '@codemirror/autocomplete': 6.19.1 + '@codemirror/commands': 6.10.0 + '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 '@codemirror/search': 6.5.11 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.8 - '@uiw/react-codemirror@4.23.14(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@uiw/react-codemirror@4.23.14(@codemirror/lint@6.8.5)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.38.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.28.2 - '@codemirror/commands': 6.8.1 + '@babel/runtime': 7.28.4 + '@codemirror/commands': 6.10.0 '@codemirror/state': 6.5.2 '@codemirror/theme-one-dark': 6.1.3 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.8 '@uiw/codemirror-extensions-basic-setup': 4.23.14(@codemirror/lint@6.8.5) codemirror: 6.0.2 react: 18.2.0 @@ -32354,27 +36613,74 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + + '@vercel/oidc@3.0.5': {} + '@vitest/expect@2.0.5': dependencies: '@vitest/spy': 2.0.5 '@vitest/utils': 2.0.5 - chai: 5.2.1 + chai: 5.3.3 tinyrainbow: 1.2.0 - '@vitest/expect@3.2.4': - dependencies: - '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.1 - tinyrainbow: 2.0.0 - - '@vitest/mocker@3.2.4': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 @@ -32383,37 +36689,23 @@ snapshots: dependencies: tinyrainbow: 1.2.0 - '@vitest/pretty-format@3.2.4': - dependencies: - tinyrainbow: 2.0.0 - '@vitest/spy@2.0.5': dependencies: tinyspy: 3.0.2 - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 - '@vitest/utils@2.0.5': dependencies: '@vitest/pretty-format': 2.0.5 estree-walker: 3.0.3 - loupe: 3.2.0 + loupe: 3.2.1 tinyrainbow: 1.2.0 '@vitest/utils@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 - loupe: 3.2.0 + loupe: 3.2.1 tinyrainbow: 1.2.0 - '@vitest/utils@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.2.0 - tinyrainbow: 2.0.0 - '@vscode-logging/logger@2.0.0': dependencies: '@vscode-logging/types': 2.0.0 @@ -32443,13 +36735,13 @@ snapshots: '@vscode/extension-telemetry@1.0.0(tslib@2.8.1)': dependencies: - '@microsoft/1ds-core-js': 4.3.9(tslib@2.8.1) - '@microsoft/1ds-post-js': 4.3.9(tslib@2.8.1) - '@microsoft/applicationinsights-web-basic': 3.3.9(tslib@2.8.1) + '@microsoft/1ds-core-js': 4.3.10(tslib@2.8.1) + '@microsoft/1ds-post-js': 4.3.10(tslib@2.8.1) + '@microsoft/applicationinsights-web-basic': 3.3.10(tslib@2.8.1) transitivePeerDependencies: - tslib - '@vscode/iconv-lite-umd@0.7.0': {} + '@vscode/iconv-lite-umd@0.7.1': {} '@vscode/test-electron@2.5.2': dependencies: @@ -32457,59 +36749,59 @@ snapshots: https-proxy-agent: 7.0.6 jszip: 3.10.1 ora: 8.2.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color - '@vscode/vsce-sign-alpine-arm64@2.0.5': + '@vscode/vsce-sign-alpine-arm64@2.0.6': optional: true - '@vscode/vsce-sign-alpine-x64@2.0.5': + '@vscode/vsce-sign-alpine-x64@2.0.6': optional: true - '@vscode/vsce-sign-darwin-arm64@2.0.5': + '@vscode/vsce-sign-darwin-arm64@2.0.6': optional: true - '@vscode/vsce-sign-darwin-x64@2.0.5': + '@vscode/vsce-sign-darwin-x64@2.0.6': optional: true - '@vscode/vsce-sign-linux-arm64@2.0.5': + '@vscode/vsce-sign-linux-arm64@2.0.6': optional: true - '@vscode/vsce-sign-linux-arm@2.0.5': + '@vscode/vsce-sign-linux-arm@2.0.6': optional: true - '@vscode/vsce-sign-linux-x64@2.0.5': + '@vscode/vsce-sign-linux-x64@2.0.6': optional: true - '@vscode/vsce-sign-win32-arm64@2.0.5': + '@vscode/vsce-sign-win32-arm64@2.0.6': optional: true - '@vscode/vsce-sign-win32-x64@2.0.5': + '@vscode/vsce-sign-win32-x64@2.0.6': optional: true - '@vscode/vsce-sign@2.0.6': + '@vscode/vsce-sign@2.0.9': optionalDependencies: - '@vscode/vsce-sign-alpine-arm64': 2.0.5 - '@vscode/vsce-sign-alpine-x64': 2.0.5 - '@vscode/vsce-sign-darwin-arm64': 2.0.5 - '@vscode/vsce-sign-darwin-x64': 2.0.5 - '@vscode/vsce-sign-linux-arm': 2.0.5 - '@vscode/vsce-sign-linux-arm64': 2.0.5 - '@vscode/vsce-sign-linux-x64': 2.0.5 - '@vscode/vsce-sign-win32-arm64': 2.0.5 - '@vscode/vsce-sign-win32-x64': 2.0.5 + '@vscode/vsce-sign-alpine-arm64': 2.0.6 + '@vscode/vsce-sign-alpine-x64': 2.0.6 + '@vscode/vsce-sign-darwin-arm64': 2.0.6 + '@vscode/vsce-sign-darwin-x64': 2.0.6 + '@vscode/vsce-sign-linux-arm': 2.0.6 + '@vscode/vsce-sign-linux-arm64': 2.0.6 + '@vscode/vsce-sign-linux-x64': 2.0.6 + '@vscode/vsce-sign-win32-arm64': 2.0.6 + '@vscode/vsce-sign-win32-x64': 2.0.6 '@vscode/vsce@2.32.0': dependencies: - '@azure/identity': 4.11.1 - '@vscode/vsce-sign': 2.0.6 + '@azure/identity': 4.13.0 + '@vscode/vsce-sign': 2.0.9 azure-devops-node-api: 12.5.0 chalk: 2.4.2 cheerio: 1.1.2 cockatiel: 3.2.1 commander: 6.2.1 - form-data: 4.0.4 + form-data: 4.0.5 glob: 7.2.3 hosted-git-info: 4.1.0 jsonc-parser: 3.3.1 @@ -32519,8 +36811,8 @@ snapshots: minimatch: 3.1.2 parse-semver: 1.1.1 read: 1.0.7 - semver: 7.7.2 - tmp: 0.2.4 + semver: 7.7.3 + tmp: 0.2.5 typed-rest-client: 1.8.11 url-join: 4.0.1 xml2js: 0.5.0 @@ -32529,25 +36821,26 @@ snapshots: optionalDependencies: keytar: 7.9.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a - supports-color - '@vscode/vsce@3.4.2': + '@vscode/vsce@3.7.1': dependencies: - '@azure/identity': 4.11.1 - '@secretlint/node': 9.3.4 - '@secretlint/secretlint-formatter-sarif': 9.3.4 - '@secretlint/secretlint-rule-no-dotenv': 9.3.4 - '@secretlint/secretlint-rule-preset-recommend': 9.3.4 - '@vscode/vsce-sign': 2.0.6 + '@azure/identity': 4.13.0 + '@secretlint/node': 10.2.2 + '@secretlint/secretlint-formatter-sarif': 10.2.2 + '@secretlint/secretlint-rule-no-dotenv': 10.2.2 + '@secretlint/secretlint-rule-preset-recommend': 10.2.2 + '@vscode/vsce-sign': 2.0.9 azure-devops-node-api: 12.5.0 - chalk: 2.4.2 + chalk: 4.1.2 cheerio: 1.1.2 cockatiel: 3.2.1 commander: 12.1.0 - form-data: 4.0.4 - glob: 11.0.3 + form-data: 4.0.5 + glob: 11.1.0 hosted-git-info: 4.1.0 jsonc-parser: 3.3.1 leven: 3.1.0 @@ -32556,9 +36849,9 @@ snapshots: minimatch: 3.1.2 parse-semver: 1.1.1 read: 1.0.7 - secretlint: 9.3.4 - semver: 7.7.2 - tmp: 0.2.4 + secretlint: 10.2.2 + semver: 7.7.3 + tmp: 0.2.5 typed-rest-client: 1.8.11 url-join: 4.0.1 xml2js: 0.5.0 @@ -32567,6 +36860,7 @@ snapshots: optionalDependencies: keytar: 7.9.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a - supports-color @@ -32663,76 +36957,81 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.101.0)': + '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.103.0) - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.101.0)': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.103.0) - '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.103.0) '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': dependencies: - envinfo: 7.14.0 - webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.101.0) + envinfo: 7.21.0 + webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.103.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.101.0)': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.103.0) - '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.103.0) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)': dependencies: - webpack-cli: 4.10.0(webpack@5.101.0) + webpack-cli: 4.10.0(webpack@5.103.0) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@5.2.2)': dependencies: - webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.103.0) optionalDependencies: - webpack-dev-server: 5.2.2(webpack-cli@4.10.0)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@4.10.0)(webpack@5.103.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack@5.101.0)': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.103.0) optionalDependencies: - webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) + + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.103.0)': + dependencies: + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.103.0) - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack@5.101.0)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) optionalDependencies: - webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) - '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)': dependencies: - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack@5.103.0) '@xmldom/xmldom@0.7.13': {} - '@xmldom/xmldom@0.8.10': {} + '@xmldom/xmldom@0.8.11': {} '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} - '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.25.8)': + '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.25.12)': dependencies: - esbuild: 0.25.8 + esbuild: 0.25.12 tslib: 2.8.1 '@yarnpkg/fslib@2.10.3': @@ -32742,7 +37041,7 @@ snapshots: '@yarnpkg/libzip@2.3.0': dependencies: - '@types/emscripten': 1.40.1 + '@types/emscripten': 1.41.5 tslib: 1.14.1 abab@1.0.4: {} @@ -32764,7 +37063,7 @@ snapshots: accepts@2.0.0: dependencies: - mime-types: 3.0.1 + mime-types: 3.0.2 negotiator: 1.0.0 acorn-globals@3.1.0: @@ -32821,7 +37120,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -32841,11 +37140,19 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ai@5.0.59(zod@4.1.11): + ai@5.0.106(zod@3.25.76): dependencies: - '@ai-sdk/gateway': 1.0.32(zod@4.1.11) + '@ai-sdk/gateway': 2.0.18(zod@3.25.76) '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@4.1.11) + '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) + '@opentelemetry/api': 1.9.0 + zod: 3.25.76 + + ai@5.0.106(zod@4.1.11): + dependencies: + '@ai-sdk/gateway': 2.0.18(zod@4.1.11) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.18(zod@4.1.11) '@opentelemetry/api': 1.9.0 zod: 4.1.11 @@ -32903,7 +37210,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -32914,7 +37221,7 @@ snapshots: amdefine@1.0.1: optional: true - anser@2.3.2: {} + anser@2.3.3: {} ansi-align@2.0.0: dependencies: @@ -32940,7 +37247,7 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@7.0.0: + ansi-escapes@7.2.0: dependencies: environment: 1.1.0 @@ -32956,7 +37263,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@2.2.1: {} @@ -32970,7 +37277,7 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} ansi-to-html@0.6.15: dependencies: @@ -33029,6 +37336,8 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 + arg@4.1.3: {} + arg@5.0.2: {} argparse@1.0.10: @@ -33226,11 +37535,11 @@ snapshots: dependencies: tslib: 2.8.1 - autoprefixer@10.4.21(postcss@8.5.6): + autoprefixer@10.4.22(postcss@8.5.6): dependencies: - browserslist: 4.25.1 - caniuse-lite: 1.0.30001731 - fraction.js: 4.3.7 + browserslist: 4.28.0 + caniuse-lite: 1.0.30001757 + fraction.js: 5.3.4 normalize-range: 0.1.2 picocolors: 1.1.1 postcss: 8.5.6 @@ -33239,7 +37548,7 @@ snapshots: autoprefixer@6.7.7: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30001731 + caniuse-db: 1.0.30001757 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 5.2.18 @@ -33248,7 +37557,7 @@ snapshots: autoprefixer@7.1.6: dependencies: browserslist: 2.11.3 - caniuse-lite: 1.0.30001731 + caniuse-lite: 1.0.30001757 normalize-range: 0.1.2 num2fraction: 1.2.2 postcss: 6.0.23 @@ -33256,8 +37565,8 @@ snapshots: autoprefixer@9.8.8: dependencies: - browserslist: 4.25.1 - caniuse-lite: 1.0.30001731 + browserslist: 4.28.0 + caniuse-lite: 1.0.30001757 normalize-range: 0.1.2 num2fraction: 1.2.2 picocolors: 0.2.1 @@ -33276,23 +37585,18 @@ snapshots: aws4fetch@1.0.20: {} - axe-core@4.10.3: {} + axe-core@4.11.0: {} - axios@1.12.0: + axios@1.12.2: dependencies: follow-redirects: 1.15.11 - form-data: 4.0.4 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug axobject-query@4.1.0: {} - azure-devops-node-api@11.2.0: - dependencies: - tunnel: 0.0.6 - typed-rest-client: 1.8.11 - azure-devops-node-api@12.5.0: dependencies: tunnel: 0.0.6 @@ -33335,12 +37639,12 @@ snapshots: babel-eslint@10.1.0(eslint@6.8.0): dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 eslint: 6.8.0 eslint-visitor-keys: 1.3.0 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -33471,35 +37775,64 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@10.0.0(@babel/core@7.27.7)(webpack@5.101.0): + babel-jest@30.2.0(@babel/core@7.27.7): + dependencies: + '@babel/core': 7.27.7 + '@jest/transform': 30.2.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 7.0.1 + babel-preset-jest: 30.2.0(@babel/core@7.27.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-loader@10.0.0(@babel/core@7.27.7)(webpack@5.103.0): dependencies: '@babel/core': 7.27.7 find-up: 5.0.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) - babel-loader@7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.101.0): + babel-loader@7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.103.0): dependencies: babel-core: 7.0.0-bridge.0(@babel/core@7.27.7) find-cache-dir: 1.0.0 loader-utils: 1.4.2 mkdirp: 0.5.6 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + babel-loader@8.4.1(@babel/core@7.27.7)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + '@babel/core': 7.27.7 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - babel-loader@8.4.1(@babel/core@7.27.7)(webpack@5.101.0): + babel-loader@8.4.1(@babel/core@7.27.7)(webpack@5.103.0): dependencies: '@babel/core': 7.27.7 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + '@babel/core': 7.27.7 + find-cache-dir: 4.0.0 + schema-utils: 4.3.3 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.101.0): + babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.103.0): dependencies: '@babel/core': 7.27.7 find-cache-dir: 4.0.0 - schema-utils: 4.3.2 - webpack: 5.101.0(webpack-cli@5.1.4) + schema-utils: 4.3.3 + webpack: 5.103.0(webpack-cli@5.1.4) babel-messages@6.23.0: dependencies: @@ -33552,6 +37885,16 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-istanbul@7.0.1: + dependencies: + '@babel/helper-plugin-utils': 7.27.1 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 6.0.3 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + babel-plugin-jest-hoist@20.0.3: {} babel-plugin-jest-hoist@22.4.4: {} @@ -33559,33 +37902,37 @@ snapshots: babel-plugin-jest-hoist@25.5.0: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@types/babel__traverse': 7.28.0 babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 + babel-plugin-jest-hoist@30.2.0: + dependencies: + '@types/babel__core': 7.20.5 + babel-plugin-macros@2.8.0: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 cosmiconfig: 6.0.0 - resolve: 1.22.10 + resolve: 1.22.11 babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 cosmiconfig: 7.1.0 - resolve: 1.22.10 + resolve: 1.22.11 babel-plugin-named-exports-order@0.0.2: {} babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.27.7): dependencies: - '@babel/compat-data': 7.28.0 + '@babel/compat-data': 7.28.5 '@babel/core': 7.27.7 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.27.7) semver: 6.3.1 @@ -33596,7 +37943,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/helper-define-polyfill-provider': 0.1.5(@babel/core@7.27.7) - core-js-compat: 3.45.0 + core-js-compat: 3.47.0 transitivePeerDependencies: - supports-color @@ -33604,7 +37951,7 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.27.7) - core-js-compat: 3.45.0 + core-js-compat: 3.47.0 transitivePeerDependencies: - supports-color @@ -33930,6 +38277,12 @@ snapshots: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + babel-preset-jest@30.2.0(@babel/core@7.27.7): + dependencies: + '@babel/core': 7.27.7 + babel-plugin-jest-hoist: 30.2.0 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + babel-preset-react-app@3.1.2(babel-runtime@6.26.0): dependencies: babel-plugin-dynamic-import-node: 1.1.0 @@ -34010,16 +38363,17 @@ snapshots: balanced-match@2.0.0: {} - bare-events@2.7.0: {} + bare-events@2.8.2: {} - bare-fs@4.4.4: + bare-fs@4.5.2: dependencies: - bare-events: 2.7.0 + bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.7.0) - bare-url: 2.2.2 + bare-stream: 2.7.0(bare-events@2.8.2) + bare-url: 2.3.2 fast-fifo: 1.3.2 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a optional: true @@ -34031,16 +38385,17 @@ snapshots: bare-os: 3.6.2 optional: true - bare-stream@2.7.0(bare-events@2.7.0): + bare-stream@2.7.0(bare-events@2.8.2): dependencies: streamx: 2.23.0 optionalDependencies: - bare-events: 2.7.0 + bare-events: 2.8.2 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a optional: true - bare-url@2.2.2: + bare-url@2.3.2: dependencies: bare-path: 3.0.0 optional: true @@ -34049,6 +38404,8 @@ snapshots: base64-js@1.5.1: {} + baseline-browser-mapping@2.8.32: {} + basic-auth@2.0.1: dependencies: safe-buffer: 5.1.2 @@ -34084,7 +38441,7 @@ snapshots: binaryextensions@6.11.0: dependencies: - editions: 6.21.0 + editions: 6.22.0 bindings@1.5.0: dependencies: @@ -34106,31 +38463,31 @@ snapshots: blueimp-md5@2.19.0: {} - body-parser@1.20.3: + body-parser@1.20.4: dependencies: bytes: 3.1.2 content-type: 1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 + qs: 6.14.0 + raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 - body-parser@2.2.0: + body-parser@2.2.1: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.1(supports-color@8.1.1) - http-errors: 2.0.0 - iconv-lite: 0.6.3 + debug: 4.4.3(supports-color@8.1.1) + http-errors: 2.0.1 + iconv-lite: 0.7.0 on-finished: 2.4.1 qs: 6.14.0 - raw-body: 3.0.0 + raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: - supports-color @@ -34144,7 +38501,7 @@ snapshots: boundary@2.0.0: {} - bowser@2.11.0: {} + bowser@2.13.1: {} boxen@1.3.0: dependencies: @@ -34200,20 +38557,21 @@ snapshots: browserslist@1.7.7: dependencies: - caniuse-db: 1.0.30001731 - electron-to-chromium: 1.5.198 + caniuse-db: 1.0.30001757 + electron-to-chromium: 1.5.263 browserslist@2.11.3: dependencies: - caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.198 + caniuse-lite: 1.0.30001757 + electron-to-chromium: 1.5.263 - browserslist@4.25.1: + browserslist@4.28.0: dependencies: - caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.198 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + baseline-browser-mapping: 2.8.32 + caniuse-lite: 1.0.30001757 + electron-to-chromium: 1.5.263 + node-releases: 2.0.27 + update-browserslist-db: 1.1.4(browserslist@4.28.0) bs-logger@0.2.6: dependencies: @@ -34261,12 +38619,14 @@ snapshots: bundle-name@4.1.0: dependencies: - run-applescript: 7.0.0 + run-applescript: 7.1.0 byline@5.0.0: {} bytes-iec@3.1.1: {} + bytes@3.0.0: {} + bytes@3.1.2: {} c8@10.1.3: @@ -34277,7 +38637,7 @@ snapshots: foreground-child: 3.3.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 test-exclude: 7.0.1 v8-to-istanbul: 9.3.0 yargs: 17.7.2 @@ -34291,7 +38651,7 @@ snapshots: foreground-child: 2.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 rimraf: 3.0.2 test-exclude: 6.0.0 v8-to-istanbul: 9.3.0 @@ -34365,7 +38725,7 @@ snapshots: http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.0.2 + normalize-url: 8.1.0 responselike: 3.0.0 cacheable-request@12.0.1: @@ -34375,13 +38735,16 @@ snapshots: http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.0.2 + normalize-url: 8.1.0 responselike: 3.0.0 - cacheable@1.10.3: + cacheable@2.3.0: dependencies: - hookified: 1.11.0 - keyv: 5.5.0 + '@cacheable/memory': 2.0.6 + '@cacheable/utils': 2.3.2 + hookified: 1.13.0 + keyv: 5.5.4 + qified: 0.5.2 call-bind-apply-helpers@1.0.2: dependencies: @@ -34445,36 +38808,31 @@ snapshots: caniuse-api@1.6.1: dependencies: browserslist: 1.7.7 - caniuse-db: 1.0.30001731 + caniuse-db: 1.0.30001757 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 caniuse-api@3.0.0: dependencies: - browserslist: 4.25.1 - caniuse-lite: 1.0.30001731 + browserslist: 4.28.0 + caniuse-lite: 1.0.30001757 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-db@1.0.30001731: {} + caniuse-db@1.0.30001757: {} - caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001757: {} - canvas@3.1.2: + canvas@3.2.0: dependencies: node-addon-api: 7.1.1 prebuild-install: 7.1.3 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a optional: true - capital-case@1.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - upper-case-first: 2.0.2 - capture-exit@2.0.0: dependencies: rsvp: 4.8.5 @@ -34485,6 +38843,8 @@ snapshots: case-sensitive-paths-webpack-plugin@2.4.0: {} + case@1.6.3: {} + caseless@0.12.0: {} ccount@1.1.0: {} @@ -34501,12 +38861,12 @@ snapshots: pathval: 1.1.1 type-detect: 4.1.0 - chai@5.2.1: + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.2.0 + loupe: 3.2.1 pathval: 2.0.1 chainsaw@0.1.0: @@ -34537,22 +38897,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.5.0: {} - - change-case@4.1.2: - dependencies: - camel-case: 4.1.2 - capital-case: 1.0.4 - constant-case: 3.0.4 - dot-case: 3.0.4 - header-case: 2.0.4 - no-case: 3.0.4 - param-case: 3.0.4 - pascal-case: 3.1.2 - path-case: 3.0.4 - sentence-case: 3.0.4 - snake-case: 3.0.4 - tslib: 2.8.1 + chalk@5.6.2: {} char-regex@1.0.2: {} @@ -34600,7 +38945,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.13.0 + undici: 7.16.0 whatwg-mimetype: 4.0.0 chokidar@1.7.0: @@ -34644,16 +38989,24 @@ snapshots: ci-info@3.9.0: {} + ci-info@4.3.1: {} + citty@0.1.6: dependencies: consola: 3.4.2 cjs-module-lexer@1.4.3: {} + cjs-module-lexer@2.1.1: {} + clap@1.2.3: dependencies: chalk: 1.1.3 + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + classnames@2.5.1: {} clean-css@4.2.4: @@ -34664,6 +39017,8 @@ snapshots: dependencies: source-map: 0.6.1 + clean-set@1.1.2: {} + clean-stack@2.2.0: {} clean-stack@4.2.0: @@ -34704,10 +39059,10 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 - cli-truncate@4.0.0: + cli-truncate@5.1.1: dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 + slice-ansi: 7.1.2 + string-width: 8.1.0 cli-width@2.2.1: {} @@ -34723,6 +39078,13 @@ snapshots: is-wsl: 3.1.0 is64bit: 2.0.0 + clipboardy@5.0.1: + dependencies: + execa: 9.6.1 + is-wayland: 0.1.0 + is-wsl: 3.1.0 + is64bit: 2.0.0 + cliui@3.2.0: dependencies: string-width: 1.0.2 @@ -34775,6 +39137,25 @@ snapshots: clsx@2.1.1: {} + cm6-theme-basic-light@0.2.0(@codemirror/language@6.11.3)(@codemirror/state@6.5.2)(@codemirror/view@6.38.8)(@lezer/highlight@1.2.3): + dependencies: + '@codemirror/language': 6.11.3 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.38.8 + '@lezer/highlight': 1.2.3 + + cmdk@1.1.1(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.2.0)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.4(@types/react-dom@18.2.0)(@types/react@18.2.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + co@4.6.0: {} coa@1.0.4: @@ -34787,29 +39168,29 @@ snapshots: code-point-at@1.1.0: {} - codemirror-graphql@2.2.4(@codemirror/language@6.11.2)(codemirror@5.65.19)(graphql@16.11.0): + codemirror-graphql@2.2.4(@codemirror/language@6.11.3)(codemirror@5.65.20)(graphql@16.12.0): dependencies: - '@codemirror/language': 6.11.2 + '@codemirror/language': 6.11.3 '@types/codemirror': 0.0.90 - codemirror: 5.65.19 - graphql: 16.11.0 - graphql-language-service: 5.5.0(graphql@16.11.0) + codemirror: 5.65.20 + graphql: 16.12.0 + graphql-language-service: 5.5.0(graphql@16.12.0) - codemirror@5.65.19: {} + codemirror@5.65.20: {} codemirror@6.0.2: dependencies: - '@codemirror/autocomplete': 6.18.6 - '@codemirror/commands': 6.8.1 - '@codemirror/language': 6.11.2 + '@codemirror/autocomplete': 6.19.1 + '@codemirror/commands': 6.10.0 + '@codemirror/language': 6.11.3 '@codemirror/lint': 6.8.5 '@codemirror/search': 6.5.11 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.38.1 + '@codemirror/view': 6.38.8 collapse-white-space@1.0.6: {} - collect-v8-coverage@1.0.2: {} + collect-v8-coverage@1.0.3: {} color-convert@1.9.3: dependencies: @@ -34819,18 +39200,23 @@ snapshots: dependencies: color-name: 1.1.4 + color-convert@3.1.3: + dependencies: + color-name: 2.1.0 + color-name@1.1.3: {} color-name@1.1.4: {} + color-name@2.1.0: {} + color-string@0.3.0: dependencies: color-name: 1.1.4 - color-string@1.9.1: + color-string@2.1.4: dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 + color-name: 2.1.0 color-support@1.1.3: {} @@ -34840,10 +39226,10 @@ snapshots: color-convert: 1.9.3 color-string: 0.3.0 - color@3.2.1: + color@5.0.3: dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 + color-convert: 3.1.3 + color-string: 2.1.4 colord@2.9.3: {} @@ -34861,11 +39247,6 @@ snapshots: colors@1.4.0: {} - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -34882,7 +39263,7 @@ snapshots: commander@13.1.0: {} - commander@14.0.0: {} + commander@14.0.2: {} commander@2.13.0: {} @@ -34900,6 +39281,8 @@ snapshots: commander@8.3.0: {} + commander@9.5.0: {} + common-path-prefix@3.0.0: {} commondir@1.0.1: {} @@ -34920,6 +39303,8 @@ snapshots: safe-buffer: 5.2.1 vary: 1.1.2 + compute-scroll-into-view@2.0.4: {} + concat-stream@1.6.2: dependencies: buffer-from: 1.1.2 @@ -34931,6 +39316,15 @@ snapshots: dependencies: source-map: 0.6.1 + concurrently@9.2.1: + dependencies: + chalk: 4.1.2 + rxjs: 7.8.2 + shell-quote: 1.8.3 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + confbox@0.1.8: {} configstore@3.1.5: @@ -34950,21 +39344,15 @@ snapshots: console-control-strings@1.1.0: {} - constant-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - upper-case: 2.0.2 - constants-browserify@1.0.0: {} + content-disposition@0.5.2: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 + content-disposition@1.0.1: {} content-type-parser@1.0.2: {} @@ -34979,12 +39367,10 @@ snapshots: convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} + cookie-signature@1.0.7: {} cookie-signature@1.2.2: {} - cookie@0.7.1: {} - cookie@0.7.2: {} copy-concurrently@1.0.5: @@ -35000,14 +39386,14 @@ snapshots: dependencies: toggle-selection: 1.0.6 - copy-webpack-plugin@13.0.0(webpack@5.101.0): + copy-webpack-plugin@13.0.1(webpack@5.103.0): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - tinyglobby: 0.2.14 - webpack: 5.101.0(webpack-cli@6.0.1) + tinyglobby: 0.2.15 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) copyfiles@2.4.1: dependencies: @@ -35019,15 +39405,15 @@ snapshots: untildify: 4.0.0 yargs: 16.2.0 - core-js-compat@3.45.0: + core-js-compat@3.47.0: dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 - core-js-pure@3.45.0: {} + core-js-pure@3.47.0: {} core-js@2.6.12: {} - core-js@3.45.0: {} + core-js@3.47.0: {} core-util-is@1.0.2: {} @@ -35050,7 +39436,7 @@ snapshots: cosmiconfig@2.2.2: dependencies: is-directory: 0.3.1 - js-yaml: 3.14.1 + js-yaml: 4.1.1 minimist: 1.2.8 object-assign: 4.1.1 os-homedir: 1.0.2 @@ -35076,7 +39462,7 @@ snapshots: cosmiconfig@8.3.6(typescript@5.8.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -35086,7 +39472,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: typescript: 5.8.3 @@ -35107,7 +39493,7 @@ snapshots: glob2base: 0.0.12 minimatch: 3.1.2 mkdirp: 0.5.6 - resolve: 1.6.0 + resolve: 1.22.11 safe-buffer: 5.2.1 shell-quote: 1.8.3 subarg: 1.0.0 @@ -35128,13 +39514,13 @@ snapshots: dependencies: capture-stack-trace: 1.0.2 - create-jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0): + create-jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -35143,9 +39529,12 @@ snapshots: - supports-color - ts-node - create-storybook@9.1.1: + create-require@1.1.1: {} + + create-storybook@8.6.14: dependencies: - semver: 7.7.2 + recast: 0.23.11 + semver: 7.7.3 crelt@1.0.6: {} @@ -35153,7 +39542,7 @@ snapshots: cron-parser@4.9.0: dependencies: - luxon: 3.7.1 + luxon: 3.7.2 cron-validator@1.3.1: {} @@ -35218,7 +39607,24 @@ snapshots: postcss-value-parser: 3.3.1 source-list-map: 2.0.1 - css-loader@3.6.0(webpack@5.101.0): + css-loader@3.6.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + camelcase: 5.3.1 + cssesc: 3.0.0 + icss-utils: 4.1.1 + loader-utils: 1.4.2 + normalize-path: 3.0.0 + postcss: 7.0.39 + postcss-modules-extract-imports: 2.0.0 + postcss-modules-local-by-default: 3.0.3 + postcss-modules-scope: 2.2.0 + postcss-modules-values: 3.0.0 + postcss-value-parser: 4.2.0 + schema-utils: 2.7.1 + semver: 6.3.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + + css-loader@3.6.0(webpack@5.103.0): dependencies: camelcase: 5.3.1 cssesc: 3.0.0 @@ -35233,9 +39639,9 @@ snapshots: postcss-value-parser: 4.2.0 schema-utils: 2.7.1 semver: 6.3.1 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) - css-loader@5.2.7(webpack@5.101.0): + css-loader@5.2.7(webpack@5.103.0): dependencies: icss-utils: 5.1.0(postcss@8.5.6) loader-utils: 2.0.4 @@ -35246,10 +39652,10 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 - semver: 7.7.2 - webpack: 5.101.0(webpack-cli@6.0.1) + semver: 7.7.3 + webpack: 5.103.0(webpack-cli@5.1.4) - css-loader@6.11.0(webpack@5.101.0): + css-loader@6.11.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -35258,11 +39664,11 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.6) postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 - semver: 7.7.2 + semver: 7.7.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) - css-loader@7.1.2(webpack@5.101.0): + css-loader@6.11.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -35271,9 +39677,35 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.6) postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 - semver: 7.7.2 + semver: 7.7.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + + css-loader@6.11.0(webpack@5.103.0): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) + postcss-value-parser: 4.2.0 + semver: 7.7.3 + optionalDependencies: + webpack: 5.103.0(webpack-cli@5.1.4) + + css-loader@7.1.2(webpack@5.103.0): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) + postcss-value-parser: 4.2.0 + semver: 7.7.3 + optionalDependencies: + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) css-select@4.3.0: dependencies: @@ -35418,7 +39850,7 @@ snapshots: dependencies: cssom: 0.3.8 - csstype@3.1.3: {} + csstype@3.2.3: {} cubic2quad@1.2.1: {} @@ -35498,7 +39930,7 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.4.1(supports-color@8.1.1): + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: @@ -35533,7 +39965,7 @@ snapshots: dedent@0.7.0: {} - dedent@1.6.0(babel-plugin-macros@3.1.0): + dedent@1.7.0(babel-plugin-macros@3.1.0): optionalDependencies: babel-plugin-macros: 3.1.0 @@ -35582,12 +40014,12 @@ snapshots: bplist-parser: 0.2.0 untildify: 4.0.0 - default-browser-id@5.0.0: {} + default-browser-id@5.0.1: {} - default-browser@5.2.1: + default-browser@5.4.0: dependencies: bundle-name: 4.1.0 - default-browser-id: 5.0.0 + default-browser-id: 5.0.1 default-require-extensions@1.0.0: dependencies: @@ -35626,7 +40058,7 @@ snapshots: del-cli@6.0.0: dependencies: - del: 8.0.0 + del: 8.0.1 meow: 13.2.0 del@2.2.2: @@ -35661,13 +40093,14 @@ snapshots: rimraf: 3.0.2 slash: 4.0.0 - del@8.0.0: + del@8.0.1: dependencies: globby: 14.1.0 is-glob: 4.0.3 is-path-cwd: 3.0.0 is-path-inside: 4.0.0 - p-map: 7.0.3 + p-map: 7.0.4 + presentable-error: 0.0.1 slash: 5.1.0 delayed-stream@1.0.0: {} @@ -35695,7 +40128,7 @@ snapshots: detect-libc@1.0.3: optional: true - detect-libc@2.0.4: {} + detect-libc@2.1.2: {} detect-newline@3.1.0: {} @@ -35715,7 +40148,7 @@ snapshots: detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -35723,7 +40156,7 @@ snapshots: dependencies: dequal: 2.0.3 - dexie@4.0.11: {} + dexie@4.2.1: {} diagnostic-channel-publishers@0.3.5(diagnostic-channel@0.2.0): dependencies: @@ -35856,6 +40289,15 @@ snapshots: dotenv@8.6.0: {} + downshift@7.6.2(react@18.2.0): + dependencies: + '@babel/runtime': 7.28.4 + compute-scroll-into-view: 2.0.4 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 17.0.2 + tslib: 2.8.1 + drange@1.1.1: {} dunder-proto@1.0.1: @@ -35890,9 +40332,9 @@ snapshots: dependencies: safe-buffer: 5.2.1 - editions@6.21.0: + editions@6.22.0: dependencies: - version-range: 4.14.0 + version-range: 4.15.0 ee-first@1.1.1: {} @@ -35900,7 +40342,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.198: {} + electron-to-chromium@1.5.263: {} email-addresses@5.0.0: {} @@ -35910,7 +40352,7 @@ snapshots: emittery@0.13.1: {} - emoji-regex@10.4.0: {} + emoji-regex@10.6.0: {} emoji-regex@7.0.3: {} @@ -35958,7 +40400,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.3.0 enquirer@2.4.1: dependencies: @@ -35975,7 +40417,7 @@ snapshots: env-paths@2.2.1: {} - envinfo@7.14.0: {} + envinfo@7.21.0: {} environment@1.1.0: {} @@ -35987,7 +40429,7 @@ snapshots: dependencies: prr: 1.0.1 - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -36112,7 +40554,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.39.8: {} + es-toolkit@1.42.0: {} es5-ext@0.10.64: dependencies: @@ -36131,8 +40573,6 @@ snapshots: es6-promise@4.2.8: {} - es6-promisify@6.1.1: {} - es6-shim@0.35.8: {} es6-symbol@3.1.4: @@ -36149,44 +40589,46 @@ snapshots: esbuild-plugin-alias@0.2.1: {} - esbuild-register@3.6.0(esbuild@0.25.8): - dependencies: - debug: 4.4.1(supports-color@8.1.1) - esbuild: 0.25.8 - transitivePeerDependencies: - - supports-color - - esbuild@0.25.8: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 + esbuild-register@3.6.0(esbuild@0.25.12): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + esbuild: 0.25.12 + transitivePeerDependencies: + - supports-color + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 escalade@3.2.0: {} + escape-carriage@1.3.1: {} + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -36245,7 +40687,7 @@ snapshots: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.10 + resolve: 1.22.11 eslint-module-utils@2.12.1(eslint@6.8.0): dependencies: @@ -36287,7 +40729,7 @@ snapshots: array-includes: 3.1.9 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.10.3 + axe-core: 4.11.0 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -36320,21 +40762,21 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-react-hooks@5.2.0(eslint@9.26.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.26.0(jiti@2.6.1)): dependencies: - eslint: 9.26.0(jiti@2.5.1) + eslint: 9.26.0(jiti@2.6.1) - eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.6.1)): dependencies: - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) - eslint-plugin-react-refresh@0.4.20(eslint@8.57.1): + eslint-plugin-react-refresh@0.4.24(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-plugin-react-refresh@0.4.20(eslint@9.27.0(jiti@2.5.1)): + eslint-plugin-react-refresh@0.4.24(eslint@9.27.0(jiti@2.6.1)): dependencies: - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) eslint-plugin-react@7.37.5(eslint@6.8.0): dependencies: @@ -36380,26 +40822,28 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@9.1.1(eslint@8.57.1)(storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3))(typescript@5.8.3): + eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.39.0(eslint@8.57.1)(typescript@5.8.3) + '@storybook/csf': 0.0.1 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 - storybook: 9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3) + requireindex: 1.2.0 + ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.5.1)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.6.1)): dependencies: - eslint: 9.26.0(jiti@2.5.1) + eslint: 9.26.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3) - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1)): dependencies: - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3) eslint-scope@5.1.1: dependencies: @@ -36443,7 +40887,7 @@ snapshots: ajv: 6.12.6 chalk: 2.4.2 cross-spawn: 6.0.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 eslint-scope: 5.1.1 eslint-utils: 1.4.3 @@ -36460,7 +40904,7 @@ snapshots: imurmurhash: 0.1.4 inquirer: 7.3.3 is-glob: 4.0.3 - js-yaml: 3.14.1 + js-yaml: 4.1.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.3.0 lodash: 4.17.21 @@ -36481,8 +40925,8 @@ snapshots: eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.2 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 @@ -36492,7 +40936,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -36510,7 +40954,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 + js-yaml: 4.1.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -36522,26 +40966,26 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.26.0(jiti@2.5.1): + eslint@9.26.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.5.1)) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.26.0(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.20.1 '@eslint/config-helpers': 0.2.3 '@eslint/core': 0.13.0 - '@eslint/eslintrc': 3.3.1 + '@eslint/eslintrc': 3.3.3 '@eslint/js': 9.26.0 - '@eslint/plugin-kit': 0.3.4 - '@humanfs/node': 0.16.6 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@modelcontextprotocol/sdk': 1.17.1 + '@modelcontextprotocol/sdk': 1.24.0 '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -36562,21 +41006,22 @@ snapshots: optionator: 0.9.4 zod: 3.25.76 optionalDependencies: - jiti: 2.5.1 + jiti: 2.6.1 transitivePeerDependencies: + - '@cfworker/json-schema' - supports-color - eslint@9.27.0(jiti@2.5.1): + eslint@9.27.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.5.1)) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.27.0(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.20.1 '@eslint/config-helpers': 0.2.3 '@eslint/core': 0.14.0 - '@eslint/eslintrc': 3.3.1 + '@eslint/eslintrc': 3.3.3 '@eslint/js': 9.27.0 - '@eslint/plugin-kit': 0.3.4 - '@humanfs/node': 0.16.6 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 @@ -36584,7 +41029,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -36604,7 +41049,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.5.1 + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -36653,14 +41098,19 @@ snapshots: estree-to-babel@3.2.1: dependencies: - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 c8: 7.14.0 transitivePeerDependencies: - supports-color estree-util-is-identifier-name@3.0.0: {} + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + estree-walker@0.2.1: {} estree-walker@0.6.1: {} @@ -36690,7 +41140,9 @@ snapshots: events-universal@1.0.1: dependencies: - bare-events: 2.7.0 + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller events@3.3.0: {} @@ -36779,8 +41231,25 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + exenv-es6@1.1.1: {} + exit-x@0.2.2: {} + exit@0.1.2: {} expand-template@2.0.3: {} @@ -36815,63 +41284,73 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - exponential-backoff@3.1.2: {} + expect@30.2.0: + dependencies: + '@jest/expect-utils': 30.2.0 + '@jest/get-type': 30.1.0 + jest-matcher-utils: 30.2.0 + jest-message-util: 30.2.0 + jest-mock: 30.2.0 + jest-util: 30.2.0 + + exponential-backoff@3.1.3: {} - express-rate-limit@7.5.1(express@5.1.0): + express-rate-limit@7.5.1(express@5.2.1): dependencies: - express: 5.1.0 + express: 5.2.1 - express@4.21.2: + express@4.22.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.3 + body-parser: 1.20.4 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 + cookie: 0.7.2 + cookie-signature: 1.0.7 debug: 2.6.9 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 + finalhandler: 1.3.2 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.13.0 + qs: 6.14.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.0 + send: 0.19.1 serve-static: 1.16.2 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 - express@5.1.0: + express@5.2.1: dependencies: accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 + body-parser: 2.2.1 + content-disposition: 1.0.1 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) + depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.0 + finalhandler: 2.1.1 fresh: 2.0.0 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 2.0.0 - mime-types: 3.0.1 + mime-types: 3.0.2 on-finished: 2.4.1 once: 1.4.0 parseurl: 1.3.3 @@ -36910,12 +41389,12 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 - extract-text-webpack-plugin@3.0.2(webpack@5.101.0): + extract-text-webpack-plugin@3.0.2(webpack@5.103.0): dependencies: async: 2.6.4 loader-utils: 1.4.2 schema-utils: 0.3.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) webpack-sources: 1.4.3 extract-zip@1.7.0: @@ -36927,19 +41406,19 @@ snapshots: extsprintf@1.3.0: {} - fantasticon@1.2.3: + fantasticon@3.0.0: dependencies: - change-case: 4.1.2 + case: 1.6.3 cli-color: 2.0.4 - commander: 7.2.0 - glob: 7.2.3 + commander: 12.1.0 + glob: 10.5.0 handlebars: 4.7.8 slugify: 1.6.6 svg2ttf: 6.0.3 - svgicons2svgfont: 10.0.6 - ttf2eot: 2.0.0 + svgicons2svgfont: 12.0.0 + ttf2eot: 3.1.0 ttf2woff: 3.0.0 - ttf2woff2: 4.0.5 + ttf2woff2: 5.0.0 transitivePeerDependencies: - supports-color @@ -36978,7 +41457,7 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fast-xml-parser@5.2.5: dependencies: @@ -36996,6 +41475,10 @@ snapshots: dependencies: format: 0.2.2 + fault@2.0.1: + dependencies: + format: 0.2.2 + faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 @@ -37024,15 +41507,19 @@ snapshots: object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 1.0.40 + ua-parser-js: 1.0.41 transitivePeerDependencies: - encoding + fd-package-json@1.2.0: + dependencies: + walk-up-path: 3.0.1 + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - fdir@6.4.6(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -37053,9 +41540,13 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@10.1.3: + figures@6.1.0: dependencies: - flat-cache: 6.1.12 + is-unicode-supported: 2.1.0 + + file-entry-cache@11.1.1: + dependencies: + flat-cache: 6.1.19 file-entry-cache@5.0.1: dependencies: @@ -37075,17 +41566,23 @@ snapshots: minimatch: 3.1.2 proper-lockfile: 1.2.0 - file-loader@1.1.5(webpack@5.101.0): + file-loader@1.1.5(webpack@5.103.0): dependencies: loader-utils: 1.4.2 schema-utils: 0.3.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + file-loader@6.2.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - file-loader@6.2.0(webpack@5.101.0): + file-loader@6.2.0(webpack@5.103.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) file-system-cache@1.1.0: dependencies: @@ -37139,19 +41636,19 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.1: + finalhandler@1.3.2: dependencies: debug: 2.6.9 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 unpipe: 1.0.0 - finalhandler@2.1.0: + finalhandler@2.1.1: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -37244,11 +41741,11 @@ snapshots: flatted: 3.3.3 keyv: 4.5.4 - flat-cache@6.1.12: + flat-cache@6.1.19: dependencies: - cacheable: 1.10.3 + cacheable: 2.3.0 flatted: 3.3.3 - hookified: 1.11.0 + hookified: 1.13.0 flat@5.0.2: {} @@ -37258,7 +41755,7 @@ snapshots: flatten@1.0.3: {} - flow-parser@0.278.0: {} + flow-parser@0.291.0: {} flush-write-stream@1.1.1: dependencies: @@ -37293,7 +41790,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@0.2.10(typescript@5.8.3)(webpack@5.101.0): + fork-ts-checker-webpack-plugin@0.2.10(typescript@5.8.3)(webpack@5.103.0): dependencies: babel-code-frame: 6.26.0 chalk: 1.1.3 @@ -37304,7 +41801,7 @@ snapshots: lodash.startswith: 4.2.1 minimatch: 3.1.2 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) fork-ts-checker-webpack-plugin@4.1.6: dependencies: @@ -37316,7 +41813,7 @@ snapshots: tapable: 1.1.3 worker-rpc: 0.1.1 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.26.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.26.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -37329,14 +41826,14 @@ snapshots: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.2 + semver: 7.7.3 tapable: 1.1.3 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: - eslint: 9.26.0(jiti@2.5.1) + eslint: 9.26.0(jiti@2.6.1) - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@4.9.5)(webpack@5.101.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@4.9.5)(webpack@5.103.0): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -37349,14 +41846,14 @@ snapshots: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.2 + semver: 7.7.3 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) optionalDependencies: - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3)(webpack@5.101.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -37369,14 +41866,34 @@ snapshots: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.2 + semver: 7.7.3 tapable: 1.1.3 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) optionalDependencies: - eslint: 9.27.0(jiti@2.5.1) + eslint: 9.27.0(jiti@2.6.1) - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.101.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.27.0(jiti@2.6.1))(typescript@5.8.3)(webpack@5.103.0): + dependencies: + '@babel/code-frame': 7.27.1 + '@types/json-schema': 7.0.15 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 6.0.0 + deepmerge: 4.3.1 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.5.3 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.7.3 + tapable: 1.1.3 + typescript: 5.8.3 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + optionalDependencies: + eslint: 9.27.0(jiti@2.6.1) + + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -37388,12 +41905,46 @@ snapshots: minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.2 - tapable: 2.2.2 + semver: 7.7.3 + tapable: 2.3.0 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.101.0): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + '@babel/code-frame': 7.27.1 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.7.3 + tapable: 2.3.0 + typescript: 5.8.3 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.103.0): + dependencies: + '@babel/code-frame': 7.27.1 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.7.3 + tapable: 2.3.0 + typescript: 5.8.3 + webpack: 5.103.0(webpack-cli@5.1.4) + + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.103.0): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -37405,16 +41956,16 @@ snapshots: minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.7.2 - tapable: 2.2.2 + semver: 7.7.3 + tapable: 2.3.0 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) form-data-encoder@2.1.4: {} form-data-encoder@4.1.0: {} - form-data@4.0.4: + form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -37430,7 +41981,7 @@ snapshots: forwarded@0.2.0: {} - fraction.js@4.3.7: {} + fraction.js@5.3.4: {} framer-motion@6.5.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: @@ -37469,25 +42020,25 @@ snapshots: fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-extra@11.1.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@11.3.1: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-extra@3.0.1: @@ -37512,7 +42063,7 @@ snapshots: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-minipass@2.1.0: @@ -37533,7 +42084,7 @@ snapshots: fsevents@1.2.13: dependencies: bindings: 1.5.0 - nan: 2.23.0 + nan: 2.23.1 optional: true fsevents@2.3.2: @@ -37598,19 +42149,19 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + generator-function@2.0.1: {} + generic-names@4.0.0: dependencies: loader-utils: 3.3.1 gensync@1.0.0-beta.2: {} - geometry-interfaces@1.1.4: {} - get-caller-file@1.0.3: {} get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} + get-east-asian-width@1.4.0: {} get-func-name@2.0.2: {} @@ -37686,7 +42237,7 @@ snapshots: email-addresses: 5.0.0 filenamify: 4.3.0 find-cache-dir: 3.3.2 - fs-extra: 11.3.1 + fs-extra: 11.3.2 globby: 11.1.0 giget@1.2.5: @@ -37725,6 +42276,10 @@ snapshots: '@types/glob': 8.1.0 glob: 7.2.3 + glob-to-regex.js@1.2.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + glob-to-regexp@0.3.0: {} glob-to-regexp@0.4.1: {} @@ -37733,7 +42288,7 @@ snapshots: dependencies: find-index: 0.1.1 - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 @@ -37742,14 +42297,14 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@11.0.3: + glob@11.1.0: dependencies: foreground-child: 3.3.1 jackspeak: 4.1.1 - minimatch: 10.0.3 + minimatch: 10.1.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 + path-scurry: 2.0.1 glob@5.0.15: dependencies: @@ -37806,7 +42361,7 @@ snapshots: global@4.4.0: dependencies: - min-document: 2.19.0 + min-document: 2.19.2 process: 0.11.10 globals@12.4.0: @@ -37896,7 +42451,7 @@ snapshots: got@14.4.7: dependencies: - '@sindresorhus/is': 7.0.2 + '@sindresorhus/is': 7.1.1 '@szmarczak/http-timer': 5.0.1 cacheable-lookup: 7.0.0 cacheable-request: 12.0.1 @@ -37926,16 +42481,16 @@ snapshots: graphemer@1.4.0: {} - graphiql-explorer@0.9.0(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + graphiql-explorer@0.9.0(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - graphql: 16.11.0 + graphql: 16.12.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - graphiql@3.7.0(@codemirror/language@6.11.2)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + graphiql@3.7.0(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@graphiql/react': 0.26.2(@codemirror/language@6.11.2)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.11.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - graphql: 16.11.0 + '@graphiql/react': 0.26.2(@codemirror/language@6.11.3)(@types/node@22.15.35)(@types/react-dom@18.2.0)(@types/react@18.2.0)(graphql@16.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + graphql: 16.12.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -37949,14 +42504,14 @@ snapshots: dependencies: lodash: 4.17.21 - graphql-language-service@5.5.0(graphql@16.11.0): + graphql-language-service@5.5.0(graphql@16.12.0): dependencies: debounce-promise: 3.1.2 - graphql: 16.11.0 + graphql: 16.12.0 nullthrows: 1.1.1 vscode-languageserver-types: 3.17.5 - graphql@16.11.0: {} + graphql@16.12.0: {} growly@1.3.0: {} @@ -38029,6 +42584,10 @@ snapshots: has@1.0.4: {} + hashery@1.3.0: + dependencies: + hookified: 1.13.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -38118,7 +42677,7 @@ snapshots: hast-util-from-parse5: 8.0.3 hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 parse5: 7.3.0 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 @@ -38140,7 +42699,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.17 + style-to-js: 1.1.21 unist-util-position: 5.0.0 vfile-message: 4.0.3 transitivePeerDependencies: @@ -38203,11 +42762,6 @@ snapshots: he@1.2.0: {} - header-case@2.0.4: - dependencies: - capital-case: 1.0.4 - tslib: 2.8.1 - heap@0.2.5: {} hey-listen@1.0.8: {} @@ -38231,7 +42785,7 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hookified@1.11.0: {} + hookified@1.13.0: {} hosted-git-info@2.8.9: {} @@ -38284,7 +42838,7 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.43.1 + terser: 5.44.1 html-minifier@3.5.21: dependencies: @@ -38308,7 +42862,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@2.29.0(webpack@5.101.0): + html-webpack-plugin@2.29.0(webpack@5.103.0): dependencies: bluebird: 3.7.2 html-minifier: 3.5.21 @@ -38316,9 +42870,22 @@ snapshots: lodash: 4.17.21 pretty-error: 2.1.2 toposort: 1.0.7 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + html-webpack-plugin@4.5.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + '@types/html-minifier-terser': 5.1.2 + '@types/tapable': 1.0.12 + '@types/webpack': 4.41.40 + html-minifier-terser: 5.1.1 + loader-utils: 1.4.2 + lodash: 4.17.21 + pretty-error: 2.1.2 + tapable: 1.1.3 + util.promisify: 1.0.0 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - html-webpack-plugin@4.5.2(webpack@5.101.0): + html-webpack-plugin@4.5.2(webpack@5.103.0): dependencies: '@types/html-minifier-terser': 5.1.2 '@types/tapable': 1.0.12 @@ -38329,17 +42896,37 @@ snapshots: pretty-error: 2.1.2 tapable: 1.1.3 util.promisify: 1.0.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + html-webpack-plugin@5.6.5(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.3.0 + optionalDependencies: + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) + + html-webpack-plugin@5.6.5(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.3.0 + optionalDependencies: + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - html-webpack-plugin@5.6.3(webpack@5.101.0): + html-webpack-plugin@5.6.5(webpack@5.103.0): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.2.2 + tapable: 2.3.0 optionalDependencies: - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) htmlparser2@10.0.0: dependencies: @@ -38374,13 +42961,21 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + http-parser-js@0.5.10: {} http-proxy-agent@4.0.1: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -38388,26 +42983,26 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.9(@types/express@4.17.23): + http-proxy-middleware@2.0.9(@types/express@4.17.25): dependencies: - '@types/http-proxy': 1.17.16 + '@types/http-proxy': 1.17.17 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 optionalDependencies: - '@types/express': 4.17.23 + '@types/express': 4.17.25 transitivePeerDependencies: - debug @@ -38430,7 +43025,7 @@ snapshots: mime: 1.6.0 minimist: 1.2.8 opener: 1.5.2 - portfinder: 1.0.37 + portfinder: 1.0.38 secure-compare: 3.0.1 union: 0.5.0 url-join: 4.0.1 @@ -38452,21 +43047,21 @@ snapshots: https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -38476,7 +43071,9 @@ snapshots: human-signals@5.0.0: {} - humanize-duration@3.33.0: {} + human-signals@8.0.1: {} + + humanize-duration@3.33.1: {} humanize-ms@1.2.1: dependencies: @@ -38501,6 +43098,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + icss-replace-symbols@1.1.0: {} icss-utils@2.1.0: @@ -38533,7 +43134,7 @@ snapshots: immutable@3.8.2: {} - immutable@5.1.3: {} + immutable@5.1.4: {} import-cwd@3.0.0: dependencies: @@ -38565,6 +43166,8 @@ snapshots: indent-string@5.0.0: {} + index-to-position@1.2.0: {} + indexes-of@1.0.1: {} infer-owner@1.0.4: {} @@ -38582,7 +43185,7 @@ snapshots: inline-style-parser@0.1.1: {} - inline-style-parser@0.2.4: {} + inline-style-parser@0.2.7: {} inquirer@3.3.0: dependencies: @@ -38629,11 +43232,13 @@ snapshots: interpret@3.1.1: {} - intl-messageformat@10.7.16: + intersection-observer@0.10.0: {} + + intl-messageformat@10.7.18: dependencies: - '@formatjs/ecma402-abstract': 2.3.4 + '@formatjs/ecma402-abstract': 2.3.6 '@formatjs/fast-memoize': 2.2.7 - '@formatjs/icu-messageformat-parser': 2.11.2 + '@formatjs/icu-messageformat-parser': 2.11.4 tslib: 2.8.1 invariant@2.2.4: @@ -38642,10 +43247,7 @@ snapshots: invert-kv@1.0.0: {} - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.1.0: {} ip-regex@2.1.0: {} @@ -38655,7 +43257,7 @@ snapshots: ipaddr.js@1.9.1: {} - ipaddr.js@2.2.0: {} + ipaddr.js@2.3.0: {} is-absolute-url@2.1.0: {} @@ -38688,8 +43290,6 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} - is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -38785,11 +43385,9 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.0.0: + is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.4.0 is-function@1.0.2: {} @@ -38797,9 +43395,10 @@ snapshots: is-generator-fn@2.1.0: {} - is-generator-function@1.1.0: + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 + generator-function: 2.0.1 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -38843,7 +43442,7 @@ snapshots: is-negative-zero@2.0.3: {} - is-network-error@1.1.0: {} + is-network-error@1.3.0: {} is-npm@1.0.0: {} @@ -38960,6 +43559,8 @@ snapshots: is-utf8@0.2.1: {} + is-wayland@0.1.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -39015,7 +43616,7 @@ snapshots: isomorphic-unfetch@3.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.6.13(encoding@0.1.13) unfetch: 4.2.0 transitivePeerDependencies: - encoding @@ -39036,7 +43637,7 @@ snapshots: istanbul-lib-report: 1.1.5 istanbul-lib-source-maps: 1.2.6 istanbul-reports: 1.5.1 - js-yaml: 3.14.1 + js-yaml: 4.1.1 mkdirp: 0.5.6 once: 1.4.0 @@ -39070,7 +43671,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.27.7 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -39080,10 +43681,10 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.7 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -39110,17 +43711,25 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + istanbul-reports@1.5.1: dependencies: handlebars: 4.7.8 - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -39133,7 +43742,7 @@ snapshots: esprima: 2.7.3 glob: 5.0.15 handlebars: 4.7.8 - js-yaml: 3.14.1 + js-yaml: 4.1.1 mkdirp: 0.5.6 nopt: 3.0.6 once: 1.4.0 @@ -39145,7 +43754,7 @@ snapshots: istextorbinary@9.5.0: dependencies: binaryextensions: 6.11.0 - editions: 6.21.0 + editions: 6.22.0 textextensions: 6.11.0 iterate-iterator@1.0.2: {} @@ -39194,6 +43803,12 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 + jest-changed-files@30.2.0: + dependencies: + execa: 5.1.1 + jest-util: 30.2.0 + p-limit: 3.1.0 + jest-circus@29.7.0(babel-plugin-macros@3.1.0): dependencies: '@jest/environment': 29.7.0 @@ -39203,7 +43818,7 @@ snapshots: '@types/node': 22.15.35 chalk: 4.1.2 co: 4.6.0 - dedent: 1.6.0(babel-plugin-macros@3.1.0) + dedent: 1.7.0(babel-plugin-macros@3.1.0) is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -39220,6 +43835,32 @@ snapshots: - babel-plugin-macros - supports-color + jest-circus@30.2.0(babel-plugin-macros@3.1.0): + dependencies: + '@jest/environment': 30.2.0 + '@jest/expect': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.7.0(babel-plugin-macros@3.1.0) + is-generator-fn: 2.1.0 + jest-each: 30.2.0 + jest-matcher-utils: 30.2.0 + jest-message-util: 30.2.0 + jest-runtime: 30.2.0 + jest-snapshot: 30.2.0 + jest-util: 30.2.0 + p-limit: 3.1.0 + pretty-format: 30.2.0 + pure-rand: 7.0.1 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + jest-cli@20.0.4: dependencies: ansi-escapes: 1.4.0 @@ -39275,16 +43916,16 @@ snapshots: - supports-color - utf-8-validate - jest-cli@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0): + jest-cli@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + create-jest: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -39294,6 +43935,25 @@ snapshots: - supports-color - ts-node + jest-cli@30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): + dependencies: + '@jest/core': 30.2.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) + '@jest/test-result': 30.2.0 + '@jest/types': 30.2.0 + chalk: 4.1.2 + exit-x: 0.2.2 + import-local: 3.2.0 + jest-config: 30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) + jest-util: 30.2.0 + jest-validate: 30.2.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - esbuild-register + - supports-color + - ts-node + jest-config@20.0.4: dependencies: chalk: 1.1.3 @@ -39348,7 +44008,7 @@ snapshots: - supports-color - utf-8-validate - jest-config@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0): + jest-config@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): dependencies: '@babel/core': 7.27.7 '@jest/test-sequencer': 29.7.0 @@ -39374,6 +44034,41 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 22.15.35 + ts-node: 10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): + dependencies: + '@babel/core': 7.27.7 + '@jest/get-type': 30.1.0 + '@jest/pattern': 30.0.1 + '@jest/test-sequencer': 30.2.0 + '@jest/types': 30.2.0 + babel-jest: 30.2.0(@babel/core@7.27.7) + chalk: 4.1.2 + ci-info: 4.3.1 + deepmerge: 4.3.1 + glob: 10.5.0 + graceful-fs: 4.2.11 + jest-circus: 30.2.0(babel-plugin-macros@3.1.0) + jest-docblock: 30.2.0 + jest-environment-node: 30.2.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.2.0 + jest-runner: 30.2.0 + jest-util: 30.2.0 + jest-validate: 30.2.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 30.2.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.15.35 + esbuild-register: 3.6.0(esbuild@0.25.12) + ts-node: 10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -39406,6 +44101,13 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 + jest-diff@30.2.0: + dependencies: + '@jest/diff-sequences': 30.0.1 + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + pretty-format: 30.2.0 + jest-docblock@20.0.3: {} jest-docblock@25.3.0: @@ -39416,6 +44118,10 @@ snapshots: dependencies: detect-newline: 3.1.0 + jest-docblock@30.2.0: + dependencies: + detect-newline: 3.1.0 + jest-each@25.5.0: dependencies: '@jest/types': 25.5.0 @@ -39432,6 +44138,14 @@ snapshots: jest-util: 29.7.0 pretty-format: 29.7.0 + jest-each@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + '@jest/types': 30.2.0 + chalk: 4.1.2 + jest-util: 30.2.0 + pretty-format: 30.2.0 + jest-environment-jsdom@20.0.3: dependencies: jest-mock: 20.0.3 @@ -39500,6 +44214,16 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 + jest-environment-node@30.2.0: + dependencies: + '@jest/environment': 30.2.0 + '@jest/fake-timers': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + jest-mock: 30.2.0 + jest-util: 30.2.0 + jest-validate: 30.2.0 + jest-get-type@22.4.3: {} jest-get-type@25.2.6: {} @@ -39566,6 +44290,21 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + jest-haste-map@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 30.0.1 + jest-util: 30.2.0 + jest-worker: 30.2.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + jest-jasmine2@20.0.4: dependencies: chalk: 1.1.3 @@ -39594,7 +44333,7 @@ snapshots: jest-jasmine2@25.5.4: dependencies: - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 '@jest/environment': 25.5.0 '@jest/source-map': 25.5.0 '@jest/test-result': 25.5.0 @@ -39627,6 +44366,11 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 + jest-leak-detector@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + pretty-format: 30.2.0 + jest-matcher-utils@20.0.3: dependencies: chalk: 1.1.3 @@ -39652,6 +44396,13 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 + jest-matcher-utils@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + jest-diff: 30.2.0 + pretty-format: 30.2.0 + jest-matchers@20.0.3: dependencies: jest-diff: 20.0.3 @@ -39696,6 +44447,18 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 + jest-message-util@30.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 30.2.0 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 30.2.0 + slash: 3.0.0 + stack-utils: 2.0.6 + jest-mock@20.0.3: {} jest-mock@22.4.3: {} @@ -39710,6 +44473,12 @@ snapshots: '@types/node': 22.15.35 jest-util: 29.7.0 + jest-mock@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + jest-util: 30.2.0 + jest-pnp-resolver@1.2.3(jest-resolve@25.5.1): optionalDependencies: jest-resolve: 25.5.1 @@ -39718,6 +44487,10 @@ snapshots: optionalDependencies: jest-resolve: 29.7.0 + jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): + optionalDependencies: + jest-resolve: 30.2.0 + jest-regex-util@20.0.3: {} jest-regex-util@22.4.3: {} @@ -39728,6 +44501,8 @@ snapshots: jest-regex-util@29.6.3: {} + jest-regex-util@30.0.1: {} + jest-resolve-dependencies@20.0.3: dependencies: jest-regex-util: 20.0.3 @@ -39745,11 +44520,18 @@ snapshots: transitivePeerDependencies: - supports-color + jest-resolve-dependencies@30.2.0: + dependencies: + jest-regex-util: 30.0.1 + jest-snapshot: 30.2.0 + transitivePeerDependencies: + - supports-color + jest-resolve@20.0.4: dependencies: browser-resolve: 1.11.3 is-builtin-module: 1.0.0 - resolve: 1.6.0 + resolve: 1.22.11 jest-resolve@22.4.3: dependencies: @@ -39765,7 +44547,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@25.5.1) read-pkg-up: 7.0.1 realpath-native: 2.0.0 - resolve: 1.22.10 + resolve: 1.22.11 slash: 3.0.0 jest-resolve@29.7.0: @@ -39776,10 +44558,21 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.10 + resolve: 1.22.11 resolve.exports: 2.0.3 slash: 3.0.0 + jest-resolve@30.2.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0) + jest-util: 30.2.0 + jest-validate: 30.2.0 + slash: 3.0.0 + unrs-resolver: 1.11.1 + jest-runner@25.5.4: dependencies: '@jest/console': 25.5.0 @@ -39833,6 +44626,33 @@ snapshots: transitivePeerDependencies: - supports-color + jest-runner@30.2.0: + dependencies: + '@jest/console': 30.2.0 + '@jest/environment': 30.2.0 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + chalk: 4.1.2 + emittery: 0.13.1 + exit-x: 0.2.2 + graceful-fs: 4.2.11 + jest-docblock: 30.2.0 + jest-environment-node: 30.2.0 + jest-haste-map: 30.2.0 + jest-leak-detector: 30.2.0 + jest-message-util: 30.2.0 + jest-resolve: 30.2.0 + jest-runtime: 30.2.0 + jest-util: 30.2.0 + jest-watcher: 30.2.0 + jest-worker: 30.2.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + jest-runtime@20.0.4: dependencies: babel-core: 6.26.3 @@ -39860,9 +44680,9 @@ snapshots: '@jest/test-result': 25.5.0 '@jest/transform': 25.5.1 '@jest/types': 25.5.0 - '@types/yargs': 15.0.19 + '@types/yargs': 15.0.20 chalk: 3.0.0 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -39897,7 +44717,7 @@ snapshots: '@types/node': 22.15.35 chalk: 4.1.2 cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.2 + collect-v8-coverage: 1.0.3 glob: 7.2.3 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 @@ -39912,6 +44732,33 @@ snapshots: transitivePeerDependencies: - supports-color + jest-runtime@30.2.0: + dependencies: + '@jest/environment': 30.2.0 + '@jest/fake-timers': 30.2.0 + '@jest/globals': 30.2.0 + '@jest/source-map': 30.0.1 + '@jest/test-result': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + chalk: 4.1.2 + cjs-module-lexer: 2.1.1 + collect-v8-coverage: 1.0.3 + glob: 10.5.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.2.0 + jest-message-util: 30.2.0 + jest-mock: 30.2.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.2.0 + jest-snapshot: 30.2.0 + jest-util: 30.2.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + jest-serializer@25.5.0: dependencies: graceful-fs: 4.2.11 @@ -39941,7 +44788,7 @@ snapshots: jest-snapshot@25.5.1: dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@jest/types': 25.5.0 '@types/prettier': 1.19.1 chalk: 3.0.0 @@ -39960,10 +44807,10 @@ snapshots: jest-snapshot@29.7.0: dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/types': 7.28.2 + '@babel/types': 7.28.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -39978,7 +44825,33 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + jest-snapshot@30.2.0: + dependencies: + '@babel/core': 7.27.7 + '@babel/generator': 7.28.5 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7) + '@babel/types': 7.28.5 + '@jest/expect-utils': 30.2.0 + '@jest/get-type': 30.1.0 + '@jest/snapshot-utils': 30.2.0 + '@jest/transform': 30.2.0 + '@jest/types': 30.2.0 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) + chalk: 4.1.2 + expect: 30.2.0 + graceful-fs: 4.2.11 + jest-diff: 30.2.0 + jest-matcher-utils: 30.2.0 + jest-message-util: 30.2.0 + jest-util: 30.2.0 + pretty-format: 30.2.0 + semver: 7.7.3 + synckit: 0.11.11 transitivePeerDependencies: - supports-color @@ -40028,6 +44901,15 @@ snapshots: graceful-fs: 4.2.11 picomatch: 2.3.1 + jest-util@30.2.0: + dependencies: + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + chalk: 4.1.2 + ci-info: 4.3.1 + graceful-fs: 4.2.11 + picomatch: 4.0.3 + jest-validate@20.0.3: dependencies: chalk: 1.1.3 @@ -40061,6 +44943,15 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 + jest-validate@30.2.0: + dependencies: + '@jest/get-type': 30.1.0 + '@jest/types': 30.2.0 + camelcase: 6.3.0 + chalk: 4.1.2 + leven: 3.1.0 + pretty-format: 30.2.0 + jest-watch-typeahead@0.5.0: dependencies: ansi-escapes: 4.3.2 @@ -40091,6 +44982,17 @@ snapshots: jest-util: 29.7.0 string-length: 4.0.2 + jest-watcher@30.2.0: + dependencies: + '@jest/test-result': 30.2.0 + '@jest/types': 30.2.0 + '@types/node': 22.15.35 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 30.2.0 + string-length: 4.0.2 + jest-worker@24.9.0: dependencies: merge-stream: 2.0.0 @@ -40120,6 +45022,14 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 + jest-worker@30.2.0: + dependencies: + '@types/node': 22.15.35 + '@ungap/structured-clone': 1.3.0 + jest-util: 30.2.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + jest@20.0.4: dependencies: jest-cli: 20.0.4 @@ -40135,21 +45045,34 @@ snapshots: - supports-color - utf-8-validate - jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0): + jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + jest-cli: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest@30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): + dependencies: + '@jest/core': 30.2.0(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) + '@jest/types': 30.2.0 + import-local: 3.2.0 + jest-cli: 30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros + - esbuild-register - supports-color - ts-node jiti@1.21.7: {} - jiti@2.5.1: {} + jiti@2.6.1: {} joi@17.13.3: dependencies: @@ -40159,6 +45082,8 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + jose@6.1.3: {} + jpjs@1.2.1: {} js-base64@2.6.4: {} @@ -40171,41 +45096,29 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@3.7.0: - dependencies: - argparse: 1.0.10 - esprima: 2.7.3 - - js-yaml@4.1.0: + js-yaml@4.1.1: dependencies: argparse: 2.0.1 jsbn@0.1.1: {} - jsbn@1.1.0: {} - jschardet@3.1.4: {} jscodeshift@0.15.2(@babel/preset-env@7.27.2(@babel/core@7.27.7)): dependencies: '@babel/core': 7.27.7 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.5 '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.7) + '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.27.7) '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.7) '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/register': 7.27.1(@babel/core@7.27.7) + '@babel/register': 7.28.3(@babel/core@7.27.7) babel-core: 7.0.0-bridge.0(@babel/core@7.27.7) chalk: 4.1.2 - flow-parser: 0.278.0 + flow-parser: 0.291.0 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -40218,7 +45131,7 @@ snapshots: transitivePeerDependencies: - supports-color - jsdoc-type-pratt-parser@4.1.0: {} + jsdoc-type-pratt-parser@4.8.0: {} jsdom@11.12.0: dependencies: @@ -40233,12 +45146,12 @@ snapshots: escodegen: 1.14.3 html-encoding-sniffer: 1.0.2 left-pad: 1.3.0 - nwsapi: 2.2.21 + nwsapi: 2.2.22 parse5: 4.0.0 pn: 1.1.0 request: 2.88.2 request-promise-native: 1.0.9(request@2.88.2) - sax: 1.4.1 + sax: 1.4.3 symbol-tree: 3.2.4 tough-cookie: 2.5.0 w3c-hr-time: 1.0.2 @@ -40261,7 +45174,7 @@ snapshots: domexception: 1.0.1 escodegen: 1.14.3 html-encoding-sniffer: 1.0.2 - nwsapi: 2.2.21 + nwsapi: 2.2.22 parse5: 5.1.0 pn: 1.1.0 request: 2.88.2 @@ -40292,12 +45205,12 @@ snapshots: decimal.js: 10.6.0 domexception: 4.0.0 escodegen: 2.1.0 - form-data: 4.0.4 + form-data: 4.0.5 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.21 + nwsapi: 2.2.22 parse5: 7.3.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -40328,7 +45241,7 @@ snapshots: nwmatcher: 1.4.4 parse5: 1.5.1 request: 2.88.2 - sax: 1.4.1 + sax: 1.4.3 symbol-tree: 3.2.4 tough-cookie: 2.5.0 webidl-conversions: 4.0.2 @@ -40340,19 +45253,15 @@ snapshots: jsesc@1.3.0: {} - jsesc@3.0.2: {} - jsesc@3.1.0: {} json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} - json-parse-even-better-errors@3.0.2: {} - json-schema-to-ts@3.1.1: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 ts-algebra: 2.0.0 json-schema-traverse@0.3.1: {} @@ -40399,7 +45308,7 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -40410,12 +45319,12 @@ snapshots: jsonix@3.0.0: dependencies: amdefine: 0.1.1 - xmldom: '@xmldom/xmldom@0.8.10' + xmldom: '@xmldom/xmldom@0.8.11' xmlhttprequest: 1.8.0 jsonwebtoken@9.0.2: dependencies: - jws: 3.2.2 + jws: 3.2.3 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -40424,7 +45333,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.2 + semver: 7.7.3 jsprim@1.4.2: dependencies: @@ -40455,7 +45364,7 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.2: + jws@3.2.3: dependencies: jwa: 1.4.2 safe-buffer: 5.2.1 @@ -40467,6 +45376,7 @@ snapshots: node-addon-api: 4.3.0 prebuild-install: 7.1.3 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a @@ -40474,9 +45384,9 @@ snapshots: dependencies: json-buffer: 3.0.1 - keyv@5.5.0: + keyv@5.5.4: dependencies: - '@keyv/serialize': 1.1.0 + '@keyv/serialize': 1.1.1 kill-port@2.0.1: dependencies: @@ -40507,16 +45417,16 @@ snapshots: dependencies: package-json: 4.0.1 - launch-editor@2.11.0: + launch-editor@2.12.0: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 lazy-universal-dotenv@3.0.1: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 app-root-dir: 1.0.2 - core-js: 3.45.0 + core-js: 3.47.0 dotenv: 8.6.0 dotenv-expand: 5.1.0 @@ -40546,6 +45456,8 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lexical@0.17.1: {} + lie@3.3.0: dependencies: immediate: 3.0.6 @@ -40556,8 +45468,6 @@ snapshots: lines-and-columns@1.2.4: {} - lines-and-columns@2.0.4: {} - linkify-it@3.0.3: dependencies: uc.micro: 1.0.6 @@ -40566,31 +45476,26 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@16.1.4: + lint-staged@16.2.7: dependencies: - chalk: 5.5.0 - commander: 14.0.0 - debug: 4.4.1(supports-color@8.1.1) - lilconfig: 3.1.3 - listr2: 9.0.1 + commander: 14.0.2 + listr2: 9.0.5 micromatch: 4.0.8 - nano-spawn: 1.0.2 + nano-spawn: 2.0.0 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.1 - transitivePeerDependencies: - - supports-color + yaml: 2.8.2 listenercount@1.0.1: {} - listr2@9.0.1: + listr2@9.0.5: dependencies: - cli-truncate: 4.0.0 + cli-truncate: 5.1.1 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.0 + wrap-ansi: 9.0.2 load-json-file@1.1.0: dependencies: @@ -40600,7 +45505,7 @@ snapshots: pinkie-promise: 2.0.1 strip-bom: 2.0.0 - loader-runner@4.3.0: {} + loader-runner@4.3.1: {} loader-utils@0.2.17: dependencies: @@ -40721,7 +45626,7 @@ snapshots: log-symbols@6.0.0: dependencies: - chalk: 5.5.0 + chalk: 5.6.2 is-unicode-supported: 1.3.0 log-update@2.3.0: @@ -40732,11 +45637,11 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.0.0 + ansi-escapes: 7.2.0 cli-cursor: 5.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 logform@2.7.0: dependencies: @@ -40755,6 +45660,8 @@ snapshots: long-timeout@0.1.1: {} + long@5.3.2: {} + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -40772,7 +45679,7 @@ snapshots: dependencies: get-func-name: 2.0.2 - loupe@3.2.0: {} + loupe@3.2.1: {} lower-case@1.1.4: {} @@ -40791,7 +45698,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.1.0: {} + lru-cache@11.2.4: {} lru-cache@4.1.5: dependencies: @@ -40812,7 +45719,11 @@ snapshots: dependencies: es5-ext: 0.10.64 - luxon@3.7.1: {} + lucide-react@0.523.0(react@18.3.1): + dependencies: + react: 18.3.1 + + luxon@3.7.2: {} lz-string@1.5.0: {} @@ -40820,9 +45731,13 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.17: + magic-string@0.27.0: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 make-cancellable-promise@1.3.2: {} @@ -40841,7 +45756,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 make-error@1.3.6: {} @@ -40903,8 +45818,12 @@ snapshots: markdown-table@3.0.4: {} - markdown-to-jsx@7.7.13(react@19.1.0): - dependencies: + markdown-to-jsx@7.7.17(react@18.2.0): + optionalDependencies: + react: 18.2.0 + + markdown-to-jsx@7.7.17(react@19.1.0): + optionalDependencies: react: 19.1.0 matches-selector@0.0.1: {} @@ -40923,12 +45842,26 @@ snapshots: dependencies: unist-util-visit: 2.0.3 + mdast-util-directive@3.1.0: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-visit-parents: 6.0.2 + transitivePeerDependencies: + - supports-color + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 mdast-util-from-markdown@2.0.2: dependencies: @@ -40947,6 +45880,17 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-frontmatter@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + mdast-util-gfm-autolink-literal@2.0.1: dependencies: '@types/mdast': 4.0.4 @@ -41032,6 +45976,16 @@ snapshots: transitivePeerDependencies: - supports-color + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + mdast-util-mdxjs-esm@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 @@ -41051,7 +46005,7 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 mdast-util-to-hast@10.0.1: dependencies: @@ -41064,7 +46018,7 @@ snapshots: unist-util-position: 3.1.0 unist-util-visit: 2.0.3 - mdast-util-to-hast@13.2.0: + mdast-util-to-hast@13.2.1: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -41119,11 +46073,13 @@ snapshots: dependencies: fs-monkey: 1.1.0 - memfs@4.36.0: + memfs@4.51.1: dependencies: - '@jsonjoy.com/json-pack': 1.8.0(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) - tree-dump: 1.0.3(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 memoizee@0.4.17: @@ -41190,7 +46146,7 @@ snapshots: merge@1.2.1: {} - meros@1.3.1(@types/node@22.15.35): + meros@1.3.2(@types/node@22.15.35): optionalDependencies: '@types/node': 22.15.35 @@ -41219,6 +46175,23 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-directive@3.0.2: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + parse-entities: 4.0.2 + + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + micromark-extension-gfm-autolink-literal@2.1.0: dependencies: micromark-util-character: 2.1.1 @@ -41277,6 +46250,57 @@ snapshots: micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + micromark-factory-destination@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -41290,6 +46314,18 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + micromark-factory-space@2.0.1: dependencies: micromark-util-character: 2.1.1 @@ -41342,6 +46378,16 @@ snapshots: micromark-util-encode@2.0.1: {} + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + micromark-util-html-tag-name@2.0.1: {} micromark-util-normalize-identifier@2.0.1: @@ -41372,7 +46418,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -41396,15 +46442,21 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.33.0: {} + mime-db@1.52.0: {} mime-db@1.54.0: {} + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - mime-types@3.0.1: + mime-types@3.0.2: dependencies: mime-db: 1.54.0 @@ -41426,17 +46478,17 @@ snapshots: mimic-response@4.0.0: {} - min-document@2.19.0: + min-document@2.19.2: dependencies: dom-walk: 0.1.2 min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.3(webpack@5.101.0): + mini-css-extract-plugin@2.9.4(webpack@5.103.0): dependencies: - schema-utils: 4.3.2 - tapable: 2.2.2 - webpack: 5.101.0(webpack-cli@4.10.0) + schema-utils: 4.3.3 + tapable: 2.3.0 + webpack: 5.103.0(webpack-cli@4.10.0) minim@0.23.8: dependencies: @@ -41444,7 +46496,7 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.0.3: + minimatch@10.1.1: dependencies: '@isaacs/brace-expansion': 5.0.0 @@ -41540,7 +46592,7 @@ snapshots: mkdirp@3.0.1: {} - mlly@1.7.4: + mlly@1.8.0: dependencies: acorn: 8.15.0 pathe: 2.0.3 @@ -41552,13 +46604,13 @@ snapshots: ansi-colors: 4.1.3 browser-stdout: 1.3.1 chokidar: 3.6.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) diff: 5.2.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 glob: 8.1.0 he: 1.2.0 - js-yaml: 4.1.0 + js-yaml: 4.1.1 log-symbols: 4.1.0 minimatch: 5.1.6 ms: 2.1.3 @@ -41570,17 +46622,18 @@ snapshots: yargs-parser: 20.2.9 yargs-unparser: 2.0.0 - mocha@11.7.1: + mocha@11.7.5: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) diff: 7.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 10.4.5 + glob: 10.5.0 he: 1.2.0 - js-yaml: 4.1.0 + is-path-inside: 3.0.3 + js-yaml: 4.1.1 log-symbols: 4.1.0 minimatch: 9.0.5 ms: 2.1.3 @@ -41588,7 +46641,7 @@ snapshots: serialize-javascript: 6.0.2 strip-json-comments: 3.1.1 supports-color: 8.1.1 - workerpool: 9.3.3 + workerpool: 9.3.4 yargs: 17.7.2 yargs-parser: 21.1.1 yargs-unparser: 2.0.0 @@ -41613,13 +46666,13 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - monaco-page-objects@3.14.1(selenium-webdriver@4.34.0)(typescript@5.8.3): + monaco-page-objects@3.14.1(selenium-webdriver@4.38.0)(typescript@5.8.3): dependencies: clipboardy: 4.0.0 clone-deep: 4.0.1 compare-versions: 6.1.1 - fs-extra: 11.3.1 - selenium-webdriver: 4.34.0 + fs-extra: 11.3.2 + selenium-webdriver: 4.38.0 type-fest: 4.41.0 typescript: 5.8.3 @@ -41659,13 +46712,13 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.23.0: {} + nan@2.23.1: {} - nano-spawn@1.0.2: {} + nano-spawn@2.0.0: {} nanoid@3.3.11: {} - nanoid@5.1.5: {} + nanoid@5.1.6: {} nanospinner@1.2.2: dependencies: @@ -41673,6 +46726,8 @@ snapshots: napi-build-utils@2.0.0: {} + napi-postinstall@0.3.4: {} + natural-compare-lite@1.4.0: {} natural-compare@1.4.0: {} @@ -41706,9 +46761,9 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 - node-abi@3.75.0: + node-abi@3.85.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-abort-controller@3.1.1: {} @@ -41733,6 +46788,12 @@ snapshots: node-fetch-native@1.6.7: {} + node-fetch@2.6.13(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 @@ -41745,7 +46806,7 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-forge@1.3.1: {} + node-forge@1.3.2: {} node-gyp-build@4.8.4: optional: true @@ -41768,14 +46829,14 @@ snapshots: node-gyp@9.4.1: dependencies: env-paths: 2.2.1 - exponential-backoff: 3.1.2 + exponential-backoff: 3.1.3 glob: 7.2.3 graceful-fs: 4.2.11 make-fetch-happen: 10.2.1 nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -41783,10 +46844,15 @@ snapshots: node-int64@0.4.0: {} - node-loader@2.1.0(webpack@5.101.0): + node-loader@2.0.0(webpack@5.103.0): + dependencies: + loader-utils: 2.0.4 + webpack: 5.103.0(webpack-cli@5.1.4) + + node-loader@2.1.0(webpack@5.103.0): dependencies: loader-utils: 2.0.4 - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(webpack-cli@4.10.0) node-notifier@5.4.5: dependencies: @@ -41805,12 +46871,12 @@ snapshots: which: 1.3.1 optional: true - node-releases@2.0.19: {} + node-releases@2.0.27: {} - node-sarif-builder@2.0.3: + node-sarif-builder@3.3.1: dependencies: '@types/sarif': 2.1.7 - fs-extra: 10.1.0 + fs-extra: 11.3.2 node-schedule@2.1.1: dependencies: @@ -41834,7 +46900,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.10 + resolve: 1.22.11 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -41842,13 +46908,13 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -41868,7 +46934,7 @@ snapshots: normalize-url@6.1.0: {} - normalize-url@8.0.2: {} + normalize-url@8.1.0: {} npm-run-path@2.0.2: dependencies: @@ -41882,6 +46948,11 @@ snapshots: dependencies: path-key: 4.0.0 + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + npmlog@4.1.2: dependencies: are-we-there-yet: 1.1.7 @@ -41915,7 +46986,7 @@ snapshots: nwmatcher@1.4.4: {} - nwsapi@2.2.21: {} + nwsapi@2.2.22: {} nypm@0.5.4: dependencies: @@ -42023,7 +47094,7 @@ snapshots: open@10.2.0: dependencies: - default-browser: 5.2.1 + default-browser: 5.4.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 wsl-utils: 0.1.0 @@ -42096,7 +47167,7 @@ snapshots: ora@8.2.0: dependencies: - chalk: 5.5.0 + chalk: 5.6.2 cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -42104,7 +47175,9 @@ snapshots: log-symbols: 6.0.0 stdin-discarder: 0.2.2 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 + + orderedmap@2.1.1: {} original@1.0.2: dependencies: @@ -42129,6 +47202,8 @@ snapshots: os-homedir: 1.0.2 os-tmpdir: 1.0.2 + outvariant@1.4.0: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -42173,7 +47248,11 @@ snapshots: p-limit@4.0.0: dependencies: - yocto-queue: 1.2.1 + yocto-queue: 1.2.2 + + p-limit@6.2.0: + dependencies: + yocto-queue: 1.2.2 p-locate@2.0.0: dependencies: @@ -42211,7 +47290,7 @@ snapshots: dependencies: aggregate-error: 4.0.1 - p-map@7.0.3: {} + p-map@7.0.4: {} p-queue@6.6.2: dependencies: @@ -42221,7 +47300,7 @@ snapshots: p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 - is-network-error: 1.1.0 + is-network-error: 1.3.0 retry: 0.13.1 p-timeout@3.2.0: @@ -42287,22 +47366,22 @@ snapshots: parse-json@2.2.0: dependencies: - error-ex: 1.3.2 + error-ex: 1.3.4 parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-json@7.1.1: + parse-json@8.3.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 - json-parse-even-better-errors: 3.0.2 - lines-and-columns: 2.0.4 - type-fest: 3.13.1 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} parse-passwd@1.0.0: {} @@ -42340,11 +47419,6 @@ snapshots: path-browserify@1.0.1: {} - path-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - path-dirname@1.0.2: {} path-exists@2.1.0: @@ -42374,9 +47448,9 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-scurry@2.0.0: + path-scurry@2.0.1: dependencies: - lru-cache: 11.1.0 + lru-cache: 11.2.4 minipass: 7.1.2 path-to-regexp@0.1.12: {} @@ -42385,7 +47459,9 @@ snapshots: dependencies: isarray: 0.0.1 - path-to-regexp@8.2.0: {} + path-to-regexp@3.3.0: {} + + path-to-regexp@8.3.0: {} path-type@1.1.0: dependencies: @@ -42423,9 +47499,10 @@ snapshots: pdfjs-dist@4.8.69: optionalDependencies: - canvas: 3.1.2 + canvas: 3.2.0 path2d: 0.2.2 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a @@ -42471,7 +47548,9 @@ snapshots: dependencies: crypto-js: 4.2.0 - pkce-challenge@5.0.0: {} + pkce-challenge@4.1.0: {} + + pkce-challenge@5.0.1: {} pkg-dir@2.0.0: dependencies: @@ -42496,14 +47575,14 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 + mlly: 1.8.0 pathe: 2.0.3 - playwright-core@1.52.0: {} + playwright-core@1.55.1: {} - playwright@1.52.0: + playwright@1.55.1: dependencies: - playwright-core: 1.52.0 + playwright-core: 1.55.1 optionalDependencies: fsevents: 2.3.2 @@ -42534,7 +47613,7 @@ snapshots: polished@4.3.1: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 popmotion@11.0.3: dependencies: @@ -42543,10 +47622,10 @@ snapshots: style-value-types: 5.0.0 tslib: 2.8.1 - portfinder@1.0.37: + portfinder@1.0.38: dependencies: async: 3.2.6 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -42572,7 +47651,7 @@ snapshots: postcss-colormin@5.3.1(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -42585,7 +47664,7 @@ snapshots: postcss-convert-values@5.1.3(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -42643,9 +47722,9 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 - postcss-js@4.0.1(postcss@8.5.6): + postcss-js@4.1.0(postcss@8.5.6): dependencies: camelcase-css: 2.0.1 postcss: 8.5.6 @@ -42657,19 +47736,21 @@ snapshots: postcss-load-options: 1.2.0 postcss-load-plugins: 2.3.0 - postcss-load-config@3.1.4(postcss@8.5.6): + postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.5.6 + ts-node: 10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3) - postcss-load-config@4.0.2(postcss@8.5.6): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2): dependencies: lilconfig: 3.1.3 - yaml: 2.8.1 optionalDependencies: + jiti: 1.21.7 postcss: 8.5.6 + yaml: 2.8.2 postcss-load-options@1.2.0: dependencies: @@ -42688,24 +47769,34 @@ snapshots: postcss-load-config: 1.2.0 schema-utils: 0.3.0 - postcss-loader@4.3.0(postcss@7.0.39)(webpack@5.101.0): + postcss-loader@4.3.0(postcss@7.0.39)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 loader-utils: 2.0.4 postcss: 7.0.39 schema-utils: 3.3.0 - semver: 7.7.2 - webpack: 5.101.0(webpack-cli@6.0.1) + semver: 7.7.3 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - postcss-loader@8.1.1(postcss@8.5.6)(typescript@5.8.3)(webpack@5.101.0): + postcss-loader@4.3.0(postcss@7.0.39)(webpack@5.103.0): + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + loader-utils: 2.0.4 + postcss: 7.0.39 + schema-utils: 3.3.0 + semver: 7.7.3 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.8.3)(webpack@5.103.0): dependencies: cosmiconfig: 9.0.0(typescript@5.8.3) - jiti: 1.21.7 + jiti: 2.6.1 postcss: 8.5.6 - semver: 7.7.2 + semver: 7.7.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@6.0.1) transitivePeerDependencies: - typescript @@ -42735,7 +47826,7 @@ snapshots: postcss-merge-rules@5.1.4(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -42775,7 +47866,7 @@ snapshots: postcss-minify-params@5.1.4(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 cssnano-utils: 3.1.0(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -42820,7 +47911,7 @@ snapshots: dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 postcss-modules-scope@1.1.0: @@ -42836,7 +47927,7 @@ snapshots: postcss-modules-scope@3.2.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-modules-values@1.3.0: dependencies: @@ -42905,7 +47996,7 @@ snapshots: postcss-normalize-unicode@5.1.1(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -42949,7 +48040,7 @@ snapshots: postcss-reduce-initial@5.1.2(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 caniuse-api: 3.0.0 postcss: 8.5.6 @@ -42981,7 +48072,7 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.0: + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -43046,19 +48137,20 @@ snapshots: prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.2 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.75.0 + node-abi: 3.85.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 tar-fs: 3.1.1 tunnel-agent: 0.6.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a @@ -43068,6 +48160,8 @@ snapshots: prepend-http@1.0.4: {} + presentable-error@0.0.1: {} + prettier-linter-helpers@1.0.0: dependencies: fast-diff: 1.3.0 @@ -43121,8 +48215,18 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-format@30.2.0: + dependencies: + '@jest/schemas': 30.0.5 + ansi-styles: 5.2.0 + react-is: 18.3.1 + pretty-hrtime@1.0.3: {} + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + prism-react-renderer@2.4.1(react@18.2.0): dependencies: '@types/prismjs': 1.26.5 @@ -43143,7 +48247,7 @@ snapshots: dependencies: chalk: 2.4.2 cli-spinners: 1.3.1 - humanize-duration: 3.33.0 + humanize-duration: 3.33.1 log-update: 2.3.0 progress@2.0.3: {} @@ -43210,6 +48314,87 @@ snapshots: property-information@7.1.0: {} + prosemirror-commands@1.7.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + + prosemirror-gapcursor@1.4.0: + dependencies: + prosemirror-keymap: 1.2.3 + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-view: 1.41.4 + + prosemirror-history@1.5.0: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 + rope-sequence: 1.3.4 + + prosemirror-inputrules@1.5.1: + dependencies: + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + + prosemirror-keymap@1.2.3: + dependencies: + prosemirror-state: 1.4.4 + w3c-keyname: 2.2.8 + + prosemirror-markdown@1.13.2: + dependencies: + '@types/markdown-it': 14.1.2 + markdown-it: 14.1.0 + prosemirror-model: 1.25.4 + + prosemirror-model@1.25.4: + dependencies: + orderedmap: 2.1.1 + + prosemirror-schema-basic@1.2.4: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-schema-list@1.5.1: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + + prosemirror-state@1.4.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-transform: 1.10.5 + prosemirror-view: 1.41.4 + + prosemirror-transform@1.10.5: + dependencies: + prosemirror-model: 1.25.4 + + prosemirror-view@1.41.4: + dependencies: + prosemirror-model: 1.25.4 + prosemirror-state: 1.4.4 + prosemirror-transform: 1.10.5 + + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.15.35 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -43252,7 +48437,7 @@ snapshots: puppeteer-core@2.1.1: dependencies: '@types/mime-types': 2.1.4 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -43268,11 +48453,13 @@ snapshots: pure-rand@6.1.0: {} + pure-rand@7.0.1: {} + q@1.5.1: {} - qs@6.13.0: + qified@0.5.2: dependencies: - side-channel: 1.1.0 + hookified: 1.13.0 qs@6.14.0: dependencies: @@ -43314,32 +48501,40 @@ snapshots: dependencies: safe-buffer: 5.2.1 + range-parser@1.2.0: {} + range-parser@1.2.1: {} - raw-body@2.5.2: + raw-body@2.5.3: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-body@3.0.0: + raw-body@3.0.2: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.6.3 + http-errors: 2.0.1 + iconv-lite: 0.7.0 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.101.0): + raw-loader@4.0.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + + raw-loader@4.0.2(webpack@5.103.0): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) rc-config-loader@4.1.3: dependencies: - debug: 4.4.1(supports-color@8.1.1) - js-yaml: 4.1.0 + debug: 4.4.3(supports-color@8.1.1) + js-yaml: 4.1.1 json5: 2.2.3 require-from-string: 2.0.2 transitivePeerDependencies: @@ -43363,6 +48558,11 @@ snapshots: dependencies: react: 18.2.0 + react-colorful@5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-colorful@5.6.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -43401,6 +48601,10 @@ snapshots: strip-ansi: 3.0.1 text-table: 0.2.0 + react-devtools-inline@4.4.0: + dependencies: + es6-symbol: 3.1.4 + react-dnd-html5-backend@16.0.1: dependencies: dnd-core: 16.0.1 @@ -43429,8 +48633,8 @@ snapshots: react-docgen@5.4.3: dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.28.0 - '@babel/runtime': 7.28.2 + '@babel/generator': 7.28.5 + '@babel/runtime': 7.28.4 ast-types: 0.14.2 commander: 2.20.3 doctrine: 3.0.0 @@ -43444,30 +48648,15 @@ snapshots: react-docgen@7.1.1: dependencies: '@babel/core': 7.27.7 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 - resolve: 1.22.10 - strip-indent: 4.0.0 - transitivePeerDependencies: - - supports-color - - react-docgen@8.0.0: - dependencies: - '@babel/core': 7.27.7 - '@babel/traverse': 7.28.0 - '@babel/types': 7.28.2 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - '@types/doctrine': 0.0.9 - '@types/resolve': 1.20.6 - doctrine: 3.0.0 - resolve: 1.22.10 - strip-indent: 4.0.0 + resolve: 1.22.11 + strip-indent: 4.1.1 transitivePeerDependencies: - supports-color @@ -43477,6 +48666,12 @@ snapshots: react: 18.2.0 scheduler: 0.23.2 + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + react-dom@19.1.0(react@19.1.0): dependencies: react: 19.1.0 @@ -43498,6 +48693,14 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-is: 17.0.2 + react-element-to-jsx-string@15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@base2/pretty-print-object': 1.0.1 + is-plain-object: 5.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.1.0 + react-element-to-jsx-string@15.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@base2/pretty-print-object': 1.0.1 @@ -43506,9 +48709,14 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-is: 18.1.0 + react-error-boundary@3.1.4(react@18.2.0): + dependencies: + '@babel/runtime': 7.28.4 + react: 18.2.0 + react-error-boundary@6.0.0(react@19.1.0): dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 19.1.0 react-error-overlay@4.0.1: {} @@ -43557,7 +48765,7 @@ snapshots: react-inspector@5.1.1(react@18.2.0): dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 is-dom: 1.1.0 prop-types: 15.8.1 react: 18.2.0 @@ -43570,29 +48778,29 @@ snapshots: dependencies: react: 19.1.0 - react-intl@7.1.11(react@18.2.0)(typescript@5.8.3): + react-intl@7.1.14(react@18.2.0)(typescript@5.8.3): dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/icu-messageformat-parser': 2.11.2 - '@formatjs/intl': 3.1.6(typescript@5.8.3) + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/icu-messageformat-parser': 2.11.4 + '@formatjs/intl': 3.1.8(typescript@5.8.3) '@types/hoist-non-react-statics': 3.3.7(@types/react@18.2.0) '@types/react': 18.2.0 hoist-non-react-statics: 3.3.2 - intl-messageformat: 10.7.16 + intl-messageformat: 10.7.18 react: 18.2.0 tslib: 2.8.1 optionalDependencies: typescript: 5.8.3 - react-intl@7.1.11(react@19.1.0)(typescript@4.9.5): + react-intl@7.1.14(react@19.1.0)(typescript@4.9.5): dependencies: - '@formatjs/ecma402-abstract': 2.3.4 - '@formatjs/icu-messageformat-parser': 2.11.2 - '@formatjs/intl': 3.1.6(typescript@4.9.5) + '@formatjs/ecma402-abstract': 2.3.6 + '@formatjs/icu-messageformat-parser': 2.11.4 + '@formatjs/intl': 3.1.8(typescript@4.9.5) '@types/hoist-non-react-statics': 3.3.7(@types/react@18.2.0) '@types/react': 18.2.0 hoist-non-react-statics: 3.3.2 - intl-messageformat: 10.7.16 + intl-messageformat: 10.7.18 react: 19.1.0 tslib: 2.8.1 optionalDependencies: @@ -43606,9 +48814,9 @@ snapshots: react-is@18.3.1: {} - react-is@19.1.1: {} + react-is@19.2.0: {} - react-json-view-lite@2.4.2(react@18.2.0): + react-json-view-lite@2.5.0(react@18.2.0): dependencies: react: 18.2.0 @@ -43648,7 +48856,24 @@ snapshots: devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 + react: 18.2.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + react-markdown@9.0.3(@types/react@18.2.0)(react@18.2.0): + dependencies: + '@types/hast': 3.0.4 + '@types/react': 18.2.0 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.1 react: 18.2.0 remark-parse: 11.0.0 remark-rehype: 11.1.2 @@ -43679,6 +48904,7 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a @@ -43686,7 +48912,7 @@ snapshots: dependencies: '@types/use-sync-external-store': 0.0.6 react: 18.2.0 - use-sync-external-store: 1.5.0(react@18.2.0) + use-sync-external-store: 1.6.0(react@18.2.0) optionalDependencies: '@types/react': 18.2.0 redux: 5.0.1 @@ -43701,6 +48927,14 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + react-remove-scroll-bar@2.3.8(@types/react@18.2.0)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.3(@types/react@18.2.0)(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.2.0 + react-remove-scroll-bar@2.3.8(@types/react@18.2.0)(react@19.1.0): dependencies: react: 19.1.0 @@ -43709,6 +48943,17 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + react-remove-scroll@2.5.5(@types/react@18.2.0)(react@18.2.0): + dependencies: + react: 18.2.0 + react-remove-scroll-bar: 2.3.8(@types/react@18.2.0)(react@18.2.0) + react-style-singleton: 2.2.3(@types/react@18.2.0)(react@18.2.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@18.2.0)(react@18.2.0) + use-sidecar: 1.1.3(@types/react@18.2.0)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.0 + react-remove-scroll@2.5.5(@types/react@18.2.0)(react@19.1.0): dependencies: react: 19.1.0 @@ -43720,7 +48965,7 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - react-remove-scroll@2.7.1(@types/react@18.2.0)(react@18.2.0): + react-remove-scroll@2.7.2(@types/react@18.2.0)(react@18.2.0): dependencies: react: 18.2.0 react-remove-scroll-bar: 2.3.8(@types/react@18.2.0)(react@18.2.0) @@ -43731,22 +48976,33 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - react-scripts-ts@3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3): + react-remove-scroll@2.7.2(@types/react@18.2.0)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.8(@types/react@18.2.0)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.2.0)(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@18.2.0)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.2.0)(react@18.3.1) + optionalDependencies: + '@types/react': 18.2.0 + + react-scripts-ts@3.1.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3)(webpack-cli@6.0.1): dependencies: autoprefixer: 7.1.6 babel-jest: 20.0.3 - babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.101.0) + babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.103.0) babel-preset-react-app: 3.1.2(babel-runtime@6.26.0) case-sensitive-paths-webpack-plugin: 2.1.1 chalk: 1.1.3 css-loader: 0.28.7 dotenv: 4.0.0 dotenv-expand: 4.2.0 - extract-text-webpack-plugin: 3.0.2(webpack@5.101.0) - file-loader: 1.1.5(webpack@5.101.0) - fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@5.101.0) + extract-text-webpack-plugin: 3.0.2(webpack@5.103.0) + file-loader: 1.1.5(webpack@5.103.0) + fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@5.103.0) fs-extra: 3.0.1 - html-webpack-plugin: 2.29.0(webpack@5.101.0) + html-webpack-plugin: 2.29.0(webpack@5.103.0) jest: 20.0.4 object-assign: 4.1.1 postcss-flexbugs-fixes: 3.2.0 @@ -43757,7 +49013,7 @@ snapshots: resolve: 1.6.0 source-map-loader: 0.2.4 style-loader: 0.19.0 - sw-precache-webpack-plugin: 0.11.4(webpack@5.101.0) + sw-precache-webpack-plugin: 0.11.4(webpack@5.103.0) ts-jest: 22.0.1(jest@20.0.4)(typescript@5.8.3) ts-loader: 2.3.7 tsconfig-paths-webpack-plugin: 2.0.0 @@ -43765,11 +49021,11 @@ snapshots: tslint-config-prettier: 1.18.0 tslint-react: 3.6.0(tslint@5.20.1(typescript@5.8.3))(typescript@5.8.3) typescript: 5.8.3 - uglifyjs-webpack-plugin: 1.2.5(webpack@5.101.0) - url-loader: 0.6.2(file-loader@1.1.5(webpack@5.101.0)) - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-dev-server: 5.2.2(webpack@5.101.0) - webpack-manifest-plugin: 1.3.2(webpack@5.101.0) + uglifyjs-webpack-plugin: 1.2.5(webpack@5.103.0) + url-loader: 0.6.2(file-loader@1.1.5(webpack@5.103.0)) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) + webpack-manifest-plugin: 1.3.2(webpack@5.103.0) whatwg-fetch: 2.0.3 optionalDependencies: fsevents: 1.2.13 @@ -43785,22 +49041,22 @@ snapshots: - utf-8-validate - webpack-cli - react-scripts-ts@3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3)(webpack-cli@6.0.1): + react-scripts-ts@3.1.0(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(babel-runtime@6.26.0)(typescript@5.8.3): dependencies: autoprefixer: 7.1.6 babel-jest: 20.0.3 - babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.101.0) + babel-loader: 7.1.2(babel-core@7.0.0-bridge.0(@babel/core@7.27.7))(webpack@5.103.0) babel-preset-react-app: 3.1.2(babel-runtime@6.26.0) case-sensitive-paths-webpack-plugin: 2.1.1 chalk: 1.1.3 css-loader: 0.28.7 dotenv: 4.0.0 dotenv-expand: 4.2.0 - extract-text-webpack-plugin: 3.0.2(webpack@5.101.0) - file-loader: 1.1.5(webpack@5.101.0) - fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@5.101.0) + extract-text-webpack-plugin: 3.0.2(webpack@5.103.0) + file-loader: 1.1.5(webpack@5.103.0) + fork-ts-checker-webpack-plugin: 0.2.10(typescript@5.8.3)(webpack@5.103.0) fs-extra: 3.0.1 - html-webpack-plugin: 2.29.0(webpack@5.101.0) + html-webpack-plugin: 2.29.0(webpack@5.103.0) jest: 20.0.4 object-assign: 4.1.1 postcss-flexbugs-fixes: 3.2.0 @@ -43811,7 +49067,7 @@ snapshots: resolve: 1.6.0 source-map-loader: 0.2.4 style-loader: 0.19.0 - sw-precache-webpack-plugin: 0.11.4(webpack@5.101.0) + sw-precache-webpack-plugin: 0.11.4(webpack@5.103.0) ts-jest: 22.0.1(jest@20.0.4)(typescript@5.8.3) ts-loader: 2.3.7 tsconfig-paths-webpack-plugin: 2.0.0 @@ -43819,11 +49075,11 @@ snapshots: tslint-config-prettier: 1.18.0 tslint-react: 3.6.0(tslint@5.20.1(typescript@5.8.3))(typescript@5.8.3) typescript: 5.8.3 - uglifyjs-webpack-plugin: 1.2.5(webpack@5.101.0) - url-loader: 0.6.2(file-loader@1.1.5(webpack@5.101.0)) - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) - webpack-manifest-plugin: 1.3.2(webpack@5.101.0) + uglifyjs-webpack-plugin: 1.2.5(webpack@5.103.0) + url-loader: 0.6.2(file-loader@1.1.5(webpack@5.103.0)) + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-dev-server: 5.2.2(webpack@5.103.0) + webpack-manifest-plugin: 1.3.2(webpack@5.103.0) whatwg-fetch: 2.0.3 optionalDependencies: fsevents: 1.2.13 @@ -43839,6 +49095,11 @@ snapshots: - utf-8-validate - webpack-cli + react-simple-code-editor@0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-split-pane@0.1.92(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: prop-types: 15.8.1 @@ -43859,6 +49120,14 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + react-style-singleton@2.2.3(@types/react@18.2.0)(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.2.0 + react-style-singleton@2.2.3(@types/react@18.2.0)(react@19.1.0): dependencies: get-nonce: 1.0.1 @@ -43867,9 +49136,9 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - react-syntax-highlighter@15.6.1(react@18.2.0): + react-syntax-highlighter@15.6.6(react@18.2.0): dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 highlight.js: 10.7.3 highlightjs-vue: 1.0.0 lowlight: 1.20.0 @@ -43880,12 +49149,12 @@ snapshots: react-test-renderer@19.1.1(react@18.2.0): dependencies: react: 18.2.0 - react-is: 19.1.1 + react-is: 19.2.0 scheduler: 0.26.0 react-textarea-autosize@8.5.9(@types/react@18.2.0)(react@18.2.0): dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 react: 18.2.0 use-composed-ref: 1.4.0(@types/react@18.2.0)(react@18.2.0) use-latest: 1.3.0(@types/react@18.2.0)(react@18.2.0) @@ -43901,6 +49170,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + react@19.1.0: {} read-cache@1.0.0: @@ -43944,12 +49217,13 @@ snapshots: parse-json: 5.2.0 type-fest: 1.4.0 - read-pkg@8.1.0: + read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 - parse-json: 7.1.1 + parse-json: 8.3.0 type-fest: 4.41.0 + unicorn-magic: 0.1.0 read@1.0.7: dependencies: @@ -44030,15 +49304,15 @@ snapshots: rechoir@0.6.2: dependencies: - resolve: 1.22.10 + resolve: 1.22.11 rechoir@0.7.1: dependencies: - resolve: 1.22.10 + resolve: 1.22.11 rechoir@0.8.0: dependencies: - resolve: 1.22.10 + resolve: 1.22.11 recursive-readdir@2.2.1: dependencies: @@ -44057,7 +49331,7 @@ snapshots: redent@4.0.0: dependencies: indent-string: 5.0.0 - strip-indent: 4.0.0 + strip-indent: 4.1.1 reduce-css-calc@1.3.0: dependencies: @@ -44075,7 +49349,7 @@ snapshots: redux@4.2.1: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 redux@5.0.1: {} @@ -44096,7 +49370,7 @@ snapshots: parse-entities: 2.0.0 prismjs: 1.30.0 - regenerate-unicode-properties@10.2.0: + regenerate-unicode-properties@10.2.2: dependencies: regenerate: 1.4.2 @@ -44131,14 +49405,14 @@ snapshots: regjsgen: 0.2.0 regjsparser: 0.1.5 - regexpu-core@6.2.0: + regexpu-core@6.4.0: dependencies: regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 + regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.12.0 + regjsparser: 0.13.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 + unicode-match-property-value-ecmascript: 2.2.1 registry-auth-token@3.4.0: dependencies: @@ -44157,9 +49431,9 @@ snapshots: dependencies: jsesc: 0.5.0 - regjsparser@0.12.0: + regjsparser@0.13.0: dependencies: - jsesc: 3.0.2 + jsesc: 3.1.0 rehype-raw@6.1.1: dependencies: @@ -44255,7 +49529,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 @@ -44324,7 +49598,7 @@ snapshots: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 4.0.4 + form-data: 4.0.5 har-validator: 5.1.5 http-signature: 1.2.0 is-typedarray: 1.0.0 @@ -44349,6 +49623,8 @@ snapshots: require-main-filename@2.0.0: {} + requireindex@1.2.0: {} + requires-port@1.0.0: {} reselect@5.1.1: {} @@ -44378,7 +49654,7 @@ snapshots: dependencies: path-parse: 1.0.7 - resolve@1.22.10: + resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 @@ -44423,8 +49699,6 @@ snapshots: reusify@1.1.0: {} - rev-hash@3.0.0: {} - rfdc@1.4.1: {} rimraf@2.6.3: @@ -44439,21 +49713,25 @@ snapshots: dependencies: glob: 7.2.3 + rimraf@5.0.10: + dependencies: + glob: 10.5.0 + rimraf@6.0.1: dependencies: - glob: 11.0.3 + glob: 11.1.0 package-json-from-dist: 1.0.1 - rollup-plugin-import-css@3.5.8(rollup@4.46.2): + rollup-plugin-import-css@3.5.8(rollup@4.53.3): dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.46.2) - rollup: 4.46.2 + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) + rollup: 4.53.3 - rollup-plugin-peer-deps-external@2.2.4(rollup@4.46.2): + rollup-plugin-peer-deps-external@2.2.4(rollup@4.53.3): dependencies: - rollup: 4.46.2 + rollup: 4.53.3 - rollup-plugin-postcss@4.0.2(postcss@8.5.6): + rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -44462,10 +49740,10 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6) + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) postcss-modules: 4.3.1(postcss@8.5.6) promise.series: 0.2.0 - resolve: 1.22.10 + resolve: 1.22.11 rollup-pluginutils: 2.8.2 safe-identifier: 0.4.2 style-inject: 0.3.0 @@ -44507,13 +49785,13 @@ snapshots: tslib: 2.0.1 typescript: 3.9.10 - rollup-plugin-typescript2@0.36.0(rollup@4.46.2)(typescript@5.8.3): + rollup-plugin-typescript2@0.36.0(rollup@4.53.3)(typescript@5.8.3): dependencies: '@rollup/pluginutils': 4.2.1 find-cache-dir: 3.3.2 fs-extra: 10.1.0 - rollup: 4.46.2 - semver: 7.7.2 + rollup: 4.53.3 + semver: 7.7.3 tslib: 2.8.1 typescript: 5.8.3 @@ -44532,45 +49810,49 @@ snapshots: '@types/node': 22.15.35 acorn: 7.4.1 - rollup@4.46.2: + rollup@4.53.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.2 - '@rollup/rollup-android-arm64': 4.46.2 - '@rollup/rollup-darwin-arm64': 4.46.2 - '@rollup/rollup-darwin-x64': 4.46.2 - '@rollup/rollup-freebsd-arm64': 4.46.2 - '@rollup/rollup-freebsd-x64': 4.46.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 - '@rollup/rollup-linux-arm64-musl': 4.46.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 - '@rollup/rollup-linux-x64-gnu': 4.46.2 - '@rollup/rollup-linux-x64-musl': 4.46.2 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 - '@rollup/rollup-win32-x64-msvc': 4.46.2 + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 + rope-sequence@1.3.4: {} + router@2.2.0: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 - path-to-regexp: 8.2.0 + path-to-regexp: 8.3.0 transitivePeerDependencies: - supports-color rsvp@4.8.5: {} - run-applescript@7.0.0: {} + run-applescript@7.1.0: {} run-async@2.4.1: {} @@ -44592,6 +49874,10 @@ snapshots: dependencies: tslib: 1.14.1 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + sade@1.8.1: dependencies: mri: 1.2.0 @@ -44651,24 +49937,31 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 - sass-loader@16.0.5(sass@1.90.0)(webpack@5.101.0): + sass-loader@13.3.3(sass@1.94.2)(webpack@5.103.0): + dependencies: + neo-async: 2.6.2 + webpack: 5.103.0(webpack-cli@5.1.4) + optionalDependencies: + sass: 1.94.2 + + sass-loader@16.0.6(sass@1.94.2)(webpack@5.103.0): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.90.0 - webpack: 5.101.0(webpack-cli@6.0.1) + sass: 1.94.2 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) - sass@1.90.0: + sass@1.94.2: dependencies: chokidar: 4.0.3 - immutable: 5.1.3 + immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.1 sax@1.2.4: {} - sax@1.4.1: {} + sax@1.4.3: {} saxes@3.1.11: dependencies: @@ -44711,22 +50004,22 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.3.2: + schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.17.1) - secretlint@9.3.4: + secretlint@10.2.2: dependencies: - '@secretlint/config-creator': 9.3.4 - '@secretlint/formatter': 9.3.4 - '@secretlint/node': 9.3.4 - '@secretlint/profiler': 9.3.4 - debug: 4.4.1(supports-color@8.1.1) + '@secretlint/config-creator': 10.2.2 + '@secretlint/formatter': 10.2.2 + '@secretlint/node': 10.2.2 + '@secretlint/profiler': 10.2.2 + debug: 4.4.3(supports-color@8.1.1) globby: 14.1.0 - read-pkg: 8.1.0 + read-pkg: 9.0.1 transitivePeerDependencies: - supports-color @@ -44734,11 +50027,11 @@ snapshots: select-hose@2.0.0: {} - selenium-webdriver@4.34.0: + selenium-webdriver@4.38.0: dependencies: - '@bazel/runfiles': 6.3.1 + '@bazel/runfiles': 6.5.0 jszip: 3.10.1 - tmp: 0.2.4 + tmp: 0.2.5 ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -44746,8 +50039,8 @@ snapshots: selfsigned@2.4.1: dependencies: - '@types/node-forge': 1.3.13 - node-forge: 1.3.1 + '@types/node-forge': 1.3.14 + node-forge: 1.3.2 semver-diff@2.1.0: dependencies: @@ -44759,7 +50052,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.2: {} + semver@7.7.3: {} send@0.19.0: dependencies: @@ -44777,15 +50070,31 @@ snapshots: range-parser: 1.2.1 statuses: 2.0.1 + send@0.19.1: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + send@1.2.0: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 + http-errors: 2.0.1 + mime-types: 3.0.2 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 @@ -44793,12 +50102,6 @@ snapshots: transitivePeerDependencies: - supports-color - sentence-case@3.0.4: - dependencies: - no-case: 3.0.4 - tslib: 2.8.1 - upper-case-first: 2.0.2 - serialize-error@8.1.0: dependencies: type-fest: 0.20.2 @@ -44825,6 +50128,16 @@ snapshots: parseurl: 1.3.3 safe-buffer: 5.2.1 + serve-handler@6.1.6: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + serve-index@1.9.1: dependencies: accepts: 1.3.8 @@ -44892,7 +50205,7 @@ snapshots: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - to-buffer: 1.2.1 + to-buffer: 1.2.2 shallow-clone@3.0.1: dependencies: @@ -44975,21 +50288,17 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - sisteransi@1.0.5: {} size-limit@11.2.0: dependencies: bytes-iec: 3.1.1 chokidar: 4.0.3 - jiti: 2.5.1 + jiti: 2.6.1 lilconfig: 3.1.3 nanospinner: 1.2.2 picocolors: 1.1.1 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 slash@1.0.0: {} @@ -45013,25 +50322,15 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.0: + slice-ansi@7.1.2: dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 slugify@1.6.6: {} smart-buffer@4.2.0: {} - snake-case@3.0.4: - dependencies: - dot-case: 3.0.4 - tslib: 2.8.1 - sockjs-client@1.1.5: dependencies: debug: 2.6.9 @@ -45050,14 +50349,14 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) - socks: 2.8.6 + debug: 4.4.3(supports-color@8.1.1) + socks: 2.8.7 transitivePeerDependencies: - supports-color - socks@2.8.6: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.1.0 smart-buffer: 4.2.0 sort-keys@1.1.2: @@ -45075,11 +50374,17 @@ snapshots: async: 2.6.4 loader-utils: 1.4.2 - source-map-loader@5.0.0(webpack@5.101.0): + source-map-loader@4.0.2(webpack@5.103.0): + dependencies: + iconv-lite: 0.6.3 + source-map-js: 1.2.1 + webpack: 5.103.0(webpack-cli@5.1.4) + + source-map-loader@5.0.0(webpack@5.103.0): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) source-map-resolve@0.6.0: dependencies: @@ -45119,6 +50424,13 @@ snapshots: space-separated-tokens@2.0.2: {} + spawn-rx@5.1.2: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + rxjs: 7.8.2 + transitivePeerDependencies: + - supports-color + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -45135,7 +50447,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -45146,7 +50458,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -45156,8 +50468,6 @@ snapshots: sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -45217,6 +50527,13 @@ snapshots: state-toggle@1.0.3: {} + static-browser-server@1.0.3: + dependencies: + '@open-draft/deferred-promise': 2.2.0 + dotenv: 16.5.0 + mime-db: 1.54.0 + outvariant: 1.4.0 + statuses@1.5.0: {} statuses@2.0.1: {} @@ -45244,30 +50561,6 @@ snapshots: - supports-color - utf-8-validate - storybook@9.1.1(@testing-library/dom@10.4.1)(prettier@3.5.3): - dependencies: - '@storybook/global': 5.0.0 - '@testing-library/jest-dom': 6.6.4 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4 - '@vitest/spy': 3.2.4 - better-opn: 3.0.2 - esbuild: 0.25.8 - esbuild-register: 3.6.0(esbuild@0.25.8) - recast: 0.23.11 - semver: 7.7.2 - ws: 8.18.3 - optionalDependencies: - prettier: 3.5.3 - transitivePeerDependencies: - - '@testing-library/dom' - - bufferutil - - msw - - supports-color - - utf-8-validate - - vite - stream-each@1.2.3: dependencies: end-of-stream: 1.4.5 @@ -45278,7 +50571,7 @@ snapshots: streamroller@3.1.5: dependencies: date-format: 4.0.14 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -45289,8 +50582,11 @@ snapshots: fast-fifo: 1.3.2 text-decoder: 1.2.3 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a + strict-event-emitter@0.4.6: {} + strict-uri-encode@1.1.0: {} string-argv@0.3.2: {} @@ -45338,13 +50634,18 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string-width@7.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 string.fromcodepoint@0.2.1: {} @@ -45446,9 +50747,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom@2.0.0: dependencies: @@ -45464,6 +50765,8 @@ snapshots: strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-indent@1.0.1: dependencies: get-stdin: 4.0.1 @@ -45472,9 +50775,7 @@ snapshots: dependencies: min-indent: 1.0.1 - strip-indent@4.0.0: - dependencies: - min-indent: 1.0.1 + strip-indent@4.1.1: {} strip-json-comments@2.0.1: {} @@ -45502,39 +50803,53 @@ snapshots: loader-utils: 1.4.2 schema-utils: 0.3.0 - style-loader@1.3.0(webpack@5.101.0): + style-loader@1.3.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + loader-utils: 2.0.4 + schema-utils: 2.7.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + + style-loader@1.3.0(webpack@5.103.0): dependencies: loader-utils: 2.0.4 schema-utils: 2.7.1 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@5.1.4) - style-loader@2.0.0(webpack@5.101.0): + style-loader@2.0.0(webpack@5.103.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + style-loader@3.3.4(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)): + dependencies: + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) - style-loader@3.3.4(webpack@5.101.0): + style-loader@3.3.4(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - style-loader@4.0.0(webpack@5.101.0): + style-loader@3.3.4(webpack@5.103.0): dependencies: - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@5.1.4) - style-mod@4.1.2: {} + style-loader@4.0.0(webpack@5.103.0): + dependencies: + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + style-mod@4.1.3: {} - style-to-js@1.1.17: + style-to-js@1.1.21: dependencies: - style-to-object: 1.0.9 + style-to-object: 1.0.14 style-to-object@0.3.0: dependencies: inline-style-parser: 0.1.1 - style-to-object@1.0.9: + style-to-object@1.0.14: dependencies: - inline-style-parser: 0.2.4 + inline-style-parser: 0.2.7 style-value-types@5.0.0: dependencies: @@ -45543,35 +50858,36 @@ snapshots: stylehacks@5.1.1(postcss@8.5.6): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 postcss: 8.5.6 postcss-selector-parser: 6.1.2 - stylelint-config-recommended@16.0.0(stylelint@16.23.0(typescript@5.8.3)): + stylelint-config-recommended@16.0.0(stylelint@16.26.1(typescript@5.8.3)): dependencies: - stylelint: 16.23.0(typescript@5.8.3) + stylelint: 16.26.1(typescript@5.8.3) - stylelint-config-standard@38.0.0(stylelint@16.23.0(typescript@5.8.3)): + stylelint-config-standard@38.0.0(stylelint@16.26.1(typescript@5.8.3)): dependencies: - stylelint: 16.23.0(typescript@5.8.3) - stylelint-config-recommended: 16.0.0(stylelint@16.23.0(typescript@5.8.3)) + stylelint: 16.26.1(typescript@5.8.3) + stylelint-config-recommended: 16.0.0(stylelint@16.26.1(typescript@5.8.3)) - stylelint@16.23.0(typescript@5.8.3): + stylelint@16.26.1(typescript@5.8.3): dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-syntax-patches-for-csstree': 1.0.20 '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) - '@dual-bundle/import-meta-resolve': 4.1.0 + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) + '@dual-bundle/import-meta-resolve': 4.2.1 balanced-match: 2.0.0 colord: 2.9.3 cosmiconfig: 9.0.0(typescript@5.8.3) css-functions-list: 3.2.3 css-tree: 3.1.0 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 - file-entry-cache: 10.1.3 + file-entry-cache: 11.1.1 global-modules: 2.0.0 globby: 11.1.0 globjoin: 0.1.4 @@ -45588,7 +50904,7 @@ snapshots: postcss: 8.5.6 postcss-resolve-nested-selector: 0.1.6 postcss-safe-parser: 7.0.1(postcss@8.5.6) - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 @@ -45606,14 +50922,14 @@ snapshots: dependencies: minimist: 1.2.8 - sucrase@3.35.0: + sucrase@3.35.1: dependencies: - '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 - glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 + tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 supports-color@2.0.0: {} @@ -45658,10 +50974,10 @@ snapshots: svg-tags@1.0.0: {} - svg-url-loader@8.0.0(webpack@5.101.0): + svg-url-loader@8.0.0(webpack@5.103.0): dependencies: - file-loader: 6.2.0(webpack@5.101.0) - webpack: 5.101.0(webpack-cli@6.0.1) + file-loader: 6.2.0(webpack@5.103.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) svg2ttf@4.3.0: dependencies: @@ -45670,7 +50986,7 @@ snapshots: lodash: 4.17.21 microbuffer: 1.0.0 svgpath: 2.6.0 - xmldom: '@xmldom/xmldom@0.8.10' + xmldom: '@xmldom/xmldom@0.8.11' svg2ttf@6.0.3: dependencies: @@ -45681,14 +50997,11 @@ snapshots: microbuffer: 1.0.0 svgpath: 2.6.0 - svgicons2svgfont@10.0.6: + svgicons2svgfont@12.0.0: dependencies: - commander: 7.2.0 - geometry-interfaces: 1.1.4 - glob: 7.2.3 - neatequal: 1.0.0 - readable-stream: 3.6.2 - sax: 1.4.1 + commander: 9.5.0 + glob: 8.1.0 + sax: 1.4.3 svg-pathdata: 6.0.3 svgicons2svgfont@5.0.2: @@ -45696,7 +51009,7 @@ snapshots: commander: 2.20.3 neatequal: 1.0.0 readable-stream: 2.3.8 - sax: 1.4.1 + sax: 1.4.3 string.fromcodepoint: 0.2.1 string.prototype.codepointat: 0.2.1 svg-pathdata: 1.0.4 @@ -45706,7 +51019,7 @@ snapshots: coa: 1.0.4 colors: 1.1.2 csso: 2.3.2 - js-yaml: 3.7.0 + js-yaml: 4.1.1 mkdirp: 0.5.6 sax: 1.2.4 whet.extend: 0.9.9 @@ -45723,12 +51036,12 @@ snapshots: svgpath@2.6.0: {} - sw-precache-webpack-plugin@0.11.4(webpack@5.101.0): + sw-precache-webpack-plugin@0.11.4(webpack@5.103.0): dependencies: del: 2.2.2 sw-precache: 5.2.1 uglify-js: 3.19.3 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) sw-precache@5.2.1: dependencies: @@ -45748,19 +51061,19 @@ snapshots: path-to-regexp: 1.9.0 serviceworker-cache-polyfill: 4.0.0 - swagger-client@3.35.6: + swagger-client@3.36.0: dependencies: - '@babel/runtime-corejs3': 7.28.2 + '@babel/runtime-corejs3': 7.28.4 '@scarf/scarf': 1.4.0 - '@swagger-api/apidom-core': 1.0.0-beta.45 - '@swagger-api/apidom-error': 1.0.0-beta.45 - '@swagger-api/apidom-json-pointer': 1.0.0-beta.45 - '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-beta.45 - '@swagger-api/apidom-reference': 1.0.0-beta.45 + '@swagger-api/apidom-core': 1.0.0-rc.4 + '@swagger-api/apidom-error': 1.0.0-rc.4 + '@swagger-api/apidom-json-pointer': 1.0.0-rc.4 + '@swagger-api/apidom-ns-openapi-3-1': 1.0.0-rc.4 + '@swagger-api/apidom-reference': 1.0.0-rc.4 '@swaggerexpert/cookie': 2.0.2 deepmerge: 4.3.1 fast-json-patch: 3.1.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 neotraverse: 0.6.18 node-abort-controller: 3.1.1 node-fetch-commonjs: 3.3.2 @@ -45773,7 +51086,7 @@ snapshots: swagger-ui-react@5.21.0(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime-corejs3': 7.28.2 + '@babel/runtime-corejs3': 7.28.4 '@scarf/scarf': 1.4.0 base64-js: 1.5.1 classnames: 2.5.1 @@ -45783,7 +51096,7 @@ snapshots: ieee754: 1.2.1 immutable: 3.8.2 js-file-download: 0.4.12 - js-yaml: 4.1.0 + js-yaml: 4.1.1 lodash: 4.17.21 prop-types: 15.8.1 randexp: 0.5.3 @@ -45796,14 +51109,14 @@ snapshots: react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-inspector: 6.0.2(react@18.2.0) react-redux: 9.2.0(@types/react@18.2.0)(react@18.2.0)(redux@5.0.1) - react-syntax-highlighter: 15.6.1(react@18.2.0) + react-syntax-highlighter: 15.6.6(react@18.2.0) redux: 5.0.1 redux-immutable: 4.0.0(immutable@3.8.2) remarkable: 2.0.1 reselect: 5.1.1 serialize-error: 8.1.0 sha.js: 2.4.12 - swagger-client: 3.35.6 + swagger-client: 3.36.0 url-parse: 1.5.10 xml: 1.0.1 xml-but-prettier: 1.0.1 @@ -45814,7 +51127,7 @@ snapshots: swagger-ui-react@5.22.0(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime-corejs3': 7.28.2 + '@babel/runtime-corejs3': 7.28.4 '@scarf/scarf': 1.4.0 base64-js: 1.5.1 classnames: 2.5.1 @@ -45824,7 +51137,7 @@ snapshots: ieee754: 1.2.1 immutable: 3.8.2 js-file-download: 0.4.12 - js-yaml: 4.1.0 + js-yaml: 4.1.1 lodash: 4.17.21 prop-types: 15.8.1 randexp: 0.5.3 @@ -45837,14 +51150,14 @@ snapshots: react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-inspector: 6.0.2(react@18.2.0) react-redux: 9.2.0(@types/react@18.2.0)(react@18.2.0)(redux@5.0.1) - react-syntax-highlighter: 15.6.1(react@18.2.0) + react-syntax-highlighter: 15.6.6(react@18.2.0) redux: 5.0.1 redux-immutable: 4.0.0(immutable@3.8.2) remarkable: 2.0.1 reselect: 5.1.1 serialize-error: 8.1.0 sha.js: 2.4.12 - swagger-client: 3.35.6 + swagger-client: 3.36.0 url-parse: 1.5.10 xml: 1.0.1 xml-but-prettier: 1.0.1 @@ -45853,11 +51166,17 @@ snapshots: - '@types/react' - debug - swc-loader@0.2.6(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0): + swc-loader@0.2.6(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.17) + '@swc/counter': 0.1.3 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + + swc-loader@0.2.6(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0): dependencies: - '@swc/core': 1.13.3(@swc/helpers@0.5.17) + '@swc/core': 1.15.3(@swc/helpers@0.5.17) '@swc/counter': 0.1.3 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) symbol-tree@3.2.4: {} @@ -45873,11 +51192,15 @@ snapshots: synchronous-promise@2.0.17: {} + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + system-architecture@0.1.0: {} tabbable@5.3.3: {} - tabbable@6.2.0: {} + tabbable@6.3.0: {} table@5.4.6: dependencies: @@ -45894,7 +51217,9 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@3.4.17: + tailwind-merge@2.6.0: {} + + tailwindcss@3.4.18(yaml@2.8.2): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -45912,31 +51237,33 @@ snapshots: picocolors: 1.1.1 postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) - postcss-js: 4.0.1(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6) + postcss-js: 4.1.0(postcss@8.5.6) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.2) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 + resolve: 1.22.11 + sucrase: 3.35.1 transitivePeerDependencies: - - ts-node + - tsx + - yaml - tailwindcss@4.1.11: {} + tailwindcss@4.1.17: {} tapable@0.2.9: {} tapable@1.1.3: {} - tapable@2.2.2: {} + tapable@2.3.0: {} tar-fs@3.1.1: dependencies: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.4.4 + bare-fs: 4.5.2 bare-path: 3.0.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a @@ -45946,6 +51273,7 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: + - bare-abort-controller - react-native-b4a tar@2.2.2: @@ -45967,6 +51295,7 @@ snapshots: dependencies: tar-fs: 3.1.1 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - react-native-b4a @@ -46015,7 +51344,25 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@4.2.3(webpack@5.101.0): + terminal-link@4.0.0: + dependencies: + ansi-escapes: 7.2.0 + supports-hyperlinks: 3.2.0 + + terser-webpack-plugin@4.2.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + cacache: 15.3.0 + find-cache-dir: 3.3.2 + jest-worker: 26.6.2 + p-limit: 3.1.0 + schema-utils: 3.3.0 + serialize-javascript: 5.0.1 + source-map: 0.6.1 + terser: 5.44.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + webpack-sources: 1.4.3 + + terser-webpack-plugin@4.2.3(webpack@5.103.0): dependencies: cacache: 15.3.0 find-cache-dir: 3.3.2 @@ -46024,29 +51371,43 @@ snapshots: schema-utils: 3.3.0 serialize-javascript: 5.0.1 source-map: 0.6.1 - terser: 5.43.1 - webpack: 5.101.0(webpack-cli@6.0.1) + terser: 5.44.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) webpack-sources: 1.4.3 - terser-webpack-plugin@5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0): + terser-webpack-plugin@5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + serialize-javascript: 6.0.2 + terser: 5.44.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) + optionalDependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.17) + esbuild: 0.25.12 + + terser-webpack-plugin@5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(webpack-cli@5.1.4) + terser: 5.44.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) optionalDependencies: - '@swc/core': 1.13.3(@swc/helpers@0.5.17) + '@swc/core': 1.15.3(@swc/helpers@0.5.17) - terser-webpack-plugin@5.3.14(webpack@5.101.0): + terser-webpack-plugin@5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0): dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.0(webpack-cli@6.0.1) + terser: 5.44.1 + webpack: 5.103.0(webpack-cli@5.1.4) + optionalDependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.17) terser@4.8.1: dependencies: @@ -46054,9 +51415,9 @@ snapshots: source-map: 0.6.1 source-map-support: 0.5.21 - terser@5.43.1: + terser@5.44.1: dependencies: - '@jridgewell/source-map': 0.3.10 + '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -46078,7 +51439,7 @@ snapshots: test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 + glob: 10.5.0 minimatch: 9.0.5 text-decoder@1.2.3: @@ -46093,7 +51454,7 @@ snapshots: textextensions@6.11.0: dependencies: - editions: 6.21.0 + editions: 6.22.0 thenify-all@1.6.0: dependencies: @@ -46103,7 +51464,7 @@ snapshots: dependencies: any-promise: 1.3.0 - thingies@1.21.0(tslib@2.8.1): + thingies@2.5.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -46147,28 +51508,24 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.14: + tinyglobby@0.2.15: dependencies: - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 tinyrainbow@1.2.0: {} - tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} - tinyspy@4.0.3: {} - tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - tmp@0.2.4: {} + tmp@0.2.5: {} tmpl@1.0.5: {} - to-buffer@1.2.1: + to-buffer@1.2.2: dependencies: isarray: 2.0.5 safe-buffer: 5.2.1 @@ -46200,8 +51557,6 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - toml@3.0.0: {} - toposort@1.0.7: {} toposort@2.0.2: {} @@ -46236,7 +51591,7 @@ snapshots: traverse@0.3.9: {} - tree-dump@1.0.3(tslib@2.8.1): + tree-dump@1.1.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -46332,17 +51687,17 @@ snapshots: typescript: 3.9.10 yargs-parser: 18.1.3 - ts-jest@29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0))(typescript@5.8.3): + ts-jest@29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.7))(jest@29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0) + jest: 29.7.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.2 + semver: 7.7.3 type-fest: 4.41.0 typescript: 5.8.3 yargs-parser: 21.1.1 @@ -46352,6 +51707,27 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.27.7) + ts-jest@29.3.4(@babel/core@7.27.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@30.2.0(@babel/core@7.27.7))(esbuild@0.25.12)(jest@30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)))(typescript@5.8.3): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 30.2.0(@types/node@22.15.35)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.25.12))(ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.3 + type-fest: 4.41.0 + typescript: 5.8.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.27.7 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 30.2.0(@babel/core@7.27.7) + esbuild: 0.25.12 + ts-loader@2.3.7: dependencies: chalk: 2.4.2 @@ -46359,15 +51735,15 @@ snapshots: loader-utils: 1.4.2 semver: 5.7.2 - ts-loader@9.5.2(typescript@5.8.3)(webpack@5.101.0): + ts-loader@9.5.4(typescript@5.8.3)(webpack@5.103.0): dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.3 micromatch: 4.0.8 - semver: 7.7.2 + semver: 7.7.3 source-map: 0.7.6 typescript: 5.8.3 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@5.1.4) ts-mixer@6.0.4: {} @@ -46381,6 +51757,47 @@ snapshots: '@ts-morph/common': 0.27.0 code-block-writer: 13.0.3 + ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.18)(typescript@5.8.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.15.18 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.17) + + ts-node@10.9.2(@swc/core@1.15.3(@swc/helpers@0.5.17))(@types/node@22.15.35)(typescript@5.8.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.15.35 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.15.3(@swc/helpers@0.5.17) + optional: true + ts-pnp@1.2.0(typescript@4.9.5): optionalDependencies: typescript: 4.9.5 @@ -46413,10 +51830,10 @@ snapshots: dependencies: '@babel/core': 7.27.7 '@babel/helper-module-imports': 7.27.1 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.5 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) '@babel/preset-env': 7.27.2(@babel/core@7.27.7) - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.5 '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.7)(@types/babel__core@7.20.5)(rollup@1.32.1) '@rollup/plugin-commonjs': 11.1.0(rollup@1.32.1) '@rollup/plugin-json': 4.1.0(rollup@1.32.1) @@ -46461,7 +51878,7 @@ snapshots: rollup-plugin-terser: 5.3.1(rollup@1.32.1) rollup-plugin-typescript2: 0.27.3(rollup@1.32.1)(typescript@3.9.10) sade: 1.8.1 - semver: 7.7.2 + semver: 7.7.3 shelljs: 0.8.5 tiny-glob: 0.2.9 ts-jest: 25.5.1(jest@25.5.4)(typescript@3.9.10) @@ -46525,7 +51942,7 @@ snapshots: commander: 2.20.3 diff: 4.0.2 glob: 7.2.3 - js-yaml: 3.14.1 + js-yaml: 4.1.1 minimatch: 3.1.2 mkdirp: 0.5.6 resolve: 1.6.0 @@ -46542,10 +51959,10 @@ snapshots: commander: 2.20.3 diff: 4.0.2 glob: 7.2.3 - js-yaml: 3.14.1 + js-yaml: 4.1.1 minimatch: 3.1.2 mkdirp: 0.5.6 - resolve: 1.22.10 + resolve: 1.22.11 semver: 5.7.2 tslib: 1.14.1 tsutils: 2.29.0(typescript@4.9.5) @@ -46559,10 +51976,10 @@ snapshots: commander: 2.20.3 diff: 4.0.2 glob: 7.2.3 - js-yaml: 3.14.1 + js-yaml: 4.1.1 minimatch: 3.1.2 mkdirp: 0.5.6 - resolve: 1.22.10 + resolve: 1.22.11 semver: 5.7.2 tslib: 1.14.1 tsutils: 2.29.0(typescript@5.8.3) @@ -46598,18 +52015,22 @@ snapshots: argparse: 1.0.10 microbuffer: 1.0.0 + ttf2eot@3.1.0: + dependencies: + argparse: 2.0.1 + ttf2woff2@2.0.3: dependencies: bindings: 1.5.0 bufferstreams: 1.1.3 - nan: 2.23.0 + nan: 2.23.1 node-gyp: 3.8.0 - ttf2woff2@4.0.5: + ttf2woff2@5.0.0: dependencies: bindings: 1.5.0 bufferstreams: 3.0.0 - nan: 2.23.0 + nan: 2.23.1 node-gyp: 9.4.1 transitivePeerDependencies: - supports-color @@ -46659,8 +52080,6 @@ snapshots: type-fest@2.19.0: {} - type-fest@3.13.1: {} - type-fest@4.41.0: {} type-is@1.6.18: @@ -46672,7 +52091,7 @@ snapshots: dependencies: content-type: 1.0.5 media-typer: 1.1.0 - mime-types: 3.0.1 + mime-types: 3.0.2 type@2.7.3: {} @@ -46731,7 +52150,7 @@ snapshots: typescript@5.8.3: {} - ua-parser-js@1.0.40: {} + ua-parser-js@1.0.41: {} uc.micro@1.0.6: {} @@ -46751,7 +52170,7 @@ snapshots: commander: 2.19.0 source-map: 0.6.1 - uglifyjs-webpack-plugin@1.2.5(webpack@5.101.0): + uglifyjs-webpack-plugin@1.2.5(webpack@5.103.0): dependencies: cacache: 10.0.4 find-cache-dir: 1.0.0 @@ -46759,7 +52178,7 @@ snapshots: serialize-javascript: 1.9.1 source-map: 0.6.1 uglify-es: 3.3.9 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) webpack-sources: 1.4.3 worker-farm: 1.7.0 @@ -46776,7 +52195,7 @@ snapshots: undici-types@6.21.0: {} - undici@7.13.0: {} + undici@7.16.0: {} unfetch@4.2.0: {} @@ -46790,16 +52209,20 @@ snapshots: unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.1.0 + unicode-property-aliases-ecmascript: 2.2.0 - unicode-match-property-value-ecmascript@2.2.0: {} + unicode-match-property-value-ecmascript@2.2.1: {} - unicode-property-aliases-ecmascript@2.1.0: {} + unicode-property-aliases-ecmascript@2.2.0: {} unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} + unidiff@1.0.4: + dependencies: + diff: 5.2.0 + unified@10.1.2: dependencies: '@types/unist': 2.0.11 @@ -46871,7 +52294,11 @@ snapshots: dependencies: '@types/unist': 2.0.11 - unist-util-is@6.0.0: + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position-from-estree@2.0.0: dependencies: '@types/unist': 3.0.3 @@ -46907,10 +52334,10 @@ snapshots: '@types/unist': 2.0.11 unist-util-is: 5.2.1 - unist-util-visit-parents@6.0.1: + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 unist-util-visit@2.0.3: dependencies: @@ -46927,8 +52354,8 @@ snapshots: unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 unit-compare@1.0.1: dependencies: @@ -46949,6 +52376,30 @@ snapshots: unraw@3.0.0: {} + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + untildify@2.1.0: dependencies: os-homedir: 1.0.2 @@ -46975,15 +52426,15 @@ snapshots: dependencies: bluebird: 3.7.2 duplexer2: 0.1.4 - fs-extra: 11.3.1 + fs-extra: 11.3.2 graceful-fs: 4.2.11 node-int64: 0.4.0 upath@2.0.1: {} - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.4(browserslist@4.28.0): dependencies: - browserslist: 4.25.1 + browserslist: 4.28.0 escalade: 3.2.0 picocolors: 1.1.1 @@ -47000,16 +52451,8 @@ snapshots: semver-diff: 2.1.0 xdg-basedir: 3.0.0 - upper-case-first@2.0.2: - dependencies: - tslib: 2.8.1 - upper-case@1.1.3: {} - upper-case@2.0.2: - dependencies: - tslib: 2.8.1 - uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -47020,21 +52463,30 @@ snapshots: url-join@4.0.1: {} - url-loader@0.6.2(file-loader@1.1.5(webpack@5.101.0)): + url-loader@0.6.2(file-loader@1.1.5(webpack@5.103.0)): dependencies: - file-loader: 1.1.5(webpack@5.101.0) + file-loader: 1.1.5(webpack@5.103.0) loader-utils: 1.4.2 mime: 1.6.0 schema-utils: 0.3.0 - url-loader@4.1.1(file-loader@6.2.0(webpack@5.101.0))(webpack@5.101.0): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) optionalDependencies: - file-loader: 6.2.0(webpack@5.101.0) + file-loader: 6.2.0(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + + url-loader@4.1.1(file-loader@6.2.0(webpack@5.103.0))(webpack@5.103.0): + dependencies: + loader-utils: 2.0.4 + mime-types: 2.1.35 + schema-utils: 3.3.0 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + optionalDependencies: + file-loader: 6.2.0(webpack@5.103.0) url-parse-lax@1.0.0: dependencies: @@ -47057,6 +52509,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + use-callback-ref@1.3.3(@types/react@18.2.0)(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.2.0 + use-callback-ref@1.3.3(@types/react@18.2.0)(react@19.1.0): dependencies: react: 19.1.0 @@ -47083,6 +52542,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + use-resize-observer@9.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@juggle/resize-observer': 3.4.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-resize-observer@9.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@juggle/resize-observer': 3.4.0 @@ -47097,6 +52562,14 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 + use-sidecar@1.1.3(@types/react@18.2.0)(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.2.0 + use-sidecar@1.1.3(@types/react@18.2.0)(react@19.1.0): dependencies: detect-node-es: 1.1.0 @@ -47105,11 +52578,11 @@ snapshots: optionalDependencies: '@types/react': 18.2.0 - use-sync-external-store@1.5.0(react@18.2.0): + use-sync-external-store@1.6.0(react@18.2.0): dependencies: react: 18.2.0 - use-sync-external-store@1.5.0(react@19.1.0): + use-sync-external-store@1.6.0(react@19.1.0): dependencies: react: 19.1.0 @@ -47130,7 +52603,7 @@ snapshots: dependencies: inherits: 2.0.4 is-arguments: 1.2.0 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-typed-array: 1.1.15 which-typed-array: 1.1.19 @@ -47148,6 +52621,8 @@ snapshots: uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} + v8-compile-cache@2.4.0: {} v8-to-istanbul@4.1.4: @@ -47158,7 +52633,7 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -47181,7 +52656,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - version-range@4.14.0: {} + version-range@4.15.0: {} vfile-location@3.2.0: {} @@ -47205,31 +52680,21 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vsce@2.15.0: + vite@6.4.1(@types/node@22.15.35)(jiti@2.6.1)(sass@1.94.2)(terser@5.44.1)(yaml@2.8.2): dependencies: - azure-devops-node-api: 11.2.0 - chalk: 2.4.2 - cheerio: 1.1.2 - commander: 6.2.1 - glob: 7.2.3 - hosted-git-info: 4.1.0 - keytar: 7.9.0 - leven: 3.1.0 - markdown-it: 12.3.2 - mime: 1.6.0 - minimatch: 3.1.2 - parse-semver: 1.1.1 - read: 1.0.7 - semver: 5.7.2 - tmp: 0.2.4 - typed-rest-client: 1.8.11 - url-join: 4.0.1 - xml2js: 0.4.23 - yauzl: 2.10.0 - yazl: 2.5.1 - transitivePeerDependencies: - - bare-buffer - - react-native-b4a + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.15.35 + fsevents: 2.3.3 + jiti: 2.6.1 + sass: 1.94.2 + terser: 5.44.1 + yaml: 2.8.2 vscode-debugadapter-testsupport@1.51.0: dependencies: @@ -47246,59 +52711,61 @@ snapshots: dependencies: applicationinsights: 1.7.4 - vscode-extension-tester-locators@3.12.2(monaco-page-objects@3.14.1(selenium-webdriver@4.34.0)(typescript@5.8.3))(selenium-webdriver@4.34.0): + vscode-extension-tester-locators@3.12.2(monaco-page-objects@3.14.1(selenium-webdriver@4.38.0)(typescript@5.8.3))(selenium-webdriver@4.38.0): dependencies: - monaco-page-objects: 3.14.1(selenium-webdriver@4.34.0)(typescript@5.8.3) - selenium-webdriver: 4.34.0 + monaco-page-objects: 3.14.1(selenium-webdriver@4.38.0)(typescript@5.8.3) + selenium-webdriver: 4.38.0 vscode-extension-tester@5.10.0(mocha@10.8.2)(typescript@5.8.3): dependencies: - '@types/selenium-webdriver': 4.1.28 + '@types/selenium-webdriver': 4.35.4 '@vscode/vsce': 2.32.0 commander: 11.1.0 compare-versions: 6.1.1 - fs-extra: 11.3.1 - glob: 10.4.5 + fs-extra: 11.3.2 + glob: 10.5.0 got: 13.0.0 hpagent: 1.2.0 - js-yaml: 4.1.0 + js-yaml: 4.1.1 mocha: 10.8.2 - monaco-page-objects: 3.14.1(selenium-webdriver@4.34.0)(typescript@5.8.3) + monaco-page-objects: 3.14.1(selenium-webdriver@4.38.0)(typescript@5.8.3) sanitize-filename: 1.6.3 - selenium-webdriver: 4.34.0 + selenium-webdriver: 4.38.0 targz: 1.0.1 typescript: 5.8.3 unzipper: 0.10.14 - vscode-extension-tester-locators: 3.12.2(monaco-page-objects@3.14.1(selenium-webdriver@4.34.0)(typescript@5.8.3))(selenium-webdriver@4.34.0) + vscode-extension-tester-locators: 3.12.2(monaco-page-objects@3.14.1(selenium-webdriver@4.38.0)(typescript@5.8.3))(selenium-webdriver@4.38.0) transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - react-native-b4a - supports-color - utf-8-validate - vscode-extension-tester@8.14.1(mocha@11.7.1)(typescript@5.8.3): + vscode-extension-tester@8.14.1(mocha@11.7.5)(typescript@5.8.3): dependencies: - '@redhat-developer/locators': 1.15.0(@redhat-developer/page-objects@1.15.0(selenium-webdriver@4.34.0)(typescript@5.8.3))(selenium-webdriver@4.34.0) - '@redhat-developer/page-objects': 1.15.0(selenium-webdriver@4.34.0)(typescript@5.8.3) - '@types/selenium-webdriver': 4.1.28 - '@vscode/vsce': 3.4.2 + '@redhat-developer/locators': 1.17.0(@redhat-developer/page-objects@1.17.0(selenium-webdriver@4.38.0)(typescript@5.8.3))(selenium-webdriver@4.38.0) + '@redhat-developer/page-objects': 1.17.0(selenium-webdriver@4.38.0)(typescript@5.8.3) + '@types/selenium-webdriver': 4.35.4 + '@vscode/vsce': 3.7.1 c8: 10.1.3 commander: 13.1.0 compare-versions: 6.1.1 find-up: 7.0.0 - fs-extra: 11.3.1 - glob: 11.0.3 + fs-extra: 11.3.2 + glob: 11.1.0 got: 14.4.7 hpagent: 1.2.0 - js-yaml: 4.1.0 - mocha: 11.7.1 + js-yaml: 4.1.1 + mocha: 11.7.5 sanitize-filename: 1.6.3 - selenium-webdriver: 4.34.0 + selenium-webdriver: 4.38.0 targz: 1.0.1 typescript: 5.8.3 unzipper: 0.12.3 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil - monocart-coverage-reports @@ -47317,19 +52784,19 @@ snapshots: vscode-languageclient@7.0.0: dependencies: minimatch: 3.1.2 - semver: 7.7.2 + semver: 7.7.3 vscode-languageserver-protocol: 3.16.0 vscode-languageclient@8.1.0: dependencies: minimatch: 5.1.6 - semver: 7.7.2 + semver: 7.7.3 vscode-languageserver-protocol: 3.17.3 vscode-languageclient@9.0.1: dependencies: minimatch: 5.1.6 - semver: 7.7.2 + semver: 7.7.3 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-protocol@3.16.0: @@ -47359,6 +52826,10 @@ snapshots: vscode-messenger-common@0.5.1: {} + vscode-messenger-webview@0.4.5: + dependencies: + vscode-messenger-common: 0.4.5 + vscode-messenger-webview@0.5.1: dependencies: vscode-messenger-common: 0.5.1 @@ -47382,7 +52853,7 @@ snapshots: vscode-uri@3.1.0: {} - vscode-ws-jsonrpc@3.4.0: + vscode-ws-jsonrpc@3.5.0: dependencies: vscode-jsonrpc: 8.2.1 @@ -47402,6 +52873,8 @@ snapshots: dependencies: xml-name-validator: 4.0.0 + walk-up-path@3.0.1: {} + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -47453,10 +52926,10 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@4.10.0(webpack-dev-server@5.2.2)(webpack@5.101.0): + webpack-cli@4.10.0(webpack-dev-server@5.2.2)(webpack@5.103.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.101.0) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.103.0) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0)(webpack-dev-server@5.2.2) colorette: 2.0.20 @@ -47466,15 +52939,15 @@ snapshots: import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(webpack-cli@4.10.0) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 5.2.2(webpack-cli@4.10.0)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@4.10.0)(webpack@5.103.0) - webpack-cli@4.10.0(webpack@5.101.0): + webpack-cli@4.10.0(webpack@5.103.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.101.0) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.103.0) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) colorette: 2.0.20 @@ -47484,74 +52957,100 @@ snapshots: import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.101.0(webpack-cli@4.10.0) + webpack: 5.103.0(webpack-cli@4.10.0) webpack-merge: 5.10.0 - webpack-cli@5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0): + webpack-cli@5.1.4(webpack-dev-server@5.2.2)(webpack@5.103.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.101.0) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.101.0) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack@5.101.0) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.103.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.103.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack@5.103.0) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 - envinfo: 7.14.0 + envinfo: 7.21.0 fastest-levenshtein: 1.0.16 import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.103.0) - webpack-cli@6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0): + webpack-cli@5.1.4(webpack@5.103.0): + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.103.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.103.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.103.0) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.6 + envinfo: 7.21.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + + webpack-cli@6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0): dependencies: '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack@5.101.0) + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.2)(webpack@5.103.0) colorette: 2.0.20 commander: 12.1.0 cross-spawn: 7.0.6 - envinfo: 7.14.0 + envinfo: 7.21.0 fastest-levenshtein: 1.0.16 import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) webpack-merge: 6.0.1 optionalDependencies: - webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.103.0) - webpack-cli@6.0.1(webpack@5.101.0): + webpack-cli@6.0.1(webpack@5.103.0): dependencies: '@discoveryjs/json-ext': 0.6.3 - '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) - '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) - '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.101.0) + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0) colorette: 2.0.20 commander: 12.1.0 cross-spawn: 7.0.6 - envinfo: 7.14.0 + envinfo: 7.21.0 fastest-levenshtein: 1.0.16 import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(webpack-cli@6.0.1) webpack-merge: 6.0.1 - webpack-dev-middleware@3.7.3(webpack@5.101.0): + webpack-dev-middleware@3.7.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: memory-fs: 0.4.1 mime: 2.6.0 mkdirp: 0.5.6 range-parser: 1.2.1 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) webpack-log: 2.0.0 - webpack-dev-middleware@4.3.0(webpack@5.101.0): + webpack-dev-middleware@3.7.3(webpack@5.103.0): + dependencies: + memory-fs: 0.4.1 + mime: 2.6.0 + mkdirp: 0.5.6 + range-parser: 1.2.1 + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-log: 2.0.0 + + webpack-dev-middleware@4.3.0(webpack@5.103.0): dependencies: colorette: 1.4.0 mem: 8.1.1 @@ -47559,37 +53058,69 @@ snapshots: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 3.3.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + + webpack-dev-middleware@6.1.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)): + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12) - webpack-dev-middleware@6.1.3(webpack@5.101.0): + webpack-dev-middleware@6.1.3(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) - webpack-dev-middleware@7.4.2(webpack@5.101.0): + webpack-dev-middleware@6.1.3(webpack@5.103.0): dependencies: colorette: 2.0.20 - memfs: 4.36.0 + memfs: 3.5.3 mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.103.0(webpack-cli@5.1.4) + + webpack-dev-middleware@7.4.5(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + colorette: 2.0.20 + memfs: 4.51.1 + mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + optional: true - webpack-dev-server@5.2.2(webpack-cli@4.10.0)(webpack@5.101.0): + webpack-dev-middleware@7.4.5(webpack@5.103.0): + dependencies: + colorette: 2.0.20 + memfs: 4.51.1 + mime-types: 3.0.2 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.103.0(webpack-cli@5.1.4) + + webpack-dev-server@5.2.2(webpack-cli@4.10.0)(webpack@5.103.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.23 - '@types/express-serve-static-core': 4.19.6 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.7 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 @@ -47598,23 +53129,23 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.21.2 + express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.23) - ipaddr.js: 2.2.0 - launch-editor: 2.11.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.12.0 open: 10.2.0 p-retry: 6.2.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0) + webpack-dev-middleware: 7.4.5(webpack@5.103.0) ws: 8.18.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.103.0) transitivePeerDependencies: - bufferutil - debug @@ -47622,14 +53153,53 @@ snapshots: - utf-8-validate optional: true - webpack-dev-server@5.2.2(webpack-cli@5.1.4)(webpack@5.101.0): + webpack-dev-server@5.2.2(webpack-cli@5.1.4)(webpack@5.103.0): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.7 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.10 + '@types/sockjs': 0.3.36 + '@types/ws': 8.18.1 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.8.1 + connect-history-api-fallback: 2.0.0 + express: 4.22.1 + graceful-fs: 4.2.11 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.12.0 + open: 10.2.0 + p-retry: 6.2.1 + schema-utils: 4.3.3 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 7.4.5(webpack@5.103.0) + ws: 8.18.3 + optionalDependencies: + webpack: 5.103.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.103.0) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + webpack-dev-server@5.2.2(webpack-cli@6.0.1)(webpack@5.103.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.23 - '@types/express-serve-static-core': 4.19.6 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.7 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 @@ -47638,37 +53208,37 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.21.2 + express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.23) - ipaddr.js: 2.2.0 - launch-editor: 2.11.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.12.0 open: 10.2.0 p-retry: 6.2.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0) + webpack-dev-middleware: 7.4.5(webpack@5.103.0) ws: 8.18.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-dev-server@5.2.2(webpack-cli@6.0.1)(webpack@5.101.0): + webpack-dev-server@5.2.2(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.23 - '@types/express-serve-static-core': 4.19.6 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.7 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 @@ -47677,37 +53247,37 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.21.2 + express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.23) - ipaddr.js: 2.2.0 - launch-editor: 2.11.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.12.0 open: 10.2.0 p-retry: 6.2.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0) + webpack-dev-middleware: 7.4.5(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) ws: 8.18.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate + optional: true - webpack-dev-server@5.2.2(webpack@5.101.0): + webpack-dev-server@5.2.2(webpack@5.103.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.23 - '@types/express-serve-static-core': 4.19.6 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.7 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.8 + '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 @@ -47716,31 +53286,35 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.21.2 + express: 4.22.1 graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.23) - ipaddr.js: 2.2.0 - launch-editor: 2.11.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.3.0 + launch-editor: 2.12.0 open: 10.2.0 p-retry: 6.2.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.101.0) + webpack-dev-middleware: 7.4.5(webpack@5.103.0) ws: 8.18.3 optionalDependencies: - webpack: 5.101.0(webpack-cli@5.1.4) + webpack: 5.103.0(webpack-cli@5.1.4) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-filter-warnings-plugin@1.2.1(webpack@5.101.0): + webpack-filter-warnings-plugin@1.2.1(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))): + dependencies: + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)) + + webpack-filter-warnings-plugin@1.2.1(webpack@5.103.0): dependencies: - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) webpack-hot-middleware@2.26.1: dependencies: @@ -47753,18 +53327,11 @@ snapshots: ansi-colors: 3.2.4 uuid: 3.4.0 - webpack-manifest-plugin@1.3.2(webpack@5.101.0): + webpack-manifest-plugin@1.3.2(webpack@5.103.0): dependencies: fs-extra: 0.30.0 lodash: 4.17.21 - webpack: 5.101.0(webpack-cli@6.0.1) - - webpack-merge-and-include-globally@2.3.4(webpack@5.101.0): - dependencies: - es6-promisify: 6.1.1 - glob: 7.2.3 - rev-hash: 3.0.0 - webpack: 5.101.0(webpack-cli@6.0.1) + webpack: 5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1) webpack-merge@5.10.0: dependencies: @@ -47799,7 +53366,105 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)): + webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17)): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.28.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.28.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)(webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(esbuild@0.25.12)) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.28.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + optionalDependencies: + webpack-cli: 5.1.4(webpack@5.103.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.103.0(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack-cli@6.0.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -47809,7 +53474,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.28.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -47818,20 +53483,22 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0) + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) watchpack: 2.4.4 webpack-sources: 3.3.3 + optionalDependencies: + webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.103.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.101.0(webpack-cli@4.10.0): + webpack@5.103.0(webpack-cli@4.10.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -47841,7 +53508,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.28.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -47850,22 +53517,22 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack-cli: 4.10.0(webpack-dev-server@5.2.2)(webpack@5.103.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.101.0(webpack-cli@5.1.4): + webpack@5.103.0(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -47875,7 +53542,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.28.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -47884,22 +53551,22 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack-cli: 5.1.4(webpack@5.103.0) transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.101.0(webpack-cli@6.0.1): + webpack@5.103.0(webpack-cli@6.0.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -47909,7 +53576,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.28.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -47918,16 +53585,16 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.101.0) + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.15.3(@swc/helpers@0.5.17))(webpack@5.103.0) watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 6.0.1(webpack@5.101.0) + webpack-cli: 6.0.1(webpack@5.103.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -48006,7 +53673,7 @@ snapshots: is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 @@ -48070,7 +53737,7 @@ snapshots: winston@3.11.0: dependencies: '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 + '@dabh/diagnostics': 2.0.8 async: 3.2.6 is-stream: 2.0.1 logform: 2.7.0 @@ -48095,7 +53762,7 @@ snapshots: workerpool@6.5.1: {} - workerpool@9.3.3: {} + workerpool@9.3.4: {} wrap-ansi@2.1.0: dependencies: @@ -48121,15 +53788,15 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 - wrap-ansi@9.0.0: + wrap-ansi@9.0.2: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -48188,7 +53855,7 @@ snapshots: xml-js@1.6.11: dependencies: - sax: 1.4.1 + sax: 1.4.3 xml-name-validator@2.0.1: {} @@ -48196,19 +53863,14 @@ snapshots: xml-name-validator@4.0.0: {} - xml2js@0.4.23: - dependencies: - sax: 1.4.1 - xmlbuilder: 11.0.1 - xml2js@0.5.0: dependencies: - sax: 1.4.1 + sax: 1.4.3 xmlbuilder: 11.0.1 xml2js@0.6.2: dependencies: - sax: 1.4.1 + sax: 1.4.3 xmlbuilder: 11.0.1 xml@1.0.1: {} @@ -48218,7 +53880,7 @@ snapshots: '@oozcitak/dom': 1.15.10 '@oozcitak/infra': 1.0.8 '@oozcitak/util': 8.3.8 - js-yaml: 3.14.1 + js-yaml: 4.1.1 xmlbuilder@11.0.1: {} @@ -48244,7 +53906,7 @@ snapshots: yaml@1.10.2: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yargs-parser@18.1.3: dependencies: @@ -48347,9 +54009,20 @@ snapshots: dependencies: buffer-crc32: 0.2.13 + yn@3.1.1: {} + yocto-queue@0.1.0: {} - yocto-queue@1.2.1: {} + yocto-queue@1.2.2: {} + + yoctocolors@2.1.2: {} + + yup@1.4.0: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 yup@1.6.1: dependencies: @@ -48360,7 +54033,7 @@ snapshots: zenscroll@4.0.2: {} - zod-to-json-schema@3.24.6(zod@3.25.76): + zod-to-json-schema@3.25.0(zod@3.25.76): dependencies: zod: 3.25.76 @@ -48368,17 +54041,17 @@ snapshots: zod@4.1.11: {} - zustand@5.0.7(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.5.0(react@18.2.0)): + zustand@5.0.9(@types/react@18.2.0)(react@18.2.0)(use-sync-external-store@1.6.0(react@18.2.0)): optionalDependencies: '@types/react': 18.2.0 react: 18.2.0 - use-sync-external-store: 1.5.0(react@18.2.0) + use-sync-external-store: 1.6.0(react@18.2.0) - zustand@5.0.7(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)): + zustand@5.0.9(@types/react@18.2.0)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)): optionalDependencies: '@types/react': 18.2.0 react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + use-sync-external-store: 1.6.0(react@19.1.0) zwitch@1.0.5: {} diff --git a/package.json b/package.json index cab9d8f485f..70c0fe585c0 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "@eslint/plugin-kit": "^0.3.4", "on-headers": "^1.1.0", "form-data": "^4.0.4", - "tmp": "^0.2.4" + "tmp": "^0.2.4", + "express": "^4.22.1" } }, "scripts": { diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 192a8c6e325..da58d9b975c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,3 +6,4 @@ packages: - "workspaces/bi/*" - 'workspaces/common-libs/*' - 'workspaces/mi/*' + - 'workspaces/mcp-inspector/*' diff --git a/rush.json b/rush.json index e66b7a74a49..33a7790dbd0 100644 --- a/rush.json +++ b/rush.json @@ -237,21 +237,20 @@ * The list of shell commands to run before the Rush build command starts */ "preRushBuild": [ - "npm run init-submodules", - "cd workspaces/mi/mi-extension && pnpm run download-ls", - "cd workspaces/ballerina/ballerina-extension && pnpm run download-ls" + "npm run init-submodules" ], /** * The list of shell commands to run after the Rush build command finishes */ "postRushBuild": [ - "cd workspaces/ballerina/ballerina-extension && pnpm run copyVSIXToRoot", - "cd workspaces/wso2-platform/wso2-platform-extension && pnpm run copyVSIXToRoot", - "cd workspaces/choreo/choreo-extension && pnpm run copyVSIXToRoot", + "cd workspaces/ballerina/ballerina-extension && pnpm run copyVSIXToRoot", + "cd workspaces/wso2-platform/wso2-platform-extension && pnpm run copyVSIXToRoot", + "cd workspaces/choreo/choreo-extension && pnpm run copyVSIXToRoot", "cd workspaces/mi/mi-extension && pnpm run copyVSIXToRoot", "cd workspaces/bi/bi-extension && pnpm run copyVSIXToRoot", "cd workspaces/apk/apk-extension && pnpm run copyVSIXToRoot", - // "cd workspaces/api-designer/api-designer-extension && pnpm run copyVSIXToRoot" + "cd workspaces/api-designer/api-designer-extension && pnpm run copyVSIXToRoot", + "cd workspaces/mcp-inspector/mcp-inspector-extension && pnpm run copyVSIXToRoot" ] }, /** @@ -485,6 +484,11 @@ "projectFolder": "workspaces/ballerina/ballerina-visualizer", "versionPolicyName": "ballerina-extension" }, + { + "packageName": "@wso2/trace-visualizer", + "projectFolder": "workspaces/ballerina/trace-visualizer", + "versionPolicyName": "ballerina-extension" + }, { "packageName": "@wso2/overview-view", "projectFolder": "workspaces/ballerina/overview-view", @@ -590,18 +594,27 @@ "packageName": "@wso2/type-editor", "projectFolder": "workspaces/ballerina/type-editor", "versionPolicyName": "ballerina-extension" + }, + { + "packageName": "@wso2/api-designer-core", + "projectFolder": "workspaces/api-designer/api-designer-core" + }, + { + "packageName": "@wso2/api-designer-visualizer", + "projectFolder": "workspaces/api-designer/api-designer-visualizer" + }, + { + "packageName": "@wso2/api-designer-rpc-client", + "projectFolder": "workspaces/api-designer/api-designer-rpc-client" + }, + { + "packageName": "api-designer", + "projectFolder": "workspaces/api-designer/api-designer-extension", + "versionPolicyName": "api-designer-extension" + }, + { + "packageName": "mcp-server-inspector", + "projectFolder": "workspaces/mcp-inspector/mcp-inspector-extension" } - // { - // "packageName": "@wso2/api-designer-core", - // "projectFolder": "workspaces/api-designer/api-designer-core" - // }, - // { - // "packageName": "@wso2/api-designer-visualizer", - // "projectFolder": "workspaces/api-designer/api-designer-visualizer" - // }, - // { - // "packageName": "@wso2/api-designer-rpc-client", - // "projectFolder": "workspaces/api-designer/api-designer-rpc-client" - // } ] } diff --git a/workspaces/api-designer/api-designer-extension/package.json b/workspaces/api-designer/api-designer-extension/package.json index bd6f836deca..b52074ee9bf 100644 --- a/workspaces/api-designer/api-designer-extension/package.json +++ b/workspaces/api-designer/api-designer-extension/package.json @@ -83,7 +83,7 @@ "clean": "rimraf ./dist", "compile": "tsc -p .", "watch": "tsc -p . -w", - "package": "if [ $isPreRelease = true ]; then vsce package --no-dependencies --pre-release; else vsce package --no-dependencies; fi", + "package": "node ../../common-libs/scripts/package-vsix.js", "build": "pnpm clean && pnpm run copyFonts && webpack --mode production --devtool hidden-source-map && pnpm run package && pnpm run postbuild", "compile-tests": "pnpm run compile", "watch-tests": "pnpm run watch", @@ -113,7 +113,7 @@ }, "dependencies": { "copyfiles": "^2.4.1", - "@vscode/vsce": "~2.21.0", + "@vscode/vsce": "^3.7.0", "vscode-messenger": "^0.4.5", "vscode-messenger-common": "^0.4.5", "@wso2/api-designer-core": "workspace:*", @@ -136,6 +136,6 @@ "cors-anywhere": "^0.4.4", "@apidevtools/json-schema-ref-parser": "11.6.1", "adm-zip": "~0.5.14", - "js-yaml": "~4.1.0" + "js-yaml": "~4.1.1" } } diff --git a/workspaces/api-designer/api-designer-extension/src/project-explorer/project-explorer-provider.ts b/workspaces/api-designer/api-designer-extension/src/project-explorer/project-explorer-provider.ts index b2d5941f161..cb710ccb1cc 100644 --- a/workspaces/api-designer/api-designer-extension/src/project-explorer/project-explorer-provider.ts +++ b/workspaces/api-designer/api-designer-extension/src/project-explorer/project-explorer-provider.ts @@ -37,8 +37,8 @@ export class ProjectExplorerEntry extends vscode.TreeItem { this.iconPath = new vscode.ThemeIcon(icon); } else if (icon) { this.iconPath = { - light: path.join(extensionContext.extensionPath, 'assets', `light-${icon}.svg`), - dark: path.join(extensionContext.extensionPath, 'assets', `dark-${icon}.svg`) + light: vscode.Uri.file(path.join(extensionContext.extensionPath, 'assets', `light-${icon}.svg`)), + dark: vscode.Uri.file(path.join(extensionContext.extensionPath, 'assets', `dark-${icon}.svg`)) }; } } diff --git a/workspaces/api-designer/api-designer-visualizer/.gitignore b/workspaces/api-designer/api-designer-visualizer/.gitignore new file mode 100644 index 00000000000..dfd992064a3 --- /dev/null +++ b/workspaces/api-designer/api-designer-visualizer/.gitignore @@ -0,0 +1,3 @@ +lib/ +storybook-static/ +.storybook/fonts/ diff --git a/workspaces/api-designer/api-designer-visualizer/package.json b/workspaces/api-designer/api-designer-visualizer/package.json index e0a478a09f0..911a8da70de 100644 --- a/workspaces/api-designer/api-designer-visualizer/package.json +++ b/workspaces/api-designer/api-designer-visualizer/package.json @@ -26,7 +26,7 @@ "@wso2/font-wso2-vscode": "workspace:*", "react-dom": "18.2.0", "react-markdown": "~9.0.1", - "js-yaml": "~4.1.0", + "js-yaml": "~4.1.1", "process": "~0.11.10", "path": "~0.12.7", "@hookform/resolvers": "~3.3.4", diff --git a/workspaces/api-designer/api-designer-visualizer/src/components/OpenAPIComponents/OpenAPI/OpenAPI.tsx b/workspaces/api-designer/api-designer-visualizer/src/components/OpenAPIComponents/OpenAPI/OpenAPI.tsx index 0ba4b62c835..e56602b51fd 100644 --- a/workspaces/api-designer/api-designer-visualizer/src/components/OpenAPIComponents/OpenAPI/OpenAPI.tsx +++ b/workspaces/api-designer/api-designer-visualizer/src/components/OpenAPIComponents/OpenAPI/OpenAPI.tsx @@ -98,7 +98,7 @@ export function OpenAPI(props: OverviewProps) { {componetName === PathID.OVERVIEW && ( )} - {componetName === PathID.PARAMETERS && ( + {componetName === PathID.PATHS && ( handleOpenAPIChange({ ...openAPI, paths })} diff --git a/workspaces/apk/apk-extension/package.json b/workspaces/apk/apk-extension/package.json index eabee0bcc55..f08b7fffdf4 100644 --- a/workspaces/apk/apk-extension/package.json +++ b/workspaces/apk/apk-extension/package.json @@ -51,7 +51,7 @@ "pretest": "npm run compile && npm run lint", "lint": "eslint src --ext ts", "test": "node ./out/test/runTest.js", - "build": "if [ $isPreRelease = true ]; then vsce package --no-dependencies --pre-release; else vsce package --no-dependencies; fi && pnpm run postbuild", + "build": "node ../../common-libs/scripts/package-vsix.js && pnpm run postbuild", "postbuild": "pnpm run copyVSIX", "copyVSIX": "copyfiles *.vsix ./vsix", "copyVSIXToRoot": "copyfiles -f ./vsix/* ../../.." @@ -65,11 +65,11 @@ "@typescript-eslint/parser": "~5.48.2", "@vscode/test-electron": "^2.3.2", "eslint": "^8.32.0", - "glob": "^8.1.0", + "glob": "^11.1.0", "mocha": "^10.2.0", "typescript": "5.8.3", - "vsce": "^2.15.0", - "copyfiles": "^2.4.1" + "copyfiles": "^2.4.1", + "@vscode/vsce": "^3.7.0" } } diff --git a/workspaces/apk/apk-extension/src/test/suite/index.ts b/workspaces/apk/apk-extension/src/test/suite/index.ts index c7fbb180b94..0532f893425 100644 --- a/workspaces/apk/apk-extension/src/test/suite/index.ts +++ b/workspaces/apk/apk-extension/src/test/suite/index.ts @@ -18,7 +18,7 @@ import * as path from 'path'; import * as Mocha from 'mocha'; -import * as glob from 'glob'; +import { glob } from 'glob'; export function run(): Promise { // Create the mocha test @@ -29,11 +29,9 @@ export function run(): Promise { const testsRoot = path.resolve(__dirname, '..'); - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } + return new Promise(async (c, e) => { + try { + const files = await glob('**/**.test.js', { cwd: testsRoot }); // Add files to the test suite files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); @@ -51,6 +49,8 @@ export function run(): Promise { console.error(err); e(err); } - }); + } catch (err) { + e(err); + } }); } diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts b/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts index 6a3cf4786a9..cda639857b3 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/bi.ts @@ -97,6 +97,7 @@ export type ParentMetadata = { accessor?: string; parameters?: string[]; return?: string; + isServiceFunction?: boolean; }; export type ToolData = { @@ -112,8 +113,8 @@ export type AgentData = { }; export type MemoryData = { - name: string; type: string; + size: string }; export type Imports = { @@ -185,6 +186,7 @@ export type CodeData = { kind?: string; originalName?: string; dependentProperty?: string[]; + data?: { [key: string]: CodeData | string }; }; export type Branch = { @@ -254,21 +256,49 @@ export enum FUNCTION_TYPE { ALL = "all", } -export interface ProjectStructureResponse { +/** + * Represents the directory structure of artifacts in a project. + */ +export type ProjectDirectoryMap = { + [DIRECTORY_MAP.SERVICE]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.AUTOMATION]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.LISTENER]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.FUNCTION]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.CONNECTION]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.TYPE]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.CONFIGURABLE]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.DATA_MAPPER]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.NP_FUNCTION]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.AGENTS]: ProjectStructureArtifactResponse[]; + [DIRECTORY_MAP.LOCAL_CONNECTORS]: ProjectStructureArtifactResponse[]; +}; + +/** + * Represents a single project's structure with its artifacts organized by directory type. + */ +export interface ProjectStructure { projectName: string; - directoryMap: { - [DIRECTORY_MAP.SERVICE]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.AUTOMATION]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.LISTENER]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.FUNCTION]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.CONNECTION]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.TYPE]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.CONFIGURABLE]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.DATA_MAPPER]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.NP_FUNCTION]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.AGENTS]: ProjectStructureArtifactResponse[]; - [DIRECTORY_MAP.LOCAL_CONNECTORS]: ProjectStructureArtifactResponse[]; - }; + projectPath?: string; + projectTitle?: string; + directoryMap: ProjectDirectoryMap; +} + +/** + * Unified response structure for both single projects and multi-project workspaces. + * + * For single project: + * - workspaceName: undefined + * - projects: array with single project + * + * For workspace with multiple projects: + * - workspaceName: name of the workspace + * - projects: array with multiple projects + */ +export interface ProjectStructureResponse { + workspaceName?: string; + workspaceTitle?: string; + workspacePath?: string; + projects: ProjectStructure[]; } export interface ProjectStructureArtifactResponse { @@ -321,6 +351,7 @@ export type NodePropertyKey = | "expression" | "functionName" | "functionNameDescription" + | "instructions" | "isIsolated" | "maxIter" | "memory" @@ -332,12 +363,16 @@ export type NodePropertyKey = | "parameters" | "path" | "patterns" + | "permittedTools" | "prompt" | "query" + | "role" | "scope" + | "serverUrl" | "sessionId" | "size" | "statement" + | "store" | "systemPrompt" | "targetType" | "tools" @@ -390,20 +425,23 @@ export type NodeKind = | "LV_EXPRESSION" | "MATCH" | "METHOD_CALL" + | "MEMORY" + | "MEMORY_STORE" | "MODEL_PROVIDER" | "MODEL_PROVIDERS" | "VARIABLE" | "VECTOR_STORE" | "VECTOR_STORES" - | "VECTOR_KNOWLEDGE_BASE" - | "VECTOR_KNOWLEDGE_BASE_CALL" - | "VECTOR_KNOWLEDGE_BASES" + | "KNOWLEDGE_BASE" + | "KNOWLEDGE_BASE_CALL" + | "KNOWLEDGE_BASES" | "EMBEDDING_PROVIDER" | "EMBEDDING_PROVIDERS" | "DATA_LOADER" | "DATA_LOADERS" | "CHUNKER" | "CHUNKERS" + | "MCP_TOOL_KIT" | "NEW_CONNECTION" | "NEW_DATA" | "NP_FUNCTION" diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/component-diagram.ts b/workspaces/ballerina/ballerina-core/src/interfaces/component-diagram.ts index f29120c45bd..fdf6258c392 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/component-diagram.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/component-diagram.ts @@ -46,6 +46,7 @@ export type CDConnection = { enableFlowModel: boolean; sortText: string; icon?: string; + kind?: string; }; export type CDListener = { diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts b/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts index cf21963ae70..c86aeebd74d 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts @@ -32,7 +32,6 @@ export const BI_COMMANDS = { BI_RUN_PROJECT: 'BI.project.run', BI_DEBUG_PROJECT: 'BI.project.debug', REFRESH_COMMAND: 'BI.project-explorer.refresh', - FOCUS_PROJECT_EXPLORER: 'BI.project-explorer.focus', PROJECT_EXPLORER: 'BI.project-explorer', ADD_CONNECTIONS: 'BI.project-explorer.add-connection', ADD_CUSTOM_CONNECTOR: 'BI.project-explorer.add-custom-connector', @@ -46,12 +45,15 @@ export const BI_COMMANDS = { VIEW_CONFIGURATION: 'BI.project-explorer.view-configuration', ADD_PROJECT: 'BI.project-explorer.add', SHOW_OVERVIEW: 'BI.project-explorer.overview', - SWITCH_PROJECT: 'BI.project-explorer.switch-project', ADD_DATA_MAPPER: 'BI.project-explorer.add-data-mapper', BI_EDIT_TEST_FUNCTION: 'BI.test.edit.function', BI_ADD_TEST_FUNCTION: 'BI.test.add.function', BI_EDIT_TEST_FUNCTION_DEF: 'BI.test.edit.function.def', ADD_NATURAL_FUNCTION: 'BI.project-explorer.add-natural-function', TOGGLE_TRACE_LOGS: 'BI.toggle.trace.logs', - DEVANT_PUSH_TO_CLOUD: 'BI.devant.push.cloud' + DEVANT_PUSH_TO_CLOUD: 'BI.devant.push.cloud', + CREATE_BI_PROJECT: 'BI.project.createBIProjectPure', + CREATE_BI_MIGRATION_PROJECT: 'BI.project.createBIProjectMigration', + ADD_INTEGRATION: 'BI.project-explorer.add-integration', + NOTIFY_PROJECT_EXPLORER: 'BI.project-explorer.notify', }; diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts b/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts index 1e2c3aa789f..6ccb86a8d48 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/data-mapper.ts @@ -24,7 +24,14 @@ export enum TypeKind { Record = "record", Array = "array", String = "string", + StringChar = "string:Char", Int = "int", + IntSigned8 = "int:Signed8", + IntSigned16 = "int:Signed16", + IntSigned32 = "int:Signed32", + IntUnsigned8 = "int:Unsigned8", + IntUnsigned16 = "int:Unsigned16", + IntUnsigned32 = "int:Unsigned32", Float = "float", Decimal = "decimal", Boolean = "boolean", @@ -50,8 +57,10 @@ export enum IntermediateClauseType { LET = "let", WHERE = "where", FROM = "from", - ORDER_BY = "order by", - LIMIT = "limit" + ORDER_BY = "order-by", + LIMIT = "limit", + JOIN = "join", + GROUP_BY = "group-by" } export enum ResultClauseType { @@ -86,8 +95,8 @@ export interface IOType { members?: IOType[]; defaultValue?: unknown; optional?: boolean; - focusedMemberId?: string; isFocused?: boolean; + isSeq?: boolean; isRecursive?: boolean; isDeepNested?: boolean; ref?: string; @@ -104,24 +113,27 @@ export interface Mapping { isQueryExpression?: boolean; isFunctionCall?: boolean; functionRange?: LineRange; + functionContent?: string; + elementAccessIndex?: string[]; } export interface ExpandedDMModel { inputs: IOType[]; output: IOType; - subMappings?: IOType[]; + subMappings?: IOType[] | Mapping[]; mappings: Mapping[]; source: string; rootViewId: string; query?: Query; mapping_fields?: Record; triggerRefresh?: boolean; + focusInputRootMap?: Record; } export interface DMModel { inputs: IORoot[]; output: IORoot; - subMappings?: IORoot[]; + subMappings?: IORoot[] | Mapping[]; refs: Record; mappings: Mapping[]; view: string; @@ -129,6 +141,9 @@ export interface DMModel { focusInputs?: Record; mapping_fields?: Record; triggerRefresh?: boolean; + traversingRoot?: string; + focusInputRootMap?: Record; + groupById?: string; } export interface ModelState { @@ -158,10 +173,12 @@ export interface IOTypeField { displayName?: string; member?: IOTypeField; members?: IOTypeField[]; + fields?: IOTypeField[]; defaultValue?: unknown; optional?: boolean; ref?: string; focusExpression?: string; + isSeq?: boolean; typeInfo?: TypeInfo; } @@ -179,7 +196,7 @@ export interface Query { output: string, inputs: string[]; diagnostics?: DMDiagnostic[]; - fromClause: FromClause; + fromClause: IntermediateClause; intermediateClauses?: IntermediateClause[]; resultClause: ResultClause; } @@ -195,6 +212,9 @@ export interface IntermediateClauseProps { type?: string; expression: string; order?: "ascending" | "descending"; + lhsExpression?: string; + rhsExpression?: string; + isOuter?: boolean; } export interface IntermediateClause { diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts b/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts index 38500687843..913b4a08e61 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/extended-lang-client.ts @@ -23,14 +23,13 @@ import { DocumentIdentifier, LinePosition, LineRange, NOT_SUPPORTED_TYPE, Positi import { BallerinaConnectorInfo, BallerinaExampleCategory, BallerinaModuleResponse, BallerinaModulesRequest, BallerinaTrigger, BallerinaTriggerInfo, BallerinaConnector, ExecutorPosition, ExpressionRange, JsonToRecordMapperDiagnostic, MainTriggerModifyRequest, NoteBookCellOutputValue, NotebookCellMetaInfo, OASpec, PackageSummary, PartialSTModification, ResolvedTypeForExpression, ResolvedTypeForSymbol, STModification, SequenceModel, SequenceModelDiagnostic, ServiceTriggerModifyRequest, SymbolDocumentation, XMLToRecordConverterDiagnostic, TypeField, ComponentInfo } from "./ballerina"; import { ModulePart, STNode } from "@wso2/syntax-tree"; import { CodeActionParams, DefinitionParams, DocumentSymbolParams, ExecuteCommandParams, InitializeParams, InitializeResult, LocationLink, RenameParams } from "vscode-languageserver-protocol"; -import { Category, Flow, FlowNode, CodeData, ConfigVariable, FunctionNode, Property, PropertyTypeMemberInfo, DIRECTORY_MAP, Imports } from "./bi"; +import { Category, Flow, FlowNode, CodeData, ConfigVariable, FunctionNode, Property, PropertyTypeMemberInfo, DIRECTORY_MAP, Imports, NodeKind } from "./bi"; import { ConnectorRequest, ConnectorResponse } from "../rpc-types/connector-wizard/interfaces"; import { SqFlow } from "../rpc-types/sequence-diagram/interfaces"; -import { FieldType, FunctionModel, ListenerModel, ServiceClassModel, ServiceModel } from "./service"; +import { FieldType, FunctionModel, ListenerModel, ServiceClassModel, ServiceInitModel, ServiceModel } from "./service"; import { CDModel } from "./component-diagram"; import { DMModel, ExpandedDMModel, IntermediateClause, Mapping, VisualizableField, FnMetadata, ResultClauseType, IOType } from "./data-mapper"; import { DataMapperMetadata, SCOPE } from "../state-machine-types"; -import { Attachment, DataMappingRecord, ImportInfo } from "../rpc-types/ai-panel/interfaces"; import { ToolParameters } from "../rpc-types/ai-agent/interfaces"; export interface DidOpenParams { @@ -306,6 +305,7 @@ export interface DataMapperBase { varName?: string; targetField?: string; position?: LinePosition; + customFunctionsFilePath?: string; } export interface DataMapperSourceRequest extends DataMapperBase { @@ -318,13 +318,7 @@ export interface AllDataMapperSourceRequest extends DataMapperBase { } export interface ExtendedDataMapperMetadata extends DataMapperMetadata { - mappingsModel: ExpandedDMModel; -} - -export interface MetadataWithAttachments { - metadata: ExtendedDataMapperMetadata; - attachments?: Attachment[]; - useTemporaryFile?: boolean; + mappingsModel: DMModel; } export interface VisualizableFieldsRequest { @@ -344,20 +338,6 @@ export interface DataMapperSourceResponse { userAborted?: boolean; } -export interface CreateTempFileRequest { - inputs: DataMappingRecord[]; - output: DataMappingRecord; - functionName: string; - inputNames: string[]; - imports: ImportInfo[]; -} - -export interface DatamapperModelContext { - documentUri?: string; - identifier?: string; - dataMapperMetadata?: any; -} - export interface ExpandModelOptions { processInputs?: boolean; processOutput?: boolean; @@ -376,6 +356,7 @@ export interface ExpandedDMModelResponse { success: boolean; error?: string; } + export interface ProcessTypeReferenceRequest { ref: string; fieldId: string; @@ -493,8 +474,10 @@ export interface GetDataMapperCodedataResponse { export interface PropertyRequest { filePath: string; codedata: CodeData; - propertyKey: string, targetField: string; +} + +export interface FieldPropertyRequest extends PropertyRequest { fieldId: string; } @@ -502,6 +485,17 @@ export interface PropertyResponse { property: Property; } +export interface ClausePositionRequest { + filePath: string; + codedata: CodeData; + targetField: string; + index: number; +} + +export interface ClausePositionResponse { + position: LinePosition; +} + export interface GraphqlDesignServiceParams { filePath: string; startLine: LinePosition; @@ -587,7 +581,7 @@ export interface ExecutorPositions { // Test Manager related interfaces export interface TestsDiscoveryRequest { - filePath: string; + projectPath: string; } export interface TestsDiscoveryResponse { @@ -851,6 +845,7 @@ export interface BISourceCodeRequest { flowNode: FlowNode | FunctionNode; isConnector?: boolean; isFunctionNodeUpdate?: boolean; + isHelperPaneChange?: boolean; } export type BISourceCodeResponse = { @@ -924,11 +919,12 @@ export type SearchKind = | "MODEL_PROVIDER" | "VECTOR_STORE" | "EMBEDDING_PROVIDER" - | "VECTOR_KNOWLEDGE_BASE" + | "KNOWLEDGE_BASE" | "DATA_LOADER" | "CHUNKER" | "AGENT" - | "MEMORY_MANAGER" + | "MEMORY" + | "MEMORY_STORE" | "AGENT_TOOL" | "CLASS_INIT"; @@ -943,6 +939,22 @@ export type BISearchResponse = { categories: Category[]; } +export type BISearchNodesRequest = { + filePath: string; + position?: LinePosition; + queryMap?: SearchNodesQueryParams; +} + +export type BISearchNodesResponse = { + output: FlowNode[]; + error: string; +} + +export type SearchNodesQueryParams = { + kind?: NodeKind; + exactMatch?: string; +} + export type BIGetEnclosedFunctionRequest = { filePath: string; position: LinePosition; @@ -1105,6 +1117,10 @@ export interface ExpressionCompletionItem { insertText: string; insertTextFormat: number; additionalTextEdits?: TextEdit[]; + labelDetails?: { + description?: string; + detail: string; + }; } export type ExpressionCompletionsResponse = ExpressionCompletionItem[]; @@ -1154,6 +1170,7 @@ export interface VisibleTypeItem { description: string; detail: string; } + detail?: string; } export type VisibleTypesResponse = VisibleTypeItem[]; @@ -1175,6 +1192,18 @@ export interface Reference { range: Range; } +export interface FormDiagnosticsRequest { + filePath: string; + flowNode: FlowNode | FunctionNode; + isConnector?: boolean; + isFunctionNodeUpdate?: boolean; +} + +export interface FormDiagnosticsResponse { + flowNode?: FlowNode | FunctionNode; + diagnostics?: Diagnostic[]; +} + export interface ExpressionDiagnosticsRequest { filePath: string; context: ExpressionEditorContext; @@ -1230,6 +1259,14 @@ export interface ImportIntegrationRequest { parameters?: Record; } +export interface ProjectMigrationResult { + projectName: string; + textEdits: { + [key: string]: string; + }; + report: string; +} + export interface ImportIntegrationResponse { error: string; textEdits: { @@ -1317,6 +1354,16 @@ export interface AddFieldRequest { }; } +export interface ExpressionTokensRequest { + expression: string; + filePath: string; + position?: LinePosition; +} + +export interface ExpressionTokensResponse { + data: number[]; +} + export interface SourceEditResponse { textEdits?: { [key: string]: TextEdit[]; @@ -1368,6 +1415,17 @@ export interface ServiceClassModelResponse { stacktrace?: string; } +export interface ServiceModelInitResponse { + serviceInitModel?: ServiceInitModel; + errorMsg?: string; + stacktrace?: string; +} + +export interface ServiceInitSourceRequest { + filePath: string; + serviceInitModel: ServiceInitModel; +} + // <-------- Type Related -------> export interface Type { @@ -1396,6 +1454,8 @@ export interface TypeFunctionModel { returnType?: Type | string; refs: string[]; imports?: Imports; + isGraphqlId?: boolean; + properties?: { [key: string]: any }; } export interface TypeMetadata { @@ -1430,6 +1490,7 @@ export interface Member { optional?: boolean; imports?: Imports; readonly?: boolean; + isGraphqlId?: boolean; } export interface GetGraphqlTypeRequest { @@ -1618,6 +1679,7 @@ export interface FunctionSourceCodeRequest { lineRange: LineRange; // For the entire service }; service?: ServiceModel; + artifactType?: DIRECTORY_MAP; } export interface ResourceSourceCodeResponse { textEdits: { @@ -1637,11 +1699,7 @@ export interface ResponseCode { statusCode: string; hasBody?: boolean; } -export interface ResourceReturnTypesResponse { - completions: ResponseCode[]; -} - - +export type ResourceReturnTypesResponse = VisibleTypeItem[]; // <-------- Service Designer Related -------> export interface FunctionFromSourceRequest { @@ -1730,8 +1788,7 @@ export interface AIToolResponse { export interface McpToolsRequest { serviceUrl?: string; - configs?: Record; - filePath?: string; + accessToken?: string; } export interface McpToolsResponse { @@ -1739,7 +1796,7 @@ export interface McpToolsResponse { name: string; description?: string; }>; - error?: string; + errorMsg?: string; } export interface AIGentToolsRequest { @@ -1847,6 +1904,11 @@ export enum ARTIFACT_TYPE { Variables = "Variables" } +export enum PROJECT_KIND { + WORKSPACE_PROJECT = "WORKSPACE_PROJECT", + BUILD_PROJECT = "BUILD_PROJECT" +} + export interface Artifacts { [ARTIFACT_TYPE.Functions]: Record; [ARTIFACT_TYPE.Connections]: Record; @@ -1866,10 +1928,26 @@ export interface ArtifactsNotification { export interface ProjectArtifactsRequest { projectPath: string; } + export interface ProjectArtifacts { artifacts: Artifacts; } +export interface ProjectInfoRequest { + projectPath: string; +} + +export interface ProjectInfo { + projectKind: PROJECT_KIND; + name?: string; + title?: string; + orgName?: string; + org?: string; + version?: string; + projectPath?: string; + children?: ProjectInfo[]; +}; + // <------------ BI INTERFACES ---------> export interface BaseLangClientInterface { @@ -1899,6 +1977,7 @@ export interface BIInterface extends BaseLangClientInterface { getComponentsFromContent: (params: ComponentsFromContent) => Promise; getSignatureHelp: (params: SignatureHelpRequest) => Promise; getVisibleTypes: (params: VisibleTypesRequest) => Promise; + getFormDiagnostics: (params: FormDiagnosticsRequest) => Promise; getExpressionDiagnostics: (params: ExpressionDiagnosticsRequest) => Promise; getOpenApiGeneratedModules: (params: OpenAPIGeneratedModulesRequest) => Promise @@ -1914,7 +1993,9 @@ export interface BIInterface extends BaseLangClientInterface { getHttpResourceModel: (params: HttpResourceModelRequest) => Promise; addResourceSourceCode: (params: FunctionSourceCodeRequest) => Promise; addFunctionSourceCode: (params: FunctionSourceCodeRequest) => Promise; - getResourceReturnTypes: (params: ResourceReturnTypesRequest) => Promise; + getResourceReturnTypes: (params: ResourceReturnTypesRequest) => Promise; + getServiceInitModel: (params: ServiceModelRequest) => Promise; + createServiceAndListener: (params: ServiceInitSourceRequest) => Promise; // Function APIs getFunctionNode: (params: FunctionNodeRequest) => Promise; @@ -1964,5 +2045,6 @@ export interface ExtendedLangClientInterface extends BIInterface { updateStatusBar(): void; getDidOpenParams(): DidOpenParams; getProjectArtifacts(params: ProjectArtifactsRequest): Promise; + getProjectInfo(params: ProjectInfoRequest): Promise; openConfigToml(params: OpenConfigTomlRequest): Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/service.ts b/workspaces/ballerina/ballerina-core/src/interfaces/service.ts index 25dcfab394e..f631f2f1411 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/service.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/service.ts @@ -104,6 +104,32 @@ export interface StatusCodeResponse extends PropertyModel { name: PropertyModel; type: PropertyModel; headers: PropertyModel; + mediaType: PropertyModel; +} + +export interface HttpPayloadContext { + protocol: "HTTP"; + serviceName: string; + serviceBasePath: string; + resourceBasePath?: string; + resourceMethod?: string; + resourceDocumentation?: string; + paramDetails?: ParamDetails[]; +} + +export interface MessageQueuePayloadContext { + protocol: "MESSAGE_BROKER"; + serviceName: string; + queueOrTopic?: string; + messageDocumentation?: string; +} + +export type PayloadContext = HttpPayloadContext | MessageQueuePayloadContext; + +export interface ParamDetails { + name: string; + type: string; + defaulValue?: string; } interface MetaData { @@ -144,16 +170,18 @@ export interface PropertyModel { properties?: ConfigProperties; addNewButton?: boolean; typeMembers?: PropertyTypeMemberInfo[]; - httpParamType?: "QUERY" | "Header" | "PAYLOAD"; + httpParamType?: "QUERY" | "HEADER" | "PAYLOAD"; diagnostics?: DiagnosticMessage[]; imports?: Imports; hidden?: boolean; + isGraphqlId?: boolean; } export interface ParameterModel extends PropertyModel { - kind?: "REQUIRED" | "OPTIONAL", + kind?: "REQUIRED" | "OPTIONAL" | "DATA_BINDING"; type?: PropertyModel; name?: PropertyModel; + headerName?: PropertyModel; documentation?: PropertyModel; } @@ -161,3 +189,17 @@ export interface ParameterModel extends PropertyModel { export interface ConfigProperties { [key: string]: PropertyModel | ParameterModel; } + +export interface ServiceInitModel { + id: string; + displayName: string; + description: string; + orgName: string; + packageName: string; + moduleName: string; + version: string; + type: string; + icon: string; + properties: { [key: string]: PropertyModel }; +} + diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts index 1c1232467a0..4a2951937ec 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/index.ts @@ -16,9 +16,11 @@ * under the License. */ -import { ChatReqMessage, ChatRespMessage } from "./interfaces"; +import { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus } from "./interfaces"; export interface AgentChatAPI { getChatMessage: (params: ChatReqMessage) => Promise; abortChatRequest: () => void; + getTracingStatus: () => Promise; + showTraceView: (params: TraceInput) => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts index 24404bb6748..4e6c828156e 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/interfaces.ts @@ -23,3 +23,11 @@ export interface ChatReqMessage { export interface ChatRespMessage { message: string; } + +export interface TraceStatus { + enabled: boolean; +} + +export interface TraceInput { + message: string; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts index 4758f7610be..13cd72be4a5 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/agent-chat/rpc-type.ts @@ -14,11 +14,14 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. + * + * THIS FILE INCLUDES AUTO GENERATED CODE */ - -import { ChatReqMessage, ChatRespMessage } from "./interfaces"; +import { ChatReqMessage, ChatRespMessage, TraceInput, TraceStatus } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; const _preFix = "agent-chat"; export const getChatMessage: RequestType = { method: `${_preFix}/getChatMessage` }; export const abortChatRequest: NotificationType = { method: `${_preFix}/abortChatRequest` }; +export const getTracingStatus: RequestType = { method: `${_preFix}/getTracingStatus` }; +export const showTraceView: NotificationType = { method: `${_preFix}/showTraceView` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-agent/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-agent/interfaces.ts index e2194c847a1..add05a31504 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-agent/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-agent/interfaces.ts @@ -79,13 +79,8 @@ export interface AIAgentResponse { export interface McpToolUpdateRequest { agentFlowNode: FlowNode; - serviceUrl: string; - serverName: string; selectedTools: string[]; - formValues?: FlowNode; // Optional: form values from AddMcpServer - updatedNode?: FlowNode; // Optional: updated node for toolkit edits - mcpTools?: any[]; // Optional: list of MCP tools - codedata?: CodeData; // Optional: code data for MCP toolkit + updatedNode?: FlowNode; } export interface ToolParameters { diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts index f0e1ad75686..1c56541b121 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/index.ts @@ -15,9 +15,9 @@ * specific language governing permissions and limitations * under the License. */ -import { AllDataMapperSourceRequest, CreateTempFileRequest, DatamapperModelContext, DataMapperModelResponse, ExtendedDataMapperMetadata, MetadataWithAttachments } from "../../interfaces/extended-lang-client"; +import { DataMapperModelResponse } from "../../interfaces/extended-lang-client"; import { LoginMethod } from "../../state-machine-types"; -import { AddToProjectRequest, GetFromFileRequest, DeleteFromProjectRequest, GenerateMappingsResponse, NotifyAIMappingsRequest, ProjectSource, ProjectDiagnostics, PostProcessRequest, PostProcessResponse, GenerateTypesFromRecordRequest, GenerateTypesFromRecordResponse, FetchDataRequest, FetchDataResponse, TestGenerationRequest, TestGenerationResponse, TestGenerationMentions, AIChatSummary, DeveloperDocument, RequirementSpecification, LLMDiagnostics, GetModuleDirParams, AIPanelPrompt, AIMachineSnapshot, SubmitFeedbackRequest, RelevantLibrariesAndFunctionsRequest, GenerateOpenAPIRequest, GenerateCodeRequest, TestPlanGenerationRequest, TestGeneratorIntermediaryState, RepairParams, RelevantLibrariesAndFunctionsResponse, CodeSegment, DocGenerationRequest, AddFilesToProjectRequest } from "./interfaces"; +import { AddToProjectRequest, GetFromFileRequest, DeleteFromProjectRequest, ProjectSource, ProjectDiagnostics, PostProcessRequest, PostProcessResponse, FetchDataRequest, FetchDataResponse, TestGenerationRequest, TestGenerationResponse, TestGenerationMentions, AIChatSummary, DeveloperDocument, RequirementSpecification, LLMDiagnostics, GetModuleDirParams, AIPanelPrompt, AIMachineSnapshot, SubmitFeedbackRequest, RelevantLibrariesAndFunctionsRequest, GenerateOpenAPIRequest, GenerateCodeRequest, TestPlanGenerationRequest, TestGeneratorIntermediaryState, RepairParams, RelevantLibrariesAndFunctionsResponse, DocGenerationRequest, AddFilesToProjectRequest, MetadataWithAttachments, DatamapperModelContext, ProcessContextTypeCreationRequest, ProcessMappingParametersRequest } from "./interfaces"; export interface AIPanelAPI { // ================================== @@ -35,18 +35,14 @@ export interface AIPanelAPI { getFromFile: (params: GetFromFileRequest) => Promise; getFileExists: (params: GetFromFileRequest) => Promise; deleteFromProject: (params: DeleteFromProjectRequest) => void; - notifyAIMappings: (params: NotifyAIMappingsRequest) => Promise; - stopAIMappings: () => Promise; getShadowDiagnostics: (params: ProjectSource) => Promise; checkSyntaxError: (params: ProjectSource) => Promise; clearInitialPrompt: () => void; - openAIMappingChatWindow: (params: DataMapperModelResponse) => void; - generateDataMapperModel: (params: DatamapperModelContext) => Promise; - getTypesFromRecord: (params: GenerateTypesFromRecordRequest) => Promise; - createTempFileAndGenerateMetadata: (params: CreateTempFileRequest) => Promise; - generateMappings: (params: MetadataWithAttachments) => Promise; - addCodeSegmentToWorkspace: (params: CodeSegment) => Promise; - addInlineCodeSegmentToWorkspace: (params: CodeSegment) => void; + // Data-mapper related functions + openChatWindowWithCommand: () => void; + generateContextTypes: (params: ProcessContextTypeCreationRequest) => void; + generateMappingCode: (params: ProcessMappingParametersRequest) => void; + generateInlineMappingCode: (params: MetadataWithAttachments) => void; // Test-generator related functions getGeneratedTests: (params: TestGenerationRequest) => Promise; getTestDiagnostics: (params: TestGenerationResponse) => Promise; @@ -57,7 +53,6 @@ export interface AIPanelAPI { abortTestGeneration: () => void; applyDoOnFailBlocks: () => void; postProcess: (params: PostProcessRequest) => Promise; - getActiveFile:() => Promise; promptGithubAuthorize: () => Promise; promptWSO2AILogout: () => Promise; isCopilotSignedIn: () => Promise; @@ -73,8 +68,6 @@ export interface AIPanelAPI { updateDevelopmentDocument:(params: DeveloperDocument) => void; updateRequirementSpecification:(params: RequirementSpecification) => void; createTestDirecoryIfNotExists:(params: string) => void; - getModuleDirectory:(params: GetModuleDirParams) => Promise; - getContentFromFile: (params: GetFromFileRequest) => Promise; submitFeedback: (params: SubmitFeedbackRequest) => Promise; getRelevantLibrariesAndFunctions: (params: RelevantLibrariesAndFunctionsRequest) => Promise; generateOpenAPI: (params: GenerateOpenAPIRequest) => void; @@ -89,4 +82,5 @@ export interface AIPanelAPI { // ================================== getGeneratedDocumentation: (params: DocGenerationRequest) => Promise; addFilesToProject: (params: AddFilesToProjectRequest) => Promise; + isUserAuthenticated: () => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts index 798f500b68a..4abe471c4c3 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/interfaces.ts @@ -17,10 +17,11 @@ * under the License. */ -import { NodePosition } from "@wso2/syntax-tree"; +import { FunctionDefinition } from "@wso2/syntax-tree"; import { AIMachineContext, AIMachineStateValue } from "../../state-machine-types"; import { Command, TemplateId } from "../../interfaces/ai-panel"; -import { DataMapperSourceResponse, ExtendedDataMapperMetadata } from "../../interfaces/extended-lang-client"; +import { AllDataMapperSourceRequest, DataMapperSourceResponse, ExtendedDataMapperMetadata } from "../../interfaces/extended-lang-client"; +import { ComponentInfo, DataMapperMetadata, Diagnostics, ImportStatements, Project } from "../.."; // ================================== // General Interfaces @@ -53,7 +54,9 @@ export interface ProjectSource { projectModules?: ProjectModule[]; projectTests?: SourceFile[]; sourceFiles: SourceFile[]; - projectName: string; + projectName: string; // Actual package name from package's Ballerina.toml (e.g., "mypackage") + packagePath: string; // Relative path from workspace root (e.g., "package1", "packages/foo"), empty string for non-workspace + isActive: boolean; // True if this is the currently active package in the workspace } export interface ProjectModule { @@ -76,6 +79,11 @@ export interface ProjectDiagnostics { diagnostics: DiagnosticEntry[]; } +export interface MappingDiagnostics { + uri: string; + diagnostics: DiagnosticEntry[]; +} + export interface DiagnosticEntry { line?: number; message: string; @@ -105,30 +113,54 @@ export interface DeleteFromProjectRequest { filePath: string; } +export interface ProjectImports { + projectPath: string; + imports: ImportStatements[]; +} + // Data-mapper related interfaces -export interface GenerateMappingsRequest { - position: NodePosition; - filePath: string; - file?: Attachment; +export interface MetadataWithAttachments { + metadata: ExtendedDataMapperMetadata; + attachments: Attachment[]; } -export interface GenerateMappingsResponse { - newFnPosition?: NodePosition; - error?: ErrorCode; - userAborted?: boolean; +export interface InlineMappingsSourceResult { + sourceResponse: DataMapperSourceResponse; + allMappingsRequest: AllDataMapperSourceRequest; + tempFileMetadata: ExtendedDataMapperMetadata; + tempDir: string; } -export interface NotifyAIMappingsRequest { - newFnPosition: NodePosition; - prevFnSource: string; - filePath: string; +export interface ProcessContextTypeCreationRequest { + attachments: Attachment[]; } -export interface CodeSegment { - segmentText: string; - filePath: string; +export interface ProcessMappingParametersRequest { + parameters: MappingParameters; metadata?: ExtendedDataMapperMetadata; - textEdit?: DataMapperSourceResponse; + attachments?: Attachment[]; +} + +export interface CreateTempFileRequest { + tempDir: string; + filePath: string; + metadata: ExtendedDataMapperMetadata; + inputs?: DataMappingRecord[]; + output?: DataMappingRecord; + functionName?: string; + inputNames?: string[]; + imports?: ImportInfo[]; + hasMatchingFunction?: boolean; +} + +export interface DatamapperModelContext { + documentUri?: string; + identifier?: string; + dataMapperMetadata?: DataMapperMetadata; +} + +export interface DiagnosticList { + diagnosticsList: Diagnostics[]; } export interface DataMappingRecord { @@ -138,7 +170,7 @@ export interface DataMappingRecord { } export interface GenerateTypesFromRecordRequest { - attachment?: Attachment[] + attachment: Attachment[] } export interface GenerateTypesFromRecordResponse { @@ -157,6 +189,48 @@ export interface ImportInfo { recordName?: string; } +export interface TempDirectoryPath { + filePaths: string[]; + tempDir?: string; +} + +export interface ExtractMappingDetailsRequest { + parameters: MappingParameters; + recordMap: Record; + allImports: ImportInfo[]; + existingFunctions: ComponentInfo[]; + functionContents: Record; +} + +export interface ExistingFunctionMatchResult { + match: boolean; + matchingFunctionFile: string | null; + functionDefNode: FunctionDefinition | null; +} + +export interface ExtractMappingDetailsResponse { + inputs: DataMappingRecord[]; + output: DataMappingRecord; + inputParams: string[]; + outputParam: string; + imports: ImportInfo[]; + inputNames: string[]; + existingFunctionMatch: ExistingFunctionMatchResult; +} + +export interface RepairCodeParams { + tempFileMetadata: ExtendedDataMapperMetadata; + customFunctionsFilePath?: string; + imports?: ImportInfo[]; + tempDir?: string; +} + +export interface repairCodeRequest { + sourceFiles: SourceFile[]; + diagnostics: DiagnosticList; + imports: ImportInfo[]; +} + // Test-generator related interfaces export enum TestGenerationTarget { Service = "service", @@ -200,11 +274,12 @@ export interface DocumentationGeneratorIntermediaryState { } export interface PostProcessRequest { - assistant_response: string; + sourceFiles: SourceFile[]; + updatedFileNames: string[]; } export interface PostProcessResponse { - assistant_response: string; + sourceFiles: SourceFile[]; diagnostics: ProjectDiagnostics; } @@ -311,19 +386,17 @@ export interface GenerateCodeRequest { fileAttachmentContents: FileAttatchment[]; } -export interface SourceFiles { - filePath: string; - content: string; -} - export interface RepairParams { previousMessages: any[]; - assistantResponse: string; + assistantResponse?: string; // XML format with code blocks + sourceFiles?: SourceFile[]; // Optional: parsed from assistantResponse if not provided + updatedFileNames: string[]; diagnostics: DiagnosticEntry[]; } export interface RepairResponse { - repairResponse: string; + sourceFiles: SourceFile[]; + updatedFileNames: string[]; diagnostics: DiagnosticEntry[]; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts index 6b6140ce5fe..ee93b828631 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/ai-panel/rpc-type.ts @@ -17,9 +17,9 @@ * * THIS FILE INCLUDES AUTO GENERATED CODE */ -import { AllDataMapperSourceRequest, CreateTempFileRequest, DatamapperModelContext, DataMapperModelResponse, ExtendedDataMapperMetadata, MetadataWithAttachments } from "../../interfaces/extended-lang-client"; +import { DataMapperModelResponse } from "../../interfaces/extended-lang-client"; import { LoginMethod } from "../../state-machine-types"; -import { AddToProjectRequest, GetFromFileRequest, DeleteFromProjectRequest, GenerateMappingsResponse, NotifyAIMappingsRequest, ProjectSource, ProjectDiagnostics, PostProcessRequest, PostProcessResponse, GenerateTypesFromRecordRequest, GenerateTypesFromRecordResponse, FetchDataRequest, FetchDataResponse, TestGenerationRequest, TestGenerationResponse, TestGenerationMentions, AIChatSummary, DeveloperDocument, RequirementSpecification, LLMDiagnostics, GetModuleDirParams, AIPanelPrompt, AIMachineSnapshot, SubmitFeedbackRequest, RelevantLibrariesAndFunctionsRequest, GenerateOpenAPIRequest, GenerateCodeRequest, TestPlanGenerationRequest, TestGeneratorIntermediaryState, RepairParams, RelevantLibrariesAndFunctionsResponse, CodeSegment, DocGenerationRequest, AddFilesToProjectRequest } from "./interfaces"; +import { AddToProjectRequest, GetFromFileRequest, DeleteFromProjectRequest, ProjectSource, ProjectDiagnostics, PostProcessRequest, PostProcessResponse, FetchDataRequest, FetchDataResponse, TestGenerationRequest, TestGenerationResponse, TestGenerationMentions, AIChatSummary, DeveloperDocument, RequirementSpecification, LLMDiagnostics, GetModuleDirParams, AIPanelPrompt, AIMachineSnapshot, SubmitFeedbackRequest, RelevantLibrariesAndFunctionsRequest, GenerateOpenAPIRequest, GenerateCodeRequest, TestPlanGenerationRequest, TestGeneratorIntermediaryState, RepairParams, RelevantLibrariesAndFunctionsResponse, DocGenerationRequest, AddFilesToProjectRequest, MetadataWithAttachments, DatamapperModelContext, ProcessContextTypeCreationRequest, ProcessMappingParametersRequest } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; const _preFix = "ai-panel"; @@ -35,18 +35,13 @@ export const addToProject: RequestType = { method: export const getFromFile: RequestType = { method: `${_preFix}/getFromFile` }; export const getFileExists: RequestType = { method: `${_preFix}/getFileExists` }; export const deleteFromProject: NotificationType = { method: `${_preFix}/deleteFromProject` }; -export const notifyAIMappings: RequestType = { method: `${_preFix}/notifyAIMappings` }; -export const stopAIMappings: RequestType = { method: `${_preFix}/stopAIMappings` }; export const getShadowDiagnostics: RequestType = { method: `${_preFix}/getShadowDiagnostics` }; export const checkSyntaxError: RequestType = { method: `${_preFix}/checkSyntaxError` }; export const clearInitialPrompt: NotificationType = { method: `${_preFix}/clearInitialPrompt` }; -export const openAIMappingChatWindow: NotificationType = { method: `${_preFix}/openAIMappingChatWindow` }; -export const generateDataMapperModel: RequestType = { method: `${_preFix}/generateDataMapperModel` }; -export const getTypesFromRecord: RequestType = { method: `${_preFix}/getTypesFromRecord` }; -export const createTempFileAndGenerateMetadata: RequestType = { method: `${_preFix}/createTempFileAndGenerateMetadata` }; -export const generateMappings: RequestType = { method: `${_preFix}/generateMappings` }; -export const addCodeSegmentToWorkspace: RequestType = { method: `${_preFix}/addCodeSegmentToWorkspace` }; -export const addInlineCodeSegmentToWorkspace: NotificationType = { method: `${_preFix}/addInlineCodeSegmentToWorkspace` }; +export const openChatWindowWithCommand: NotificationType = { method: `${_preFix}/openChatWindowWithCommand` }; +export const generateContextTypes: RequestType = { method: `${_preFix}/generateContextTypes` }; +export const generateMappingCode: RequestType = { method: `${_preFix}/generateMappingCode` }; +export const generateInlineMappingCode: RequestType = { method: `${_preFix}/generateInlineMappingCode` }; export const getGeneratedTests: RequestType = { method: `${_preFix}/getGeneratedTests` }; export const getTestDiagnostics: RequestType = { method: `${_preFix}/getTestDiagnostics` }; export const getServiceSourceForName: RequestType = { method: `${_preFix}/getServiceSourceForName` }; @@ -56,7 +51,6 @@ export const getResourceMethodAndPaths: RequestType = { method: `${_preFix}/abortTestGeneration` }; export const applyDoOnFailBlocks: NotificationType = { method: `${_preFix}/applyDoOnFailBlocks` }; export const postProcess: RequestType = { method: `${_preFix}/postProcess` }; -export const getActiveFile: RequestType = { method: `${_preFix}/getActiveFile` }; export const promptGithubAuthorize: RequestType = { method: `${_preFix}/promptGithubAuthorize` }; export const promptWSO2AILogout: RequestType = { method: `${_preFix}/promptWSO2AILogout` }; export const isCopilotSignedIn: RequestType = { method: `${_preFix}/isCopilotSignedIn` }; @@ -72,8 +66,6 @@ export const readDeveloperMdFile: RequestType = { method: `${_pr export const updateDevelopmentDocument: NotificationType = { method: `${_preFix}/updateDevelopmentDocument` }; export const updateRequirementSpecification: NotificationType = { method: `${_preFix}/updateRequirementSpecification` }; export const createTestDirecoryIfNotExists: NotificationType = { method: `${_preFix}/createTestDirecoryIfNotExists` }; -export const getModuleDirectory: RequestType = { method: `${_preFix}/getModuleDirectory` }; -export const getContentFromFile: RequestType = { method: `${_preFix}/getContentFromFile` }; export const submitFeedback: RequestType = { method: `${_preFix}/submitFeedback` }; export const getRelevantLibrariesAndFunctions: RequestType = { method: `${_preFix}/getRelevantLibrariesAndFunctions` }; export const generateOpenAPI: NotificationType = { method: `${_preFix}/generateOpenAPI` }; @@ -85,3 +77,4 @@ export const generateHealthcareCode: NotificationType = { m export const abortAIGeneration: NotificationType = { method: `${_preFix}/abortAIGeneration` }; export const getGeneratedDocumentation: NotificationType = { method: `${_preFix}/getGeneratedDocumentation` }; export const addFilesToProject: RequestType = { method: `${_preFix}/addFilesToProject` }; +export const isUserAuthenticated: RequestType = { method: `${_preFix}/isUserAuthenticated` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts index 3b4eff402c3..a10b6ab7e66 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/index.ts @@ -93,7 +93,11 @@ import { DeleteTypeRequest, DeleteTypeResponse, VerifyTypeDeleteRequest, - VerifyTypeDeleteResponse + VerifyTypeDeleteResponse, + FormDiagnosticsRequest, + FormDiagnosticsResponse, + BISearchNodesRequest, + BISearchNodesResponse } from "../../interfaces/extended-lang-client"; import { ProjectRequest, @@ -106,7 +110,6 @@ import { BIAiSuggestionsRequest, BIAiSuggestionsResponse, AIChatRequest, - ProjectImports, BreakpointRequest, CurrentBreakpointsResponse, FormDidOpenParams, @@ -115,7 +118,10 @@ import { RecordsInWorkspaceMentions, BuildMode, DevantMetadata, - GeneratedClientSaveResponse + GeneratedClientSaveResponse, + AddProjectToWorkspaceRequest, + DeleteProjectRequest, + OpenReadmeRequest } from "./interfaces"; export interface BIDiagramAPI { @@ -134,6 +140,8 @@ export interface BIDiagramAPI { getNodeTemplate: (params: BINodeTemplateRequest) => Promise; getAiSuggestions: (params: BIAiSuggestionsRequest) => Promise; createProject: (params: ProjectRequest) => void; + deleteProject: (params: DeleteProjectRequest) => void; + addProjectToWorkspace: (params: AddProjectToWorkspaceRequest) => void; getWorkspaces: () => Promise; getProjectStructure: () => Promise; getProjectComponents: () => Promise; @@ -141,6 +149,7 @@ export interface BIDiagramAPI { handleReadmeContent: (params: ReadmeContentRequest) => Promise; getVisibleVariableTypes: (params: BIGetVisibleVariableTypesRequest) => Promise; getExpressionCompletions: (params: ExpressionCompletionsRequest) => Promise; + getDataMapperCompletions: (params: ExpressionCompletionsRequest) => Promise; getConfigVariables: () => Promise; updateConfigVariables: (params: UpdateConfigVariableRequest) => Promise; getConfigVariablesV2: (params: ConfigVariableRequest) => Promise; @@ -148,8 +157,8 @@ export interface BIDiagramAPI { deleteConfigVariableV2: (params: DeleteConfigVariableRequestV2) => Promise; getConfigVariableNodeTemplate: (params: GetConfigVariableNodeTemplateRequest) => Promise; getModuleNodes: () => Promise; - getReadmeContent: () => Promise; - openReadme: () => void; + getReadmeContent: (params: ReadmeContentRequest) => Promise; + openReadme: (params: OpenReadmeRequest) => void; renameIdentifier: (params: RenameIdentifierRequest) => Promise; deployProject: (params: DeploymentRequest) => Promise; openAIChat: (params: AIChatRequest) => void; @@ -160,8 +169,8 @@ export interface BIDiagramAPI { addBreakpointToSource: (params: BreakpointRequest) => void; removeBreakpointFromSource: (params: BreakpointRequest) => void; getBreakpointInfo: () => Promise; + getFormDiagnostics: (params: FormDiagnosticsRequest) => Promise; getExpressionDiagnostics: (params: ExpressionDiagnosticsRequest) => Promise; - getAllImports: () => Promise; formDidOpen: (params: FormDidOpenParams) => Promise; formDidClose: (params: FormDidCloseParams) => Promise; getDesignModel: () => Promise; @@ -186,6 +195,7 @@ export interface BIDiagramAPI { getFunctionNode: (params: FunctionNodeRequest) => Promise; getEndOfFile: (params: EndOfFileRequest) => Promise; search: (params: BISearchRequest) => Promise; + searchNodes: (params: BISearchNodesRequest) => Promise; getRecordNames: () => Promise; getFunctionNames: () => Promise; getDevantMetadata: () => Promise; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts index 1e756452a72..c3952f0920e 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/interfaces.ts @@ -20,12 +20,25 @@ import { LineRange } from "../../interfaces/common"; import { DIRECTORY_MAP, Flow, OverviewFlow } from "../../interfaces/bi"; import { BallerinaProjectComponents } from "../../interfaces/extended-lang-client"; import { RemoteFunction, ServiceType } from "../../interfaces/ballerina"; +import { ImportInfo } from "../ai-panel/interfaces"; export interface ProjectRequest { projectName: string; packageName: string; projectPath: string; createDirectory: boolean; + createAsWorkspace?: boolean; + workspaceName?: string; + orgName?: string; + version?: string; +} + +export interface AddProjectToWorkspaceRequest { + projectName: string; + packageName: string; + path: string; + convertToWorkspace?: boolean; + workspaceName?: string; orgName?: string; version?: string; } @@ -87,10 +100,16 @@ export interface RecordsInWorkspaceMentions { } export interface ReadmeContentRequest { - read: boolean + projectPath: string; + read?: boolean content?: string; } +export interface OpenReadmeRequest { + projectPath: string; + isWorkspaceReadme?: boolean; +} + export interface ReadmeContentResponse { content: string; } @@ -143,17 +162,10 @@ export interface AIChatRequest { scafold: boolean; readme: boolean; } -export interface ImportStatement { - moduleName: string; - alias?: string; -} + export interface ImportStatements { filePath: string; - statements: ImportStatement[]; -} -export interface ProjectImports { - projectPath: string; - imports: ImportStatements[]; + statements: ImportInfo[]; } export interface FormDidOpenParams { @@ -181,3 +193,7 @@ export interface DevantMetadata { export interface GeneratedClientSaveResponse { errorMessage?: string; } + +export interface DeleteProjectRequest { + projectPath: string; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts index c3c6a948a00..48991978b42 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/bi-diagram/rpc-type.ts @@ -86,15 +86,20 @@ import { UpdateConfigVariableRequestV2, GetConfigVariableNodeTemplateRequest, UpdateConfigVariableResponseV2, - DeleteConfigVariableRequestV2, DeleteConfigVariableResponseV2, + DeleteConfigVariableRequestV2, JsonToTypeRequest, JsonToTypeResponse, ConfigVariableRequest, DeleteTypeRequest, DeleteTypeResponse, VerifyTypeDeleteRequest, - VerifyTypeDeleteResponse + VerifyTypeDeleteResponse, + FormDiagnosticsRequest, + FormDiagnosticsResponse, + ExpressionTokensRequest, + BISearchNodesRequest, + BISearchNodesResponse } from "../../interfaces/extended-lang-client"; import { ProjectRequest, @@ -107,7 +112,6 @@ import { BIAiSuggestionsRequest, BIAiSuggestionsResponse, AIChatRequest, - ProjectImports, BreakpointRequest, CurrentBreakpointsResponse, FormDidOpenParams, @@ -116,7 +120,10 @@ import { RecordsInWorkspaceMentions, BuildMode, DevantMetadata, - GeneratedClientSaveResponse + GeneratedClientSaveResponse, + AddProjectToWorkspaceRequest, + DeleteProjectRequest, + OpenReadmeRequest } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; @@ -136,6 +143,8 @@ export const getEnclosedFunction: RequestType = { method: `${_preFix}/getNodeTemplate` }; export const getAiSuggestions: RequestType = { method: `${_preFix}/getAiSuggestions` }; export const createProject: NotificationType = { method: `${_preFix}/createProject` }; +export const deleteProject: NotificationType = { method: `${_preFix}/deleteProject` }; +export const addProjectToWorkspace: NotificationType = { method: `${_preFix}/addProjectToWorkspace` }; export const getWorkspaces: RequestType = { method: `${_preFix}/getWorkspaces` }; export const getProjectStructure: RequestType = { method: `${_preFix}/getProjectStructure` }; export const getProjectComponents: RequestType = { method: `${_preFix}/getProjectComponents` }; @@ -143,6 +152,7 @@ export const createComponent: RequestType = { method: `${_preFix}/handleReadmeContent` }; export const getVisibleVariableTypes: RequestType = { method: `${_preFix}/getVisibleVariableTypes` }; export const getExpressionCompletions: RequestType = { method: `${_preFix}/getExpressionCompletions` }; +export const getDataMapperCompletions: RequestType = { method: `${_preFix}/getDataMapperCompletions` }; export const getConfigVariables: RequestType = { method: `${_preFix}/getConfigVariables` }; export const updateConfigVariables: RequestType = { method: `${_preFix}/updateConfigVariables` }; export const getConfigVariablesV2: RequestType = { method: `${_preFix}/getConfigVariablesV2` }; @@ -150,9 +160,9 @@ export const updateConfigVariablesV2: RequestType = { method: `${_preFix}/deleteConfigVariableV2` }; export const getConfigVariableNodeTemplate: RequestType = { method: `${_preFix}/getConfigVariableNodeTemplate` }; export const getModuleNodes: RequestType = { method: `${_preFix}/getModuleNodes` }; -export const getReadmeContent: RequestType = { method: `${_preFix}/getReadmeContent` }; -export const openReadme: NotificationType = { method: `${_preFix}/openReadme` }; -export const renameIdentifier: RequestType = { method: `${_preFix}/renameIdentifier` }; +export const getReadmeContent: RequestType = { method: `${_preFix}/getReadmeContent` }; +export const openReadme: NotificationType = { method: `${_preFix}/openReadme` }; +export const renameIdentifier: NotificationType = { method: `${_preFix}/renameIdentifier` }; export const deployProject: RequestType = { method: `${_preFix}/deployProject` }; export const openAIChat: NotificationType = { method: `${_preFix}/openAIChat` }; export const getSignatureHelp: RequestType = { method: `${_preFix}/getSignatureHelp` }; @@ -162,8 +172,8 @@ export const getVisibleTypes: RequestType = { method: `${_preFix}/addBreakpointToSource` }; export const removeBreakpointFromSource: NotificationType = { method: `${_preFix}/removeBreakpointFromSource` }; export const getBreakpointInfo: RequestType = { method: `${_preFix}/getBreakpointInfo` }; +export const getFormDiagnostics: RequestType = { method: `${_preFix}/getFormDiagnostics` }; export const getExpressionDiagnostics: RequestType = { method: `${_preFix}/getExpressionDiagnostics` }; -export const getAllImports: RequestType = { method: `${_preFix}/getAllImports` }; export const formDidOpen: RequestType = { method: `${_preFix}/formDidOpen` }; export const formDidClose: RequestType = { method: `${_preFix}/formDidClose` }; export const getDesignModel: RequestType = { method: `${_preFix}/getDesignModel` }; @@ -188,6 +198,7 @@ export const addFunction: RequestType export const getFunctionNode: RequestType = { method: `${_preFix}/getFunctionNode` }; export const getEndOfFile: RequestType = { method: `${_preFix}/getEndOfFile` }; export const search: RequestType = { method: `${_preFix}/search` }; +export const searchNodes: RequestType = { method: `${_preFix}/searchNodes` }; export const getRecordNames: RequestType = { method: `${_preFix}/getRecordNames` }; export const getFunctionNames: RequestType = { method: `${_preFix}/getFunctionNames` }; export const getDevantMetadata: RequestType = { method: `${_preFix}/getDevantMetadata` }; @@ -195,3 +206,4 @@ export const generateOpenApiClient: RequestType = { method: `${_preFix}/getOpenApiGeneratedModules` }; export const deleteOpenApiGeneratedModules: RequestType = { method: `${_preFix}/deleteOpenApiGeneratedModules` }; export const openConfigToml: RequestType = { method: `${_preFix}/openConfigToml` }; +export const getExpressionTokens: RequestType = { method: `${_preFix}/getExpressionTokens` }; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts index 964b6cea6d6..a98708821c9 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/common/index.ts @@ -31,7 +31,9 @@ import { WorkspacesFileResponse, FileOrDirRequest, WorkspaceRootResponse, - ShowErrorMessageRequest + ShowErrorMessageRequest, + WorkspaceTypeResponse, + SampleDownloadRequest } from "./interfaces"; export interface CommonRPCAPI { @@ -49,5 +51,6 @@ export interface CommonRPCAPI { getWorkspaceRoot: () => Promise; showErrorMessage: (params: ShowErrorMessageRequest) => void; getCurrentProjectTomlValues: () => Promise>; - + getWorkspaceType: () => Promise; + downloadSelectedSampleFromGithub: (params: SampleDownloadRequest) => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts index 6ccd232ffcc..26ffcf79e1d 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/common/interfaces.ts @@ -91,6 +91,10 @@ export interface ShowErrorMessageRequest { message: string; } +export interface TomlWorkspace { + packages: string[]; +} + export interface TomlPackage { org: string; name: string; @@ -98,6 +102,18 @@ export interface TomlPackage { title: string; } -export interface TomlValues { +export interface WorkspaceTomlValues { + workspace: TomlWorkspace; +} + +export interface PackageTomlValues { package: TomlPackage; } + +export interface WorkspaceTypeResponse { + type: "SINGLE_PROJECT" | "MULTIPLE_PROJECTS" | "BALLERINA_WORKSPACE" | "VSCODE_WORKSPACE" | "UNKNOWN" +} + +export interface SampleDownloadRequest { + zipFileName: string; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts index c1816ec958b..9b7379b10d7 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/common/rpc-type.ts @@ -32,7 +32,9 @@ import { WorkspacesFileResponse, FileOrDirRequest, WorkspaceRootResponse, - ShowErrorMessageRequest + ShowErrorMessageRequest, + WorkspaceTypeResponse, + SampleDownloadRequest } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; @@ -51,3 +53,5 @@ export const isNPSupported: RequestType = { method: `${_preFix}/i export const getWorkspaceRoot: RequestType = { method: `${_preFix}/getWorkspaceRoot` }; export const showErrorMessage: NotificationType = { method: `${_preFix}/showErrorMessage` }; export const getCurrentProjectTomlValues: RequestType = { method: `${_preFix}/getCurrentProjectTomlValues` }; +export const getWorkspaceType: RequestType = { method: `${_preFix}/getWorkspaceType` }; +export const downloadSelectedSampleFromGithub: RequestType = { method: `${_preFix}/downloadSelectedSampleFromGithub` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts index 0508511647d..b117410c013 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/index.ts @@ -42,7 +42,10 @@ import { ProcessTypeReferenceResponse, ProcessTypeReferenceRequest, ExpandedDMModelResponse, - ClearTypeCacheResponse + ClearTypeCacheResponse, + FieldPropertyRequest, + ClausePositionRequest, + ClausePositionResponse } from "../../interfaces/extended-lang-client"; export interface DataMapperAPI { @@ -61,8 +64,9 @@ export interface DataMapperAPI { mapWithTransformFn: (params: MapWithFnRequest) => Promise; getDataMapperCodedata: (params: GetDataMapperCodedataRequest) => Promise; getSubMappingCodedata: (params: GetSubMappingCodedataRequest) => Promise; - getAllDataMapperSource: (params: AllDataMapperSourceRequest) => Promise; getProperty: (params: PropertyRequest) => Promise; + getFieldProperty: (params: FieldPropertyRequest) => Promise; + getClausePosition: (params: ClausePositionRequest) => Promise; getExpandedDMFromDMModel: (params: DMModelRequest) => Promise; getProcessTypeReference: (params: ProcessTypeReferenceRequest) => Promise; clearTypeCache: () => Promise; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts index 875a6920739..876b413a300 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/data-mapper/rpc-type.ts @@ -44,7 +44,10 @@ import { ProcessTypeReferenceResponse, ProcessTypeReferenceRequest, ExpandedDMModelResponse, - ClearTypeCacheResponse + ClearTypeCacheResponse, + FieldPropertyRequest, + ClausePositionRequest, + ClausePositionResponse } from "../../interfaces/extended-lang-client"; import { RequestType } from "vscode-messenger-common"; @@ -64,8 +67,9 @@ export const mapWithCustomFn: RequestType = { method: `${_preFix}/mapWithTransformFn` }; export const getDataMapperCodedata: RequestType = { method: `${_preFix}/getDataMapperCodedata` }; export const getSubMappingCodedata: RequestType = { method: `${_preFix}/getSubMappingCodedata` }; -export const getAllDataMapperSource: RequestType = { method: `${_preFix}/getAllDataMapperSource` }; export const getProperty: RequestType = { method: `${_preFix}/getProperty` }; +export const getFieldProperty: RequestType = { method: `${_preFix}/getFieldProperty` }; +export const getClausePosition: RequestType = { method: `${_preFix}/getClausePosition` }; export const getExpandedDMFromDMModel: RequestType = { method: `${_preFix}/getExpandedDMFromDMModel` }; export const getProcessTypeReference: RequestType = { method: `${_preFix}/getProcessTypeReference` }; export const clearTypeCache: RequestType = { method: `${_preFix}/clearTypeCache` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/index.ts index 9bc819ee589..da659413ea5 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/index.ts @@ -17,7 +17,7 @@ */ import { BallerinaPackagesParams, BallerinaProjectComponents, BallerinaSTParams, ComponentModels, ComponentModelsParams, ExecutorPositions, PartialST, PartialSTParams, ProjectDiagnosticsRequest, ProjectDiagnosticsResponse, STModifyParams, SymbolInfo, SymbolInfoParams, SyntaxTree, SyntaxTreeParams, TypeFromExpressionParams, TypeFromSymbolParams, TypesFromFnDefinitionParams } from "../../interfaces/extended-lang-client"; -import { BallerinaVersionResponse, CompletionRequest, CompletionResponse, DiagnosticsResponse, CodeActionRequest, CodeActionResponse, RenameRequest, RenameResponse, DefinitionPositionRequest, UpdateFileContentRequest, UpdateFileContentResponse, DefinitionResponse, ExecutorPositionsRequest, DidCloseRequest, TypesFromExpressionResponse, TypesFromSymbolResponse, DidOpenRequest, DidChangeRequest } from "./interfaces"; +import { BallerinaVersionResponse, CompletionRequest, CompletionResponse, DiagnosticsResponse, CodeActionRequest, CodeActionResponse, RenameRequest, RenameResponse, DefinitionPositionRequest, UpdateFileContentRequest, UpdateFileContentResponse, DefinitionResponse, ExecutorPositionsRequest, DidCloseRequest, TypesFromExpressionResponse, TypesFromSymbolResponse, DidOpenRequest, DidChangeRequest, SemanticVersion } from "./interfaces"; export interface LangClientAPI { getSyntaxTree: () => Promise; @@ -25,6 +25,7 @@ export interface LangClientAPI { getSTByRange: (params: BallerinaSTParams) => Promise; getBallerinaProjectComponents: (params: BallerinaPackagesParams) => Promise; getBallerinaVersion: () => Promise; + isSupportedSLVersion: (params: SemanticVersion) => Promise; getCompletion: (params: CompletionRequest) => Promise; getDiagnostics: (params: SyntaxTreeParams) => Promise; getProjectDiagnostics: (params: ProjectDiagnosticsRequest) => Promise; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/interfaces.ts index f9724336ad6..7ba401686ce 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/interfaces.ts @@ -163,4 +163,10 @@ export interface TypesFromSymbolResponse { export interface ExecutorPositionsResponse { executorPositions?: ExecutorPosition[]; -} \ No newline at end of file +} + +export interface SemanticVersion { + major: number; + minor: number; + patch: number; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/rpc-type.ts index bfb481eef1b..9aa69f5dea8 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/lang-client/rpc-type.ts @@ -18,7 +18,7 @@ * THIS FILE INCLUDES AUTO GENERATED CODE */ import { BallerinaPackagesParams, BallerinaProjectComponents, BallerinaSTParams, ComponentModels, ComponentModelsParams, ExecutorPositions, PartialST, PartialSTParams, ProjectDiagnosticsRequest, ProjectDiagnosticsResponse, STModifyParams, SymbolInfo, SymbolInfoParams, SyntaxTree, SyntaxTreeParams, TypeFromExpressionParams, TypeFromSymbolParams, TypesFromFnDefinitionParams } from "../../interfaces/extended-lang-client"; -import { BallerinaVersionResponse, CompletionRequest, CompletionResponse, DiagnosticsResponse, CodeActionRequest, CodeActionResponse, RenameRequest, RenameResponse, DefinitionPositionRequest, UpdateFileContentRequest, UpdateFileContentResponse, DefinitionResponse, ExecutorPositionsRequest, DidCloseRequest, TypesFromExpressionResponse, TypesFromSymbolResponse, DidOpenRequest, DidChangeRequest } from "./interfaces"; +import { BallerinaVersionResponse, CompletionRequest, CompletionResponse, DiagnosticsResponse, CodeActionRequest, CodeActionResponse, RenameRequest, RenameResponse, DefinitionPositionRequest, UpdateFileContentRequest, UpdateFileContentResponse, DefinitionResponse, ExecutorPositionsRequest, DidCloseRequest, TypesFromExpressionResponse, TypesFromSymbolResponse, DidOpenRequest, DidChangeRequest, SemanticVersion } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; const _preFix = "lang-client"; @@ -27,6 +27,7 @@ export const getST: RequestType = { method: `${_pr export const getSTByRange: RequestType = { method: `${_preFix}/getSTByRange` }; export const getBallerinaProjectComponents: RequestType = { method: `${_preFix}/getBallerinaProjectComponents` }; export const getBallerinaVersion: RequestType = { method: `${_preFix}/getBallerinaVersion` }; +export const isSupportedSLVersion: RequestType = { method: `${_preFix}/isSupportedSLVersion` }; export const getCompletion: RequestType = { method: `${_preFix}/getCompletion` }; export const getDiagnostics: RequestType = { method: `${_preFix}/getDiagnostics` }; export const getProjectDiagnostics: RequestType = { method: `${_preFix}/getProjectDiagnostics` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/index.ts index 520a5cc3301..2d3e1ef6f84 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/index.ts @@ -17,13 +17,15 @@ */ import { ImportIntegrationResponse } from "../../interfaces/extended-lang-client"; -import { GetMigrationToolsResponse, ImportIntegrationRPCRequest, MigrateRequest, MigrationToolPullRequest, OpenMigrationReportRequest, SaveMigrationReportRequest } from "./interfaces"; +import { GetMigrationToolsResponse, ImportIntegrationRPCRequest, MigrateRequest, MigrationToolPullRequest, OpenMigrationReportRequest, OpenSubProjectReportRequest, SaveMigrationReportRequest, StoreSubProjectReportsRequest } from "./interfaces"; export interface MigrateIntegrationAPI { getMigrationTools: () => Promise; pullMigrationTool: (params: MigrationToolPullRequest) => void; importIntegration: (params: ImportIntegrationRPCRequest) => Promise; openMigrationReport: (params: OpenMigrationReportRequest) => void; + openSubProjectReport: (params: OpenSubProjectReportRequest) => void; + storeSubProjectReports: (params: StoreSubProjectReportsRequest) => void; saveMigrationReport: (params: SaveMigrationReportRequest) => void; migrateProject: (params: MigrateRequest) => void; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/interfaces.ts index 01af97bd31b..5656071c9bd 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/interfaces.ts @@ -16,6 +16,7 @@ * under the License. */ +import { ProjectMigrationResult } from "../../interfaces/extended-lang-client"; import { ProjectRequest } from "../bi-diagram/interfaces"; export interface MigrationTool { @@ -59,6 +60,9 @@ export interface OpenMigrationReportRequest { export interface SaveMigrationReportRequest { reportContent: string; defaultFileName: string; + projectReports?: { + [projectName: string]: string; + }; } export interface MigrateRequest { @@ -66,4 +70,13 @@ export interface MigrateRequest { textEdits: { [key: string]: string; }; + projects?: ProjectMigrationResult[]; +} + +export interface OpenSubProjectReportRequest { + projectName: string; +} + +export interface StoreSubProjectReportsRequest { + reports: { [projectName: string]: string }; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/rpc-type.ts index a328ab47652..ebead0af2b6 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/migrate-integration/rpc-type.ts @@ -18,7 +18,7 @@ * THIS FILE INCLUDES AUTO GENERATED CODE */ import { ImportIntegrationResponse } from "../../interfaces/extended-lang-client"; -import { GetMigrationToolsResponse, ImportIntegrationRPCRequest, MigrateRequest, MigrationToolPullRequest, OpenMigrationReportRequest, SaveMigrationReportRequest } from "./interfaces"; +import { GetMigrationToolsResponse, ImportIntegrationRPCRequest, MigrateRequest, MigrationToolPullRequest, OpenMigrationReportRequest, OpenSubProjectReportRequest, SaveMigrationReportRequest, StoreSubProjectReportsRequest } from "./interfaces"; import { RequestType, NotificationType } from "vscode-messenger-common"; const _preFix = "migrate-integration"; @@ -26,5 +26,7 @@ export const getMigrationTools: RequestType = { export const pullMigrationTool: NotificationType = { method: `${_preFix}/pullMigrationTool` }; export const importIntegration: RequestType = { method: `${_preFix}/importIntegration` }; export const openMigrationReport: NotificationType = { method: `${_preFix}/openMigrationReport` }; +export const openSubProjectReport: NotificationType = { method: `${_preFix}/openSubProjectReport` }; +export const storeSubProjectReports: NotificationType = { method: `${_preFix}/storeSubProjectReports` }; export const saveMigrationReport: NotificationType = { method: `${_preFix}/saveMigrationReport` }; export const migrateProject: NotificationType = { method: `${_preFix}/migrateProject` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/index.ts index 1b0d5d6a99f..9c78ff7f262 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/index.ts @@ -17,7 +17,8 @@ */ import { UpdatedArtifactsResponse } from "../../interfaces/bi"; -import { ListenerModelRequest, ListenerModelResponse, ServiceModelRequest, ServiceModelResponse, ServiceModelFromCodeRequest, ServiceModelFromCodeResponse, HttpResourceModelRequest, HttpResourceModelResponse, FunctionSourceCodeRequest, ListenerSourceCodeRequest, ListenersRequest, ListenersResponse, ServiceSourceCodeRequest, ListenerModelFromCodeRequest, ListenerModelFromCodeResponse, TriggerModelsRequest, TriggerModelsResponse, FunctionModelRequest, FunctionModelResponse, ResourceReturnTypesRequest, ResourceReturnTypesResponse, FunctionFromSourceRequest, FunctionFromSourceResponse } from "../../interfaces/extended-lang-client"; +import { ListenerModelRequest, ListenerModelResponse, ServiceModelRequest, ServiceModelResponse, ServiceModelFromCodeRequest, ServiceModelFromCodeResponse, HttpResourceModelRequest, HttpResourceModelResponse, FunctionSourceCodeRequest, ListenerSourceCodeRequest, ListenersRequest, ListenersResponse, ServiceSourceCodeRequest, ListenerModelFromCodeRequest, ListenerModelFromCodeResponse, TriggerModelsRequest, TriggerModelsResponse, FunctionModelRequest, FunctionModelResponse, ResourceReturnTypesRequest, FunctionFromSourceRequest, FunctionFromSourceResponse, ServiceModelInitResponse, ServiceInitSourceRequest, VisibleTypesResponse } from "../../interfaces/extended-lang-client"; +import { PayloadContext } from "../../interfaces/service"; import { ExportOASRequest, ExportOASResponse, @@ -38,8 +39,11 @@ export interface ServiceDesignerAPI { updateServiceSourceCode: (params: ServiceSourceCodeRequest) => Promise; getServiceModelFromCode: (params: ServiceModelFromCodeRequest) => Promise; getHttpResourceModel: (params: HttpResourceModelRequest) => Promise; - getResourceReturnTypes: (params: ResourceReturnTypesRequest) => Promise; + getResourceReturnTypes: (params: ResourceReturnTypesRequest) => Promise; addResourceSourceCode: (params: FunctionSourceCodeRequest) => Promise; addFunctionSourceCode: (params: FunctionSourceCodeRequest) => Promise; updateResourceSourceCode: (params: FunctionSourceCodeRequest) => Promise; + getServiceInitModel: (params: ServiceModelRequest) => Promise; + createServiceAndListener: (params: ServiceInitSourceRequest) => Promise; + generateExamplePayloadJson: (params: PayloadContext) => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/rpc-type.ts index dc1b7c7ebbc..eea60b74f2a 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/service-designer/rpc-type.ts @@ -18,7 +18,8 @@ * THIS FILE INCLUDES AUTO GENERATED CODE */ import { UpdatedArtifactsResponse } from "../../interfaces/bi"; -import { ListenerModelRequest, ListenerModelResponse, ServiceModelRequest, ServiceModelResponse, ServiceModelFromCodeRequest, ServiceModelFromCodeResponse, HttpResourceModelRequest, HttpResourceModelResponse, FunctionSourceCodeRequest, ListenerSourceCodeRequest, ListenersRequest, ListenersResponse, ServiceSourceCodeRequest, ListenerModelFromCodeRequest, ListenerModelFromCodeResponse, TriggerModelsRequest, TriggerModelsResponse, FunctionModelRequest, FunctionModelResponse, ResourceReturnTypesRequest, ResourceReturnTypesResponse, FunctionFromSourceRequest, FunctionFromSourceResponse } from "../../interfaces/extended-lang-client"; +import { ListenerModelRequest, ListenerModelResponse, ServiceModelRequest, ServiceModelResponse, ServiceModelFromCodeRequest, ServiceModelFromCodeResponse, HttpResourceModelRequest, HttpResourceModelResponse, FunctionSourceCodeRequest, ListenerSourceCodeRequest, ListenersRequest, ListenersResponse, ServiceSourceCodeRequest, ListenerModelFromCodeRequest, ListenerModelFromCodeResponse, TriggerModelsRequest, TriggerModelsResponse, FunctionModelRequest, FunctionModelResponse, ResourceReturnTypesRequest, FunctionFromSourceRequest, FunctionFromSourceResponse, ServiceModelInitResponse, ServiceInitSourceRequest, VisibleTypesResponse } from "../../interfaces/extended-lang-client"; +import { PayloadContext } from "../../interfaces/service"; import { ExportOASRequest, ExportOASResponse, @@ -40,7 +41,10 @@ export const addServiceSourceCode: RequestType = { method: `${_preFix}/updateServiceSourceCode` }; export const getServiceModelFromCode: RequestType = { method: `${_preFix}/getServiceModelFromCode` }; export const getHttpResourceModel: RequestType = { method: `${_preFix}/getHttpResourceModel` }; -export const getResourceReturnTypes: RequestType = { method: `${_preFix}/getResourceReturnTypes` }; +export const getResourceReturnTypes: RequestType = { method: `${_preFix}/getResourceReturnTypes` }; export const addResourceSourceCode: RequestType = { method: `${_preFix}/addResourceSourceCode` }; export const addFunctionSourceCode: RequestType = { method: `${_preFix}/addFunctionSourceCode` }; export const updateResourceSourceCode: RequestType = { method: `${_preFix}/updateResourceSourceCode` }; +export const getServiceInitModel: RequestType = { method: `${_preFix}/getServiceInitModel` }; +export const createServiceAndListener: RequestType = { method: `${_preFix}/createServiceAndListener` }; +export const generateExamplePayloadJson: RequestType = { method: `${_preFix}/generateExamplePayloadJson` }; diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts index 9b74657224a..c95a2239683 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/index.ts @@ -17,8 +17,9 @@ */ import { HistoryEntry } from "../../history"; +import { ProjectStructureArtifactResponse, UpdatedArtifactsResponse } from "../../interfaces/bi"; import { ColorThemeKind } from "../../state-machine-types"; -import { AddToUndoStackRequest, OpenViewRequest, UndoRedoStateResponse } from "./interfaces"; +import { AddToUndoStackRequest, JoinProjectPathRequest, JoinProjectPathResponse, OpenViewRequest, UndoRedoStateResponse } from "./interfaces"; export interface VisualizerAPI { openView: (params: OpenViewRequest) => void; @@ -31,6 +32,8 @@ export interface VisualizerAPI { redo: (count: number) => Promise; addToUndoStack: (params: AddToUndoStackRequest) => void; undoRedoState: () => Promise; - joinProjectPath: (segments: string | string[]) => Promise; + resetUndoRedoStack: () => void; + joinProjectPath: (params: JoinProjectPathRequest) => Promise; getThemeKind: () => Promise; + updateCurrentArtifactLocation: (params: UpdatedArtifactsResponse) => Promise; } diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts index 9081a3a1509..dd0301a1fec 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/interfaces.ts @@ -16,6 +16,7 @@ * under the License. */ +import { CodeData } from "../../interfaces/bi"; import { EVENT_TYPE, PopupVisualizerLocation, VisualizerLocation } from "../../state-machine-types"; export interface UpdateUndoRedoMangerRequest { @@ -48,3 +49,13 @@ export interface AddToUndoStackRequest { source: string; description?: string; } + +export interface JoinProjectPathRequest { + segments: string | string[]; + codeData?: CodeData; +} + +export interface JoinProjectPathResponse { + filePath: string; + projectPath: string; +} diff --git a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts index f33a9bcf362..543b638c16e 100644 --- a/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts +++ b/workspaces/ballerina/ballerina-core/src/rpc-types/visualizer/rpc-type.ts @@ -18,8 +18,9 @@ * THIS FILE INCLUDES AUTO GENERATED CODE */ import { HistoryEntry } from "../../history"; +import { ProjectStructureArtifactResponse, UpdatedArtifactsResponse } from "../../interfaces/bi"; import { ColorThemeKind } from "../../state-machine-types"; -import { AddToUndoStackRequest, OpenViewRequest, UndoRedoStateResponse } from "./interfaces"; +import { AddToUndoStackRequest, JoinProjectPathRequest, JoinProjectPathResponse, OpenViewRequest, UndoRedoStateResponse } from "./interfaces"; import { NotificationType, RequestType } from "vscode-messenger-common"; const _preFix = "visualizer"; @@ -33,5 +34,7 @@ export const undo: RequestType = { method: `${_preFix}/undo` }; export const redo: RequestType = { method: `${_preFix}/redo` }; export const addToUndoStack: NotificationType = { method: `${_preFix}/addToUndoStack` }; export const undoRedoState: RequestType = { method: `${_preFix}/undoRedoState` }; -export const joinProjectPath: RequestType = { method: `${_preFix}/joinProjectPath` }; +export const resetUndoRedoStack: NotificationType = { method: `${_preFix}/resetUndoRedoStack` }; +export const joinProjectPath: RequestType = { method: `${_preFix}/joinProjectPath` }; export const getThemeKind: RequestType = { method: `${_preFix}/getThemeKind` }; +export const updateCurrentArtifactLocation: RequestType = { method: `${_preFix}/updateCurrentArtifactLocation` }; diff --git a/workspaces/ballerina/ballerina-core/src/state-machine-types.ts b/workspaces/ballerina/ballerina-core/src/state-machine-types.ts index 5a1d5b1bfc2..1040cb0d65f 100644 --- a/workspaces/ballerina/ballerina-core/src/state-machine-types.ts +++ b/workspaces/ballerina/ballerina-core/src/state-machine-types.ts @@ -20,9 +20,9 @@ import { NotificationType, RequestType } from "vscode-messenger-common"; import { NodePosition, STNode } from "@wso2/syntax-tree"; import { Command } from "./interfaces/ai-panel"; import { LinePosition } from "./interfaces/common"; -import { Type } from "./interfaces/extended-lang-client"; +import { ProjectInfo, ProjectMigrationResult, Type } from "./interfaces/extended-lang-client"; import { CodeData, DIRECTORY_MAP, ProjectStructureArtifactResponse, ProjectStructureResponse } from "./interfaces/bi"; -import { DiagnosticEntry, TestGeneratorIntermediaryState, DocumentationGeneratorIntermediaryState } from "./rpc-types/ai-panel/interfaces"; +import { DiagnosticEntry, TestGeneratorIntermediaryState, DocumentationGeneratorIntermediaryState, SourceFile } from "./rpc-types/ai-panel/interfaces"; export type MachineStateValue = | 'initialize' @@ -63,7 +63,8 @@ export enum SCOPE { export type VoidCommands = "OPEN_LOW_CODE" | "OPEN_PROJECT" | "CREATE_PROJECT"; export enum MACHINE_VIEW { - Overview = "Overview", + PackageOverview = "Overview", + WorkspaceOverview = "Workspace Overview", BallerinaUpdateView = "Ballerina Update View", SequenceDiagram = "Sequence Diagram", ServiceDesigner = "Service Designer", @@ -77,6 +78,7 @@ export enum MACHINE_VIEW { BIWelcome = "BI Welcome", BIProjectForm = "BI Project SKIP", BIImportIntegration = "BI Import Integration SKIP", + BIAddProjectForm = "BI Add Project SKIP", BIComponentView = "BI Component View", AddConnectionWizard = "Add Connection Wizard", AddCustomConnector = "Add Custom Connector", @@ -96,7 +98,9 @@ export enum MACHINE_VIEW { BIDataMapperForm = "Add Data Mapper SKIP", AIAgentDesigner = "AI Agent Designer", AIChatAgentWizard = "AI Chat Agent Wizard", - ResolveMissingDependencies = "Resolve Missing Dependencies" + ResolveMissingDependencies = "Resolve Missing Dependencies", + ServiceFunctionForm = "Service Function Form", + BISamplesView = "BI Samples View" } export interface MachineEvent { @@ -119,13 +123,16 @@ export type FocusFlowDiagramView = typeof FOCUS_FLOW_DIAGRAM_VIEW[keyof typeof F export interface VisualizerLocation { view?: MACHINE_VIEW | null; documentUri?: string; - projectUri?: string; + projectPath?: string; + workspacePath?: string; + projectInfo?: ProjectInfo; identifier?: string; parentIdentifier?: string; artifactType?: DIRECTORY_MAP; position?: NodePosition; syntaxTree?: STNode; isBI?: boolean; + isInDevant?: boolean; focusFlowDiagramView?: FocusFlowDiagramView; serviceType?: string; type?: Type; @@ -137,7 +144,17 @@ export interface VisualizerLocation { projectStructure?: ProjectStructureResponse; org?: string; package?: string; + moduleName?: string; + version?: string; dataMapperMetadata?: DataMapperMetadata; + artifactInfo?: ArtifactInfo; +} + +export interface ArtifactInfo { + org?: string; + packageName?: string; + moduleName?: string; + version?: string; } export interface ArtifactData { @@ -189,7 +206,8 @@ export type ChatNotify = | ToolCall | ToolResult | EvalsToolResult - | UsageMetricsEvent; + | UsageMetricsEvent + | GeneratedSourcesEvent; export interface ChatStart { type: "start"; @@ -255,14 +273,21 @@ export interface UsageMetricsEvent { }; } +export interface GeneratedSourcesEvent { + type: "generated_sources"; + fileArray: SourceFile[]; +} + export const stateChanged: NotificationType = { method: 'stateChanged' }; export const onDownloadProgress: NotificationType = { method: 'onDownloadProgress' }; export const onChatNotify: NotificationType = { method: 'onChatNotify' }; export const onMigrationToolLogs: NotificationType = { method: 'onMigrationToolLogs' }; export const onMigrationToolStateChanged: NotificationType = { method: 'onMigrationToolStateChanged' }; +export const onMigratedProject: NotificationType = { method: 'onMigratedProject' }; export const projectContentUpdated: NotificationType = { method: 'projectContentUpdated' }; export const getVisualizerLocation: RequestType = { method: 'getVisualizerLocation' }; export const webviewReady: NotificationType = { method: `webviewReady` }; +export const dependencyPullProgress: NotificationType = { method: 'dependencyPullProgress' }; // Artifact updated request and notification export const onArtifactUpdatedNotification: NotificationType = { method: 'onArtifactUpdatedNotification' }; @@ -341,8 +366,8 @@ export interface AnthropicKeySecrets { } export interface DevantEnvSecrets { - apiKey: string; - stsToken: string; + accessToken: string; + expiresAt: number; } interface AwsBedrockSecrets { diff --git a/workspaces/ballerina/ballerina-extension/.env.example b/workspaces/ballerina/ballerina-extension/.env.example index dfd30ccbeaa..a216162b012 100644 --- a/workspaces/ballerina/ballerina-extension/.env.example +++ b/workspaces/ballerina/ballerina-extension/.env.example @@ -1,8 +1,8 @@ # Prod Copilot -BALLERINA_DEFAULT_COPLIOT_ROOT_URL=https://dev-tools.wso2.com/ballerina-copilot -BALLERINA_DEFAULT_COPLIOT_AUTH_ORG= -BALLERINA_DEFAULT_COPLIOT_AUTH_CLIENT_ID= -BALLERINA_DEFAULT_COPLIOT_AUTH_REDIRECT_URL=https://eae690d5-80c3-4fb7-9bc5-e8d747cca11b.e1-us-east-azure.choreoapps.dev +BALLERINA_ROOT_URL=https://dev-tools.wso2.com/ballerina-copilot +BALLERINA_AUTH_ORG= +BALLERINA_AUTH_CLIENT_ID= +BALLERINA_AUTH_REDIRECT_URL=https://eae690d5-80c3-4fb7-9bc5-e8d747cca11b.e1-us-east-azure.choreoapps.dev BALLERINA_DEFAULT_COPLIOT_CODE_API_KEY= BALLERINA_DEFAULT_COPLIOT_ASK_API_KEY= diff --git a/workspaces/ballerina/ballerina-extension/.vscode/launch.json b/workspaces/ballerina/ballerina-extension/.vscode/launch.json index db7f0a92fa6..5c675330d61 100644 --- a/workspaces/ballerina/ballerina-extension/.vscode/launch.json +++ b/workspaces/ballerina/ballerina-extension/.vscode/launch.json @@ -17,7 +17,8 @@ "LSDEBUG": "false", "WEB_VIEW_WATCH_MODE": "true", "WEB_VIEW_DEV_HOST": "http://localhost:9000", - "BALLERINA_STAGE_CENTRAL": "false" + "BALLERINA_STAGE_CENTRAL": "false", + "TRACE_WEB_VIEW_DEV_HOST": "http://localhost:9001" }, "outFiles": [ "${workspaceFolder}/dist/**/*.js" diff --git a/workspaces/ballerina/ballerina-extension/CHANGELOG.md b/workspaces/ballerina/ballerina-extension/CHANGELOG.md index da676fc7531..37c8c539578 100644 --- a/workspaces/ballerina/ballerina-extension/CHANGELOG.md +++ b/workspaces/ballerina/ballerina-extension/CHANGELOG.md @@ -4,9 +4,82 @@ All notable changes to the **Ballerina** extension will be documented in this fi The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/). +## [5.6.3](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.5.2...ballerina-integrator-1.5.3) - 2025-12-01 -## [Unreleased] +### Changed + +- **Data Mapper** — Improved completion support for the expression bar and clause editor. Re-enabled array aggregating options. + +### Fixed + +- **Data Mapper** — Fixed expression bar focusing, inline undo button, and crashes during mapping clearance. +- **AI Data Mapper** — Fixed error handling, output formatting, and compilation errors. + +## [5.6.2](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.5.1...ballerina-integrator-1.5.2) - 2025-11-18 + +### Changed + +- **Workspace & Project Management** — Improved workspace management with a new Workspace Overview, expanded tree view support, and multi-project migration capabilities. Integration management is enhanced, allowing additions and deletions directly from the overview. The build command and language server integration have also been updated for better multi-project support. +- **Editor & Configuration** — Updated the expression editor with an expanded view for a better editing experience. The service and record configuration views have been improved with better styling, diagnostics, and form support. Configuration editing is enhanced with a new configuration object editor, and the dependency pull flow now provides improved visual feedback. +- **AI Features** — Enhanced the AI Data Mapper to support multiple file uploads and updated the AI code generator for compatibility with Ballerina workspaces. +- **Editor & UX** — Improved the user experience for the expanded expression editor and component diagram. Refactored floating button styles in the expression editor for better theming, and improved chip styling for light themes. +- **Project & Configuration** — Enhanced feature compatibility validation across different Ballerina versions. Updated the package configurable view for better configuration management. + +### Fixed + +- **Expression Editor & Configuration Views** — Resolved multiple issues in the expression editor, including problems with completions, styles, and value synchronization in the record config view. Fixed popup stacking order and button alignment in configuration popups. +- **General UI & Editor** — Addressed UI glitches, including a helper pane overflow issue, incorrect tree item highlighting with diagnostics, and an infinite re-render bug in the print form. Fixed a language server project loading issue in workspace setups. +- **Security** — Updated dependencies to address security vulnerabilities (`CVE-2025-64718`, `CVE-2025-64756`). + +## [5.6.1](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.5.0...ballerina-integrator-1.5.1) - 2025-11-12 + +### Fixed + +- **Ballerina Version Compatibility** — The "New Project" and "Natural Programming functions" features are now only shown for Ballerina versions 2201.13.0 and above. + + +## [5.6.0](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.4.0...ballerina-integrator-1.5.0) - 2025-11-11 + +### Added + +- **Editor** — Added support for [Ballerina workspaces](https://ballerina.io/learn/workspaces/). This allows you to seamlessly manage, navigate, and build multiple related Ballerina projects within a single VS Code window, greatly improving the development workflow for complex systems. + +## [5.5.0](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.3.2...ballerina-integrator-1.4.0) - 2025-11-05 + +### Added + +- **Service & Data Handling** — Introduced MCP AI and Solace Event integrations, redesigned Service and Event Integration flows with AI-powered payload generation, and introduced an LLM-based Data Mapper. +- **GraphQL Designer** — Added schema-based service generation, GraphQL-based type suggestions, `graphql:ID` annotation support, and documentation on GraphQL fields. +- **Expression Editor** — Enhanced the expression editor with improved syntax highlighting. The expression helper now offers distinct modes for both text and expression inputs. + +### Changed + +- **AI & Copilot** — Improved AI code generation formatting, step handling, and system prompts for better response structure. +- **Service Designer** — Revamped the view with more organized listener and service properties, enhanced with readable listener names, and refactored metadata display. +- **Data Mapper** — Improved breadcrumb labels and refactored preview behavior for output-side arrays. +- **UI & UX** — Enhanced the Helper Pane UI and navigation, and refactored the Resource form styles. Improved the Type Editor with type import capability and automatic generation of sample JSON for payload types. + +### Fixed + +- **Data Mapper** — Corrected issues with mappings generated for output header ports. +- **Service Designer** — Resolved an infinite re-render issue and fixed bugs in the API designer and MCP tool editing. +- **Expression Editor** — Fixed issues with constrained language in Windows PowerShell, delete key behavior, and text selection. +- **UI & UX** — Addressed UI glitches, including a popup movement issue when dragging the terminal, and fixed `undo/redo` stack reset conditions. +- **GraphQL** — Removed Union Types from GraphQL Input Types. +- **AI & Copilot** — Fixed invalid markdown characters in the chat window, file creation issues, and state management in the chat window. Resolved a bug where the reusable model provider form was not displaying correctly. + +## [5.4.2](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.3.1...ballerina-integrator-1.3.2) - 2025-10-26 + +### Changed + +- **Data Mapper** — Enabled reset and refresh options. + +### Fixed +- **Editor** — Allowed artifact creation even when corresponding source files are missing. +- **Data Mapper** — Added support for mappings with built-in Ballerina sub-types (e.g., `int:Signed32`), fixed creation using types from sub-modules, enabled expression-bar completions for reusable mappers, and corrected link rendering for optional field access. +- **Type Browser** — Improved type filtering based on user queries. +- **Service Class Designer** — Enabled connection generation for clients created from WSDL files. ## [5.4.1](https://github.com/wso2/vscode-extensions/compare/ballerina-integrator-1.3.0...ballerina-integrator-1.3.1) - 2025-10-15 diff --git a/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar b/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar index eb62358724d..10325fc5436 160000 --- a/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar +++ b/workspaces/ballerina/ballerina-extension/grammar/ballerina-grammar @@ -1 +1 @@ -Subproject commit eb62358724deaad784458ae1d5ec33c4d164e483 +Subproject commit 10325fc5436a87606407ba68bf668bcd59dc180d diff --git a/workspaces/ballerina/ballerina-extension/package.json b/workspaces/ballerina/ballerina-extension/package.json index c1d47b8bf17..8874f6ea942 100644 --- a/workspaces/ballerina/ballerina-extension/package.json +++ b/workspaces/ballerina/ballerina-extension/package.json @@ -2,7 +2,7 @@ "name": "ballerina", "displayName": "Ballerina", "description": "Ballerina Language support, debugging, graphical visualization, AI-based data-mapping and many more.", - "version": "5.4.1", + "version": "5.6.3", "publisher": "wso2", "icon": "resources/images/ballerina.png", "homepage": "https://wso2.com/ballerina/vscode/docs", @@ -26,7 +26,6 @@ "activationEvents": [ "onStartupFinished", "onLanguage:ballerina", - "onCommand:ballerina.showExamples", "workspaceContains:**/Ballerina.toml", "onNotebook:ballerina-notebook", "onUri" @@ -348,11 +347,6 @@ } ], "commands": [ - { - "command": "ballerina.showExamples", - "title": "Show Examples", - "category": "Ballerina" - }, { "command": "ballerina.project.build", "title": "Build", @@ -388,12 +382,6 @@ "title": "Add Module", "category": "Ballerina" }, - { - "command": "ballerina.new.module", - "title": "Add Module", - "category": "Ballerina", - "icon": "$(distro-new-module)" - }, { "command": "ballerina.refreshPackageTree", "title": "Refresh", @@ -590,11 +578,6 @@ }, "category": "BI" }, - { - "command": "BI.project-explorer.refresh", - "title": "Refresh Ballerina", - "category": "BI" - }, { "command": "BI.test.edit.function", "title": "View test flow", @@ -680,19 +663,13 @@ "group": "navigation", "category": "BI" }, - { - "command": "BI.project-explorer.switch-project", - "title": "Switch Project", - "icon": "$(distro-switch-project)", - "group": "navigation", - "category": "BI" - }, { "command": "BI.project-explorer.add", - "title": "Add Construct", + "title": "Add Project", "icon": "$(add)", "group": "navigation", - "category": "BI" + "category": "BI", + "when": "ballerina.bi.workspaceSupported" }, { "command": "BI.project-explorer.overview", @@ -727,9 +704,42 @@ "group": "navigation", "category": "BI", "enablement": "isBIProject && devant.editor" + }, + { + "command": "ballerina.showTraceWindow", + "title": "Show Traces", + "icon": "$(list-tree)", + "category": "Ballerina" + }, + { + "command": "ballerina.enableTracing", + "title": "Enable Tracing (Experimental)", + "category": "Ballerina" + }, + { + "command": "ballerina.disableTracing", + "title": "Disable Tracing (Experimental)", + "category": "Ballerina", + "icon": "$(circle-slash)" + }, + { + "command": "ballerina.clearTraces", + "title": "Clear Traces (Experimental)", + "category": "Ballerina", + "icon": "$(clear-all)", + "hidden": true } ], "views": { + "ballerina-traceView": [ + { + "id": "ballerina-traceView", + "title": "Tracing", + "name": "Tracing", + "icon": "$(list-tree)", + "when": "ballerina.tracingEnabled" + } + ], "notebook-variables": [ { "type": "webview", @@ -740,13 +750,30 @@ ] }, "viewsWelcome": [ + { + "view": "ballerina-traceView", + "contents": "Tracing is disabled. Enable tracing to view traces from your Ballerina program.\n[Enable Tracing](command:ballerina.enableTracing)", + "when": "!ballerina.tracingEnabled" + }, + { + "view": "ballerina-traceView", + "contents": "No traces collected yet. Run your Ballerina program to see traces here.", + "when": "ballerina.tracingEnabled && ballerina.tracesEmpty" + }, { "view": "testing", - "contents": "[Add Unit Test](command:BI.test.add.function)" + "contents": "[Add Unit Test](command:BI.test.add.function)", + "when": "isBIProject || isBallerinaProject" } ], "viewsContainers": { "panel": [ + { + "id": "ballerina-traceView", + "title": "Traces", + "icon": "$(list-tree)", + "when": "ballerina.tracingEnabled" + }, { "id": "notebook-variables", "title": "Ballerina Notebook", @@ -780,8 +807,20 @@ }, { "command": "BI.test.add.function", - "when": "view == workbench.view.testing", + "when": "(isBIProject || isBallerinaProject) && view == workbench.view.testing", "group": "navigation" + }, + { + "command": "ballerina.disableTracing", + "when": "view == ballerina-traceView && ballerina.tracingEnabled", + "group": "navigation", + "title": "Disable Tracing" + }, + { + "command": "ballerina.clearTraces", + "when": "view == ballerina-traceView && ballerina.tracingEnabled && !ballerina.tracesEmpty", + "group": "navigation", + "title": "Clear Traces" } ], "editor/title": [ @@ -891,10 +930,6 @@ } ], "commandPalette": [ - { - "command": "ballerina.new.module", - "when": "editorLangId != ballerina && !isBallerinaDiagram" - }, { "command": "ballerina.show.source", "when": "editorLangId != ballerina && !isBallerinaDiagram" @@ -980,21 +1015,21 @@ "description": "design-view", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f182" + "fontCharacter": "\\f16e" } }, "distro-start": { "description": "start", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f1f7" + "fontCharacter": "\\f11a" } }, "distro-debug": { "description": "debug", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f17d" + "fontCharacter": "\\f171" } }, "distro-source-view": { @@ -1008,7 +1043,7 @@ "description": "persist-diagram", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f1d2" + "fontCharacter": "\\f133" } }, "distro-cached-rounded": { @@ -1140,33 +1175,36 @@ "test-coverage": "cross-env COVER_CONFIG=html pnpm run test", "build-tm-grammar": "js-yaml grammar/ballerina-grammar/syntaxes/ballerina.tmLanguage.yaml > grammar/ballerina-grammar/syntaxes/ballerina.tmLanguage.json", "lint": "tslint --fix 'src/**/*{.ts,.tsx}'", - "package": "if [ $isPreRelease = true ]; then vsce package --no-dependencies --pre-release; else vsce package --no-dependencies; fi", + "package": "node ../../common-libs/scripts/package-vsix.js", "copyFonts": "copyfiles -f ./node_modules/@wso2/font-wso2-vscode/dist/* ./resources/font-wso2-vscode/dist/", "copyVSIX": "copyfiles *.vsix ./vsix", "copyVSIXToRoot": "copyfiles -f ./vsix/*.vsix ../../..", "download-ls": "node scripts/download-ls.js", + "download-ls:prerelease": "node scripts/download-ls.js --prerelease --replace", "build": "pnpm run compile && pnpm run lint && pnpm run postbuild", "rebuild": "pnpm run clean && pnpm run compile && pnpm run postbuild", "postbuild": "if [ \"$isPreRelease\" = \"true\" ]; then pnpm run download-ls --prerelease; else pnpm run download-ls; fi && pnpm run copyFonts && pnpm run copyJSLibs && pnpm run package && pnpm run copyVSIX", - "copyJSLibs": "copyfiles -f ../ballerina-visualizer/build/*.js resources/jslibs" + "copyJSLibs": "copyfiles -f ../ballerina-visualizer/build/*.js resources/jslibs && copyfiles -f ../trace-visualizer/build/*.js resources/jslibs" }, "dependencies": { "@ai-sdk/amazon-bedrock": "^3.0.25", "@ai-sdk/anthropic": "^2.0.20", + "@iarna/toml": "^2.2.5", "@types/lodash": "^4.14.200", "@vscode/test-electron": "^2.5.2", - "@vscode/vsce": "^2.22.0", + "@vscode/vsce": "^3.7.0", "@wso2/ballerina-core": "workspace:*", "@wso2/ballerina-visualizer": "workspace:*", "@wso2/font-wso2-vscode": "workspace:*", "@wso2/syntax-tree": "workspace:*", + "@wso2/trace-visualizer": "workspace:*", "@wso2/wso2-platform-core": "workspace:*", "ai": "^5.0.56", "cors-anywhere": "^0.4.4", "del-cli": "^5.1.0", "dotenv": "~16.5.0", "file-uri-to-path": "^2.0.0", - "glob": "^7.2.3", + "glob": "^11.1.0", "handlebars": "~4.7.8", "jwt-decode": "^4.0.0", "lodash": "^4.17.21", @@ -1174,8 +1212,9 @@ "node-fetch": "^3.3.2", "node-schedule": "^2.1.1", "portfinder": "^1.0.32", + "protobufjs": "^7.2.5", "source-map-support": "^0.5.21", - "toml": "^3.0.0", + "unzipper": "~0.12.3", "uuid": "^11.1.0", "vscode-debugadapter": "^1.51.0", "vscode-debugprotocol": "^1.51.0", @@ -1205,9 +1244,9 @@ "copyfiles": "^2.4.1", "cross-env": "^7.0.3", "decache": "^4.6.2", - "express": "^4.18.2", + "express": "^4.22.1", "istanbul": "^0.4.5", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "jwt-decode": "^3.1.2", "keytar": "^7.9.0", "kill-port": "2.0.1", @@ -1225,7 +1264,6 @@ "vscode-messenger": "^0.4.4", "webpack": "^5.89.0", "webpack-cli": "^6.0.1", - "webpack-merge-and-include-globally": "^2.3.4", "yarn": "^1.22.19" }, "extensionPack": [ diff --git a/workspaces/ballerina/ballerina-extension/scripts/download-ls.js b/workspaces/ballerina/ballerina-extension/scripts/download-ls.js index d4c2a9d4f59..71a6ba0d39f 100644 --- a/workspaces/ballerina/ballerina-extension/scripts/download-ls.js +++ b/workspaces/ballerina/ballerina-extension/scripts/download-ls.js @@ -10,6 +10,7 @@ const GITHUB_REPO_URL = 'https://api.github.com/repos/ballerina-platform/balleri const args = process.argv.slice(2); const usePrerelease = args.includes('--prerelease') || process.env.isPreRelease === 'true'; +const forceReplace = args.includes('--replace'); function checkExistingJar() { try { @@ -100,7 +101,6 @@ function downloadFile(url, outputPath, maxRedirects = 5) { return; } - console.log(`Following redirect to: ${res.headers.location}`); makeRequest(res.headers.location, redirectCount + 1); return; } @@ -178,11 +178,16 @@ async function getLatestRelease(usePrerelease) { async function main() { try { - if (checkExistingJar()) { + if (!forceReplace && checkExistingJar()) { process.exit(0); } - console.log(`Downloading Ballerina language server${usePrerelease ? ' (prerelease)' : ''}...`); + console.log(`Downloading Ballerina language server${usePrerelease ? ' (prerelease)' : ''}${forceReplace ? ' (force replace)' : ''}...`); + + if (forceReplace && fs.existsSync(LS_DIR)) { + console.log('Force replace enabled: clearing existing language server directory...'); + fs.rmSync(LS_DIR, { recursive: true, force: true }); + } if (!fs.existsSync(LS_DIR)) { fs.mkdirSync(LS_DIR, { recursive: true }); diff --git a/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts b/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts index 42dea359982..f8c729538b4 100644 --- a/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts +++ b/workspaces/ballerina/ballerina-extension/src/RPCLayer.ts @@ -130,7 +130,8 @@ async function getContext(): Promise { position: context.position, syntaxTree: context.syntaxTree, isBI: context.isBI, - projectUri: context.projectUri, + isInDevant: context.isInDevant, + projectPath: context.projectPath, serviceType: context.serviceType, type: context.type, isGraphql: context.isGraphql, @@ -140,14 +141,15 @@ async function getContext(): Promise { metadata: { isBISupported: context.isBISupported, haveLS: StateMachine.langClient() && true, - recordFilePath: path.join(context.projectUri, "types.bal"), + recordFilePath: context.projectPath ? path.join(context.projectPath, "types.bal") : undefined, enableSequenceDiagram: extension.ballerinaExtInstance.enableSequenceDiagramView(), target: context.metadata?.target }, scope: context.scope, org: context.org, package: context.package, - dataMapperMetadata: context.dataMapperMetadata + dataMapperMetadata: context.dataMapperMetadata, + artifactInfo: context.artifactInfo }); }); } diff --git a/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts b/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts index 1094af3ecbd..816c4f46e56 100644 --- a/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts +++ b/workspaces/ballerina/ballerina-extension/src/core/extended-language-client.ts @@ -258,9 +258,24 @@ import { onMigrationToolStateChanged, onMigrationToolLogs, GetMigrationToolsResponse, + ServiceModelInitResponse, + ServiceInitSourceRequest, DeleteSubMappingRequest, DeleteClauseRequest, - ClearTypeCacheResponse + ClearTypeCacheResponse, + FormDiagnosticsRequest, + FormDiagnosticsResponse, + BISearchNodesRequest, + BISearchNodesResponse, + ExpressionTokensRequest, + ExpressionTokensResponse, + ProjectInfoRequest, + ProjectInfo, + onMigratedProject, + ProjectMigrationResult, + FieldPropertyRequest, + ClausePositionResponse, + ClausePositionRequest } from "@wso2/ballerina-core"; import { BallerinaExtension } from "./index"; import { debug, handlePullModuleProgress } from "../utils"; @@ -333,7 +348,7 @@ enum EXTENDED_APIS { BI_AVAILABLE_MODEL_PROVIDERS = 'flowDesignService/getAvailableModelProviders', BI_AVAILABLE_VECTOR_STORES = 'flowDesignService/getAvailableVectorStores', BI_AVAILABLE_EMBEDDING_PROVIDERS = 'flowDesignService/getAvailableEmbeddingProviders', - BI_AVAILABLE_VECTOR_KNOWLEDGE_BASES = 'flowDesignService/getAvailableVectorKnowledgeBases', + BI_AVAILABLE_KNOWLEDGE_BASES = 'flowDesignService/getAvailableVectorKnowledgeBases', BI_AVAILABLE_DATA_LOADERS = 'flowDesignService/getAvailableDataLoaders', BI_AVAILABLE_CHUNKS = 'flowDesignService/getAvailableChunkers', BI_NODE_TEMPLATE = 'flowDesignService/getNodeTemplate', @@ -342,6 +357,7 @@ enum EXTENDED_APIS { BI_GEN_ERROR_HANDLER = 'flowDesignService/addErrorHandler', BI_GET_ENCLOSED_FUNCTION = 'flowDesignService/getEnclosedFunctionDef', BI_EXPRESSION_COMPLETIONS = 'expressionEditor/completion', + BI_DATA_MAPPER_COMPLETIONS = 'expressionEditor/dataMapperCompletion', VISIBLE_VARIABLE_TYPES = 'expressionEditor/visibleVariableTypes', DATA_MAPPER_MAPPINGS = 'dataMapper/mappings', DATA_MAPPER_GET_SOURCE = 'dataMapper/getSource', @@ -357,7 +373,9 @@ enum EXTENDED_APIS { DATA_MAPPER_MAP_WITH_TRANSFORM_FN = 'dataMapper/transformationFunction', DATA_MAPPER_CODEDATA = 'dataMapper/nodePosition', DATA_MAPPER_SUB_MAPPING_CODEDATA = 'dataMapper/subMapping', - DATA_MAPPER_PROPERTY = 'dataMapper/fieldPosition', + DATA_MAPPER_PROPERTY = 'dataMapper/targetFieldPosition', + DATA_MAPPER_FIELD_PROPERTY = 'dataMapper/fieldPosition', + DATA_MAPPER_CLAUSE_POSITION = 'dataMapper/clausePosition', DATA_MAPPER_CLEAR_TYPE_CACHE = 'dataMapper/clearTypeCache', VIEW_CONFIG_VARIABLES = 'configEditor/getConfigVariables', UPDATE_CONFIG_VARIABLES = 'configEditor/updateConfigVariables', @@ -372,6 +390,7 @@ enum EXTENDED_APIS { BI_SIGNATURE_HELP = 'expressionEditor/signatureHelp', BI_VISIBLE_TYPES = 'expressionEditor/types', REFERENCES = 'textDocument/references', + BI_FORM_DIAGNOSTICS = 'flowDesignService/diagnostics', BI_EXPRESSION_DIAGNOSTICS = 'expressionEditor/diagnostics', BI_TRIGGER_MODELS = 'triggerDesignService/getTriggerModels', BI_TRIGGER_MODEL = 'triggerDesignService/getTriggerModel', @@ -397,6 +416,8 @@ enum EXTENDED_APIS { BI_SERVICE_UPDATE_LISTENER = 'serviceDesign/updateListener', BI_SERVICE_GET_LISTENER_SOURCE = 'serviceDesign/getListenerFromSource', BI_SERVICE_GET_SERVICE = 'serviceDesign/getServiceModel', + BI_SERVICE_GET_SERVICE_INIT = 'serviceDesign/getServiceInitModel', + BI_SERVICE_CREATE_SERVICE_AND_LISTENER = 'serviceDesign/addServiceAndListener', BI_SERVICE_GET_FUNCTION = 'serviceDesign/getFunctionModel', BI_SERVICE_ADD_SERVICE = 'serviceDesign/addService', BI_SERVICE_UPDATE_SERVICE = 'serviceDesign/updateService', @@ -420,6 +441,7 @@ enum EXTENDED_APIS { BI_ADD_TEST_FUNCTION = 'testManagerService/addTestFunction', BI_UPDATE_TEST_FUNCTION = 'testManagerService/updateTestFunction', BI_EDIT_FUNCTION_NODE = 'flowDesignService/functionDefinition', + BI_GET_EXPRESSION_TOKENS = 'expressionEditor/semanticTokens', BI_AI_AGENT_ORG = 'agentManager/getAiModuleOrg', BI_AI_ALL_AGENTS = 'agentManager/getAllAgents', BI_AI_ALL_MODELS = 'agentManager/getAllModels', @@ -433,9 +455,11 @@ enum EXTENDED_APIS { BI_ADD_ICP = 'icpService/addICP', BI_DISABLE_ICP = 'icpService/disableICP', BI_SEARCH = 'flowDesignService/search', + BI_SEARCH_NODES = 'flowDesignService/searchNodes', OPEN_API_GENERATE_CLIENT = 'openAPIService/genClient', OPEN_API_GENERATED_MODULES = 'openAPIService/getModules', OPEN_API_CLIENT_DELETE = 'openAPIService/deleteModule', + GET_PROJECT_INFO = 'designModelService/projectInfo', GET_ARTIFACTS = 'designModelService/artifacts', PUBLISH_ARTIFACTS = 'designModelService/publishArtifacts', COPILOT_ALL_LIBRARIES = 'copilotLibraryManager/getLibrariesList', @@ -445,6 +469,7 @@ enum EXTENDED_APIS { MULE_TO_BI = 'projectService/importMule', MIGRATION_TOOL_STATE = 'projectService/stateCallback', MIGRATION_TOOL_LOG = 'projectService/logCallback', + PUSH_MIGRATED_PROJECT = 'projectService/pushMigratedProject' } enum EXTENDED_APIS_ORG { @@ -567,12 +592,28 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl console.error("Error in MIGRATION_TOOL_LOG handler:", error); } }); + + this.onNotification(EXTENDED_APIS.PUSH_MIGRATED_PROJECT, async (res: ProjectMigrationResult) => { + try { + RPCLayer._messenger.sendNotification( + onMigratedProject, + { type: "webview", webviewType: VisualizerWebview.viewType }, + res + ); + } catch (error) { + console.error("Error in PUSH_MIGRATED_PROJECT handler:", error); + } + }); } async getProjectArtifacts(params: ProjectArtifactsRequest): Promise { return this.sendRequest(EXTENDED_APIS.GET_ARTIFACTS, params); } + async getProjectInfo(params: ProjectInfoRequest): Promise { + return this.sendRequest(EXTENDED_APIS.GET_PROJECT_INFO, params); + } + async definition(params: DefinitionParams): Promise { return this.sendRequest(VSCODE_APIS.DEFINITION, params); } @@ -809,6 +850,14 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.DATA_MAPPER_PROPERTY, params); } + async getFieldProperty(params: FieldPropertyRequest): Promise { + return this.sendRequest(EXTENDED_APIS.DATA_MAPPER_FIELD_PROPERTY, params); + } + + async getClausePosition(params: ClausePositionRequest): Promise { + return this.sendRequest(EXTENDED_APIS.DATA_MAPPER_CLAUSE_POSITION, params); + } + async clearTypeCache(): Promise { return this.sendRequest(EXTENDED_APIS.DATA_MAPPER_CLEAR_TYPE_CACHE); } @@ -1026,7 +1075,7 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl } async getAvailableVectorKnowledgeBases(params: BIAvailableNodesRequest): Promise { - return this.sendRequest(EXTENDED_APIS.BI_AVAILABLE_VECTOR_KNOWLEDGE_BASES, params); + return this.sendRequest(EXTENDED_APIS.BI_AVAILABLE_KNOWLEDGE_BASES, params); } async getAvailableDataLoaders(params: BIAvailableNodesRequest): Promise { @@ -1110,6 +1159,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_EXPRESSION_COMPLETIONS, params); } + async getDataMapperCompletions(params: ExpressionCompletionsRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_DATA_MAPPER_COMPLETIONS, params); + } + async getModuleNodes(params: BIModuleNodesRequest): Promise { return this.sendRequest(EXTENDED_APIS.BI_MODULE_NODES, params); } @@ -1134,6 +1187,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_GEN_ERROR_HANDLER, params); } + async getFormDiagnostics(params: FormDiagnosticsRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_FORM_DIAGNOSTICS, params); + } + async getExpressionDiagnostics(params: ExpressionDiagnosticsRequest): Promise { return this.sendRequest(EXTENDED_APIS.BI_EXPRESSION_DIAGNOSTICS, params); } @@ -1150,6 +1207,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_EDIT_FUNCTION_NODE, params); } + async getExpressionTokens(params: ExpressionTokensRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_GET_EXPRESSION_TOKENS, params); + } + async getListenerModel(params: ListenerModelRequest): Promise { return this.sendRequest(EXTENDED_APIS.BI_SERVICE_GET_LISTENER, params); } @@ -1170,6 +1231,14 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_SERVICE_GET_SERVICE, params); } + async getServiceInitModel(params: ServiceModelRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_SERVICE_GET_SERVICE_INIT, params); + } + + async createServiceAndListener(params: ServiceInitSourceRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_SERVICE_CREATE_SERVICE_AND_LISTENER, params); + } + async getFunctionModel(params: FunctionModelRequest): Promise { return this.sendRequest(EXTENDED_APIS.BI_SERVICE_GET_FUNCTION, params); } @@ -1210,8 +1279,8 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_SERVICE_GET_RESOURCE, params); } - async getResourceReturnTypes(params: ResourceReturnTypesRequest): Promise { - return this.sendRequest(EXTENDED_APIS.BI_SERVICE_GET_RESOURCE_RETURN_TYPES, params); + async getResourceReturnTypes(params: ResourceReturnTypesRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_SERVICE_GET_RESOURCE_RETURN_TYPES, params); } async addResourceSourceCode(params: FunctionSourceCodeRequest): Promise { @@ -1318,6 +1387,10 @@ export class ExtendedLangClient extends LanguageClient implements ExtendedLangCl return this.sendRequest(EXTENDED_APIS.BI_SEARCH, params); } + async searchNodes(params: BISearchNodesRequest): Promise { + return this.sendRequest(EXTENDED_APIS.BI_SEARCH_NODES, params); + } + async openApiGenerateClient(params: OpenAPIClientGenerationRequest): Promise { return this.sendRequest(EXTENDED_APIS.OPEN_API_GENERATE_CLIENT, params); } diff --git a/workspaces/ballerina/ballerina-extension/src/core/extension.ts b/workspaces/ballerina/ballerina-extension/src/core/extension.ts index e8de14a22a0..e63257c23b4 100644 --- a/workspaces/ballerina/ballerina-extension/src/core/extension.ts +++ b/workspaces/ballerina/ballerina-extension/src/core/extension.ts @@ -33,7 +33,19 @@ import { exec, spawnSync, execSync } from 'child_process'; import { LanguageClientOptions, State as LS_STATE, RevealOutputChannelOn, ServerOptions } from "vscode-languageclient/node"; import { getServerOptions } from '../utils/server/server'; import { ExtendedLangClient } from './extended-language-client'; -import { debug, log, getOutputChannel, outputChannel, isWindows, isWSL, isSupportedVersion, VERSION, isSupportedSLVersion } from '../utils'; +import { + debug, + log, + getOutputChannel, + outputChannel, + isWindows, + isWSL, + isSupportedVersion, + VERSION, + isSupportedSLVersion, + createVersionNumber, + checkIsBallerinaWorkspace +} from '../utils'; import { AssertionError } from "assert"; import { BALLERINA_HOME, ENABLE_ALL_CODELENS, ENABLE_TELEMETRY, ENABLE_SEMANTIC_HIGHLIGHTING, OVERRIDE_BALLERINA_HOME, @@ -142,6 +154,7 @@ export class BallerinaExtension { public ballerinaVersion: string; public biSupported: boolean; public isNPSupported: boolean; + public isWorkspaceSupported: boolean; public extension: Extension; private clientOptions: LanguageClientOptions; public langClient?: ExtendedLangClient; @@ -172,6 +185,7 @@ export class BallerinaExtension { this.ballerinaVersion = ''; this.biSupported = false; this.isNPSupported = false; + this.isWorkspaceSupported = false; this.isPersist = false; this.ballerinaUserHomeName = '.ballerina'; @@ -442,9 +456,26 @@ export class BallerinaExtension { } try { - this.biSupported = isSupportedSLVersion(this, 2201123); // Minimum supported version for BI - this.isNPSupported = isSupportedSLVersion(this, 2201130) && this.enabledExperimentalFeatures(); // Minimum supported requirements for NP - debug(`[INIT] Feature support calculated - BI: ${this.biSupported}, NP: ${this.isNPSupported}`); + this.biSupported = isSupportedSLVersion(this, createVersionNumber(2201, 12, 3)); // Minimum supported version for BI: 2201.12.3 + this.isNPSupported = isSupportedSLVersion(this, createVersionNumber(2201, 13, 0)) && this.enabledExperimentalFeatures(); // Minimum supported requirements for NP: 2201.13.0 + + this.isWorkspaceSupported = isSupportedSLVersion(this, createVersionNumber(2201, 13, 0)); // Minimum supported requirements for Workspace: 2201.13.0 + const workspaceFolders = workspace.workspaceFolders; + + if (workspaceFolders && workspaceFolders.length === 1) { + const isBalWorkspace = await checkIsBallerinaWorkspace(workspaceFolders[0].uri); + if (isBalWorkspace && !this.isWorkspaceSupported) { + window.showInformationMessage( + 'Your current ballerina distribution is not supported for workspaces. Please update to version 2201.13.0 or above to use workspaces. You will need to reload VS Code after updating.', + 'Update' + ).then(selection => { + if (selection === 'Update') { + commands.executeCommand('ballerina.update-ballerina-visually'); + } + }); + } + } + debug(`[INIT] Feature support calculated - BI: ${this.biSupported}, NP: ${this.isNPSupported}, Workspace: ${this.isWorkspaceSupported}`); } catch (error) { debug(`[INIT] Error calculating feature support: ${error}`); // Don't throw here, we can continue without these features @@ -464,7 +495,7 @@ export class BallerinaExtension { debug(`[INIT] Final Ballerina Home: ${this.ballerinaHome}`); debug(`[INIT] Plugin Dev Mode: ${this.overrideBallerinaHome()}`); debug(`[INIT] Debug Mode: ${this.enableLSDebug()}`); - debug(`[INIT] Feature flags - Experimental: ${this.enabledExperimentalFeatures()}, BI: ${this.biSupported}, NP: ${this.isNPSupported}`); + debug(`[INIT] Feature flags - Experimental: ${this.enabledExperimentalFeatures()}, BI: ${this.biSupported}, NP: ${this.isNPSupported}, Workspace: ${this.isWorkspaceSupported}`); // Check version compatibility try { @@ -2283,7 +2314,7 @@ export class BallerinaExtension { } public enabledLiveReload(): boolean { - return isSupportedSLVersion(this, 2201100) && workspace.getConfiguration().get(ENABLE_LIVE_RELOAD); + return isSupportedSLVersion(this, createVersionNumber(2201, 10, 0)) && workspace.getConfiguration().get(ENABLE_LIVE_RELOAD); } public enabledPerformanceForecasting(): boolean { @@ -2346,13 +2377,11 @@ export class BallerinaExtension { public setPersistStatusContext(textEditor: TextEditor) { if (textEditor?.document) { const fileUri: Uri = textEditor.document.uri; - if (checkIsPersistModelFile(fileUri)) { - this.isPersist = true; - commands.executeCommand('setContext', 'isPersistModelActive', true); - return; - } else { - this.isPersist = false; - } + checkIsPersistModelFile(fileUri).then(isPersistModelFile => { + this.isPersist = isPersistModelFile; + commands.executeCommand('setContext', 'isPersistModelActive', isPersistModelFile); + }); + return; } commands.executeCommand('setContext', 'isPersistModelActive', false); } diff --git a/workspaces/ballerina/ballerina-extension/src/extension.ts b/workspaces/ballerina/ballerina-extension/src/extension.ts index 07b88da3ce0..e2e72faca83 100644 --- a/workspaces/ballerina/ballerina-extension/src/extension.ts +++ b/workspaces/ballerina/ballerina-extension/src/extension.ts @@ -46,6 +46,7 @@ import { activateAIFeatures } from './features/ai/activator'; import { activateTryItCommand } from './features/tryit/activator'; import { activate as activateNPFeatures } from './features/natural-programming/activator'; import { activateAgentChatPanel } from './views/agent-chat/activate'; +import { activateTracing } from './features/tracing'; let langClient: ExtendedLangClient; export let isPluginStartup = true; @@ -114,7 +115,7 @@ export async function activate(context: ExtensionContext) { await StateMachine.initialize(); // Then return the ballerina extension context - return { ballerinaExtInstance: extension.ballerinaExtInstance, projectPath: StateMachine.context().projectUri }; + return { ballerinaExtInstance: extension.ballerinaExtInstance, projectPath: StateMachine.context().projectPath }; } export async function activateBallerina(): Promise { @@ -153,8 +154,9 @@ export async function activateBallerina(): Promise { activateEditorSupport(ballerinaExtInstance); // <------------ MAIN FEATURES -----------> - // Enable Ballerina by examples - activateBBE(ballerinaExtInstance); + // TODO: Enable Ballerina by examples once the samples are available + // https://github.com/wso2/product-ballerina-integrator/issues/1967 + // activateBBE(ballerinaExtInstance); //Enable BI Feature activateBIFeatures(ballerinaExtInstance); @@ -191,6 +193,9 @@ export async function activateBallerina(): Promise { // Activate Agent Chat Panel activateAgentChatPanel(ballerinaExtInstance); + // Activate Tracing Feature + activateTracing(ballerinaExtInstance); + langClient = ballerinaExtInstance.langClient; // Register showTextDocument listener langClient.onNotification('window/showTextDocument', (location: Location) => { diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts index 4c611e559b7..50269512877 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/activator.ts @@ -20,7 +20,7 @@ import { commands, window } from 'vscode'; import { BallerinaExtension, ExtendedLangClient } from '../../core'; import { activateCopilotLoginCommand, resetBIAuth } from './completions'; import { generateCodeCore } from './service/code/code'; -import { GenerateCodeRequest } from '@wso2/ballerina-core'; +import { GenerateCodeRequest, ProcessMappingParametersRequest } from '@wso2/ballerina-core'; import { CopilotEventHandler } from './service/event'; import { addConfigFile, getConfigFilePath } from './utils'; import { StateMachine } from "../../stateMachine"; @@ -28,6 +28,7 @@ import { CONFIGURE_DEFAULT_MODEL_COMMAND, DEFAULT_PROVIDER_ADDED, LOGIN_REQUIRED import { REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE, TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL } from '../..//utils/ai/auth'; import { AIStateMachine } from '../../views/ai-panel/aiMachine'; import { AIMachineEventType } from '@wso2/ballerina-core'; +import { generateMappingCodeCore } from './service/datamapper/datamapper'; export let langClient: ExtendedLangClient; @@ -43,6 +44,10 @@ export function activateAIFeatures(ballerinaExternalInstance: BallerinaExtension await generateCodeCore(params, testEventHandler); }); + commands.registerCommand('ballerina.test.ai.generatemappingCodecore', async (params: ProcessMappingParametersRequest, testEventHandler: CopilotEventHandler) => { + await generateMappingCodeCore(params, testEventHandler); + }); + // Library integration test commands const { getAllLibraries, @@ -81,7 +86,7 @@ export function activateAIFeatures(ballerinaExternalInstance: BallerinaExtension }); } - const projectPath = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; commands.registerCommand(CONFIGURE_DEFAULT_MODEL_COMMAND, async (...args: any[]) => { const configPath = await getConfigFilePath(ballerinaExternalInstance, projectPath); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts index 34ec76a8c78..b6b2d3b27b5 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/constants.ts @@ -26,3 +26,49 @@ export const ERROR_NO_BALLERINA_SOURCES = "No Ballerina sources"; export const LOGIN_REQUIRED_WARNING = "Please sign in to BI Copilot to use this feature."; export const LOGIN_REQUIRED_WARNING_FOR_DEFAULT_MODEL = "Please sign in to BI Copilot to configure the WSO2 default model provider."; export const DEFAULT_PROVIDER_ADDED = "WSO2 default model provider configuration values were added to the Config.toml file."; + +// Datamapper Constants +// Primitive data types supported by the datamapper +export enum PrimitiveType { + STRING = "string", + INT = "int", + FLOAT = "float", + DECIMAL = "decimal", + BOOLEAN = "boolean" +} + +// Nullable primitive data types +export enum NullablePrimitiveType { + STRING = "string?", + INT = "int?", + FLOAT = "float?", + DECIMAL = "decimal?", + BOOLEAN = "boolean?" +} + +// Array types for primitive data types +export enum PrimitiveArrayType { + // Basic array types + STRING_ARRAY = "string[]", + STRING_ARRAY_NULLABLE = "string[]?", + INT_ARRAY = "int[]", + INT_ARRAY_NULLABLE = "int[]?", + FLOAT_ARRAY = "float[]", + FLOAT_ARRAY_NULLABLE = "float[]?", + DECIMAL_ARRAY = "decimal[]", + DECIMAL_ARRAY_NULLABLE = "decimal[]?", + BOOLEAN_ARRAY = "boolean[]", + BOOLEAN_ARRAY_NULLABLE = "boolean[]?", + + // Arrays with nullable elements + STRING_OR_NULL_ARRAY = "string?[]", + STRING_OR_NULL_ARRAY_NULLABLE = "string?[]?", + INT_OR_NULL_ARRAY = "int?[]", + INT_OR_NULL_ARRAY_NULLABLE = "int?[]?", + FLOAT_OR_NULL_ARRAY = "float?[]", + FLOAT_OR_NULL_ARRAY_NULLABLE = "float?[]?", + DECIMAL_OR_NULL_ARRAY = "decimal?[]", + DECIMAL_OR_NULL_ARRAY_NULLABLE = "decimal?[]?", + BOOLEAN_OR_NULL_ARRAY = "boolean?[]", + BOOLEAN_OR_NULL_ARRAY_NULLABLE = "boolean?[]?" +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/dataMapping.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/dataMapping.ts index 86c291ac26d..755b2db02b5 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/dataMapping.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/dataMapping.ts @@ -16,50 +16,168 @@ * under the License. */ -import { createFunctionSignature, DataMappingRecord, GenerateTypesFromRecordRequest, GenerateTypesFromRecordResponse, getSource, ImportInfo } from "@wso2/ballerina-core"; +import { AllDataMapperSourceRequest, Attachment, CodeData, ComponentInfo, createFunctionSignature, CreateTempFileRequest, DataMapperMetadata, DatamapperModelContext, DataMapperModelResponse, DataMappingRecord, DiagnosticList, DMModel, EnumType, ExistingFunctionMatchResult, ExtendedDataMapperMetadata, ExtractMappingDetailsRequest, ExtractMappingDetailsResponse, GenerateTypesFromRecordRequest, GenerateTypesFromRecordResponse, getSource, ImportInfo, ImportStatements, InlineMappingsSourceResult, IORoot, IOTypeField, LinePosition, Mapping, MappingParameters, MetadataWithAttachments, ModuleSummary, PackageSummary, ProjectComponentsResponse, ProjectSource, RecordType, RepairCodeParams, repairCodeRequest, SourceFile, SyntaxTree, TempDirectoryPath } from "@wso2/ballerina-core"; import { camelCase } from "lodash"; import path from "path"; import * as fs from 'fs'; import * as os from 'os'; -import { typesFileParameterDefinitions } from "../../rpc-managers/ai-panel/utils"; +import { Uri } from "vscode"; +import { extractRecordTypeDefinitionsFromFile, generateMappingExpressionsFromModel, repairSourceFilesWithAI } from "../../rpc-managers/ai-panel/utils"; import { writeBallerinaFileDidOpenTemp } from "../../utils/modification"; -import { PrimitiveType } from "../../../src/rpc-managers/ai-panel/constants"; +import { ExtendedLangClient, NOT_SUPPORTED } from "../../core"; +import { DefaultableParam, FunctionDefinition, IncludedRecordParam, ModulePart, RequiredParam, RestParam, STKindChecker, STNode } from "@wso2/syntax-tree"; +import { addMissingRequiredFields, attemptRepairProject, checkProjectDiagnostics } from "../../../src/rpc-managers/ai-panel/repair-utils"; +import { NullablePrimitiveType, PrimitiveArrayType, PrimitiveType } from "./constants"; +import { INVALID_RECORD_REFERENCE } from "../../../src/views/ai-panel/errorCodes"; +import { CodeRepairResult, PackageInfo, TypesGenerationResult } from "./service/datamapper/types"; +import { URI } from "vscode-uri"; +import { getAllDataMapperSource } from "./service/datamapper/datamapper"; +import { StateMachine } from "../../stateMachine"; +import { CopilotEventHandler } from "./service/event"; -// Generate Ballerina types from a record request -export async function generateTypeCreation( - request: GenerateTypesFromRecordRequest -): Promise { - const file = request.attachment && request.attachment.length > 0 - ? request.attachment[0] - : undefined; +// Set to false to include mappings with default values +const OMIT_DEFAULT_MAPPINGS_ENABLED = true; + +// ================================================================================================ +// Utility Functions - Type checking and validation helpers +// ================================================================================================ + +const isPrimitiveType = (type: string): boolean => { + return Object.values(PrimitiveType).includes(type as PrimitiveType); +}; + +const isNullablePrimitiveType = (type: string): boolean => { + return Object.values(NullablePrimitiveType).includes(type as NullablePrimitiveType); +}; + +const isPrimitiveArrayType = (type: string): boolean => { + if (Object.values(PrimitiveArrayType).includes(type as PrimitiveArrayType)) { + return true; + } + + const unionArrayPattern = /^\(([^)]+)\)\[\](\?)?$/; + const match = type.match(unionArrayPattern); + + if (match) { + const unionTypes = match[1].split('|').map(t => t.trim()); + return unionTypes.every(unionType => + isPrimitiveType(unionType) || isNullablePrimitiveType(unionType) + ); + } + return false; +}; + +const isAnyPrimitiveType = (type: string): boolean => { + return isPrimitiveType(type) || isNullablePrimitiveType(type) || isPrimitiveArrayType(type); +}; + +// ================================================================================================ +// Common Data Mapper Functions - Shared utilities for all mapping processes +// ================================================================================================ + +export async function createTempDataMappingFile(params: CreateTempFileRequest): Promise { + let funcSource: string; - const updatedSource = await typesFileParameterDefinitions(file); - if (typeof updatedSource !== 'string') { - throw new Error(`Failed to generate types: ${JSON.stringify(updatedSource)}`); + if (!params.hasMatchingFunction) { + if (params.inputs && params.output && params.functionName && params.inputNames) { + funcSource = createDataMappingFunctionSource( + params.inputs, + params.output, + params.functionName, + params.inputNames + ); } + } + + const tempFilePath = await createTempBallerinaFile( + params.tempDir, + params.filePath, + funcSource, + params.imports, + params.hasMatchingFunction + ); - return Promise.resolve({ typesCode: updatedSource }); + return tempFilePath; } -// Create a temporary Ballerina file with a generated data mapping function -export async function createTempDataMappingFile( - projectRoot: string, - inputs: DataMappingRecord[], - output: DataMappingRecord, - functionName: string, - inputNames: string[], - imports: ImportInfo[] +export async function createCustomFunctionsFile( + tempDir: string, + customFunctions: Mapping[] ): Promise { - const funcSource = createDataMappingFunctionSource(inputs, output, functionName, inputNames); - const tempFilePath = await createTempBallerinaFile(projectRoot, funcSource, imports); - return tempFilePath; + let functionsSource = customFunctions + .map(f => f.functionContent) + .filter(Boolean) + .join('\n\n'); + + const customFunctionsFilePath = path.join(tempDir, "functions.bal"); + let existingContent = ""; + if (fs.existsSync(customFunctionsFilePath)) { + existingContent = fs.readFileSync(customFunctionsFilePath, 'utf8'); + } + + functionsSource = existingContent + "\n\n" + functionsSource; + + writeBallerinaFileDidOpenTemp(customFunctionsFilePath, functionsSource); + return customFunctionsFilePath; +} + +// Helper function to recursively find all .bal files in a directory +function findBalFilesInDirectory(dir: string): string[] { + let balFiles: string[] = []; + + try { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + + // Skip node_modules, target, and hidden directories + if (entry.isDirectory() && !entry.name.startsWith('.') && + entry.name !== 'node_modules' && entry.name !== 'target') { + balFiles = balFiles.concat(findBalFilesInDirectory(fullPath)); + } else if (entry.isFile() && entry.name.endsWith('.bal')) { + balFiles.push(fullPath); + } + } + } catch (error) { + // If directory cannot be read, return empty array + console.error(`Error reading directory ${dir}:`, error); + } + + return balFiles; +} + +export async function getFunctionDefinitionFromSyntaxTree( + langClient: ExtendedLangClient, + filePath: string, + functionName: string +): Promise { + const st = (await langClient.getSyntaxTree({ + documentIdentifier: { + uri: Uri.file(filePath).toString(), + }, + })) as SyntaxTree; + + const modulePart = st.syntaxTree as ModulePart; + + for (const member of modulePart.members) { + if (STKindChecker.isFunctionDefinition(member)) { + const funcDef = member as FunctionDefinition; + if (funcDef.functionName?.value === functionName) { + return funcDef; + } + } + } + + return null; } -// Create a temporary Ballerina file with optional imports async function createTempBallerinaFile( - projectRoot: string, - funcSource: string, - imports?: ImportInfo[] + tempDir: string, + filePath: string, + funcSource?: string, + imports?: ImportInfo[], + functionExists?: boolean ): Promise { let fullSource = funcSource; @@ -72,17 +190,62 @@ async function createTempBallerinaFile( fullSource = `${importsString}\n\n${funcSource}`; } + const tempTestFilePath = path.join(tempDir, filePath); + + let existingContent = ""; + if (fs.existsSync(tempTestFilePath)) { + existingContent = fs.readFileSync(tempTestFilePath, 'utf8'); + } + + if (!functionExists) { + if (!funcSource) { + fullSource = existingContent; + } else { + fullSource = existingContent + "\n\n" + fullSource; + } + } else { + fullSource = existingContent; + } + writeBallerinaFileDidOpenTemp(tempTestFilePath, fullSource); + return tempTestFilePath; +} + +export async function createTempBallerinaDir(): Promise { + const projectRoot = StateMachine.context().projectPath; + const randomNum = Math.floor(Math.random() * 90000) + 10000; const tempDir = fs.mkdtempSync( - path.join(os.tmpdir(), "ballerina-data-mapping-temp-") + path.join(os.tmpdir(), `ballerina-data-mapping-${randomNum}-`) ); fs.cpSync(projectRoot, tempDir, { recursive: true }); - const tempTestFilePath = path.join(tempDir, "temp.bal"); - writeBallerinaFileDidOpenTemp(tempTestFilePath, fullSource); + return tempDir; +} - return tempTestFilePath; +export async function repairCodeWithLLM(codeRepairRequest: repairCodeRequest): Promise { + if (!codeRepairRequest) { + throw new Error("Code repair request is required"); + } + + if (!codeRepairRequest.sourceFiles || codeRepairRequest.sourceFiles.length === 0) { + throw new Error("Source files are required for code repair"); + } + + const repairedSourceFiles = await repairSourceFilesWithAI(codeRepairRequest); + + for (const repairedFile of repairedSourceFiles) { + try { + writeBallerinaFileDidOpenTemp( + repairedFile.filePath, + repairedFile.content + ); + } catch (error) { + console.error(`Error processing file ${repairedFile.filePath}:`, error); + } + } + + const projectSourceResponse = { sourceFiles: repairedSourceFiles, projectName: "", packagePath: "", isActive: true }; + return projectSourceResponse; } -// Generate the Ballerina source for a data mapping function export function createDataMappingFunctionSource( inputParams: DataMappingRecord[], outputParam: DataMappingRecord, @@ -106,7 +269,6 @@ export function createDataMappingFunctionSource( return getSource(modification); } -// Generate parameters string for function signature function buildParametersString( inputParams: DataMappingRecord[], inputNames: string[] @@ -120,7 +282,6 @@ function buildParametersString( .join(", "); } -// Generate a default parameter name for primitives and custom types function getDefaultParamName(type: string, isArray: boolean): string { const processedType = processType(type); @@ -140,7 +301,6 @@ function getDefaultParamName(type: string, isArray: boolean): string { } } -// Extract the actual type name from a fully qualified type function processType(type: string): string { let typeName = type.includes("/") ? type.split("/").pop()! : type; @@ -152,7 +312,6 @@ function processType(type: string): string { return typeName; } -// Format a single function parameter function formatParameter( item: DataMappingRecord, paramName: string @@ -160,9 +319,1288 @@ function formatParameter( return `${processType(item.type)}${item.isArray ? "[]" : ""} ${paramName}`; } -// Generate return type string function buildReturnTypeString(outputParam: DataMappingRecord): string { - return `returns ${processType(outputParam.type)}${ - outputParam.isArray ? "[]" : "" - }`; + return `returns ${processType(outputParam.type)}${outputParam.isArray ? "[]" : "" + }`; +} + +export async function generateDataMapperModel( + params: DatamapperModelContext, + langClient: ExtendedLangClient, + context: any +): Promise { + let filePath: string; + let identifier: string; + let dataMapperMetadata: DataMapperMetadata; + + if (params && params.documentUri && params.identifier) { + filePath = params.documentUri; + identifier = params.identifier; + dataMapperMetadata = params.dataMapperMetadata; + } else { + filePath = context.documentUri; + identifier = context.identifier || context.dataMapperMetadata.name; + dataMapperMetadata = context.dataMapperMetadata; + } + + let position: LinePosition = { + line: dataMapperMetadata.codeData.lineRange.startLine.line, + offset: dataMapperMetadata.codeData.lineRange.startLine.offset + }; + + if (!dataMapperMetadata.codeData.hasOwnProperty('node') || + dataMapperMetadata.codeData.node !== "VARIABLE") { + const fileUri = Uri.file(filePath).toString(); + const fnSTByRange = await langClient.getSTByRange({ + lineRange: { + start: { + line: dataMapperMetadata.codeData.lineRange.startLine.line, + character: dataMapperMetadata.codeData.lineRange.startLine.offset + }, + end: { + line: dataMapperMetadata.codeData.lineRange.endLine.line, + character: dataMapperMetadata.codeData.lineRange.endLine.offset + } + }, + documentIdentifier: { uri: fileUri } + }); + + if (fnSTByRange === NOT_SUPPORTED) { + throw new Error("Syntax tree retrieval not supported"); + } + + const fnSt = (fnSTByRange as SyntaxTree).syntaxTree as STNode; + + if (STKindChecker.isFunctionDefinition(fnSt) && + STKindChecker.isExpressionFunctionBody(fnSt.functionBody)) { + position = { + line: fnSt.functionBody.expression.position.startLine, + offset: fnSt.functionBody.expression.position.startColumn + }; + } + } + + let dataMapperModel = await langClient + .getDataMapperMappings({ + filePath, + codedata: dataMapperMetadata.codeData, + targetField: identifier, + position: position + }) as DataMapperModelResponse; + + if (!dataMapperModel) { + console.error('DataMapperModel is undefined', dataMapperModel); + throw new Error('Failed to retrieve DataMapperModel from language client'); + } + + let mappingsModel = ensureUnionRefs(dataMapperModel.mappingsModel as DMModel); + mappingsModel = normalizeRefs(mappingsModel); + mappingsModel = omitDefaultMappings(mappingsModel, OMIT_DEFAULT_MAPPINGS_ENABLED); + + if (mappingsModel.subMappings && mappingsModel.subMappings.length > 0) { + mappingsModel.subMappings = await processSubMappings( + mappingsModel.subMappings as IORoot[], + filePath, + dataMapperMetadata.codeData, + langClient, + position + ); + } + + return { mappingsModel }; +} + +export async function createTempFileAndGenerateMetadata(params: CreateTempFileRequest, langClient: ExtendedLangClient, context: any): Promise { + let filePath = await createTempDataMappingFile(params); + + if (!params.metadata || Object.keys(params.metadata).length === 0) { + const funcDefinitionNode = await getFunctionDefinitionFromSyntaxTree( + langClient, + filePath, + params.functionName + ); + + const dataMapperMetadata = { + name: params.functionName, + codeData: { + lineRange: { + fileName: filePath, + startLine: { + line: funcDefinitionNode.position.startLine, + offset: funcDefinitionNode.position.startColumn, + }, + endLine: { + line: funcDefinitionNode.position.endLine, + offset: funcDefinitionNode.position.endColumn, + }, + }, + } + }; + + const dataMapperModel = await generateDataMapperModel( + { + documentUri: filePath, + identifier: params.functionName, + dataMapperMetadata: dataMapperMetadata + }, + langClient, + context + ); + + return { + mappingsModel: dataMapperModel.mappingsModel as DMModel, + name: params.functionName, + codeData: dataMapperMetadata.codeData + }; + } + + const updatedMetadata = { + ...params.metadata, + codeData: { + ...params.metadata.codeData, + lineRange: { + ...params.metadata.codeData.lineRange, + fileName: filePath + } + } + }; + + return { + mappingsModel: updatedMetadata.mappingsModel, + name: params.functionName || updatedMetadata.name, + codeData: updatedMetadata.codeData + }; +} + +export async function generateMappings( + metadataWithAttachments: MetadataWithAttachments, + context: any, + eventHandler: CopilotEventHandler +): Promise { + const targetFilePath = metadataWithAttachments.metadata.codeData.lineRange.fileName || context.documentUri; + + const generatedMappings = await generateMappingExpressionsFromModel( + metadataWithAttachments.metadata.mappingsModel as DMModel, + metadataWithAttachments.attachments || [], + eventHandler + ); + + const customFunctionMappings = generatedMappings.filter(mapping => mapping.isFunctionCall); + let customFunctionsFilePath: string | undefined; + + if (customFunctionMappings.length > 0) { + let tempDirectory = path.dirname(metadataWithAttachments.metadata.codeData.lineRange.fileName); + customFunctionsFilePath = await createCustomFunctionsFile( + tempDirectory, + customFunctionMappings + ); + } + + const allMappingsRequest: AllDataMapperSourceRequest = { + filePath: targetFilePath, + codedata: metadataWithAttachments.metadata.codeData, + varName: metadataWithAttachments.metadata.name, + position: { + line: metadataWithAttachments.metadata.codeData.lineRange.startLine.line, + offset: metadataWithAttachments.metadata.codeData.lineRange.startLine.offset + }, + mappings: generatedMappings, + customFunctionsFilePath + }; + + return allMappingsRequest; +} + +// ================================================================================================ +// DMModel Optimization - Functions for processing and optimizing data mapper models +// ================================================================================================ +function ensureUnionRefs(model: DMModel): DMModel { + const processedModel = JSON.parse(JSON.stringify(model)); + const unionRefs = new Map(); + + interface FieldVisitor { + visitUnion(field: IOTypeField): void; + visitRecord(field: IOTypeField): void; + visitArray(field: IOTypeField): void; + visitField(field: IOTypeField): void; + } + + class UnionRefCollector implements FieldVisitor { + visitUnion(field: IOTypeField): void { + if (field.ref) { + const refId = field.ref; + + if (!processedModel.refs[refId] && !unionRefs.has(refId)) { + unionRefs.set(refId, { + members: field.members || [], + typeName: field.typeName, + kind: 'union' + }); + } + + field.members = []; + } + } + + visitRecord(field: IOTypeField): void { + if (field.fields) { + this.visitFields(field.fields); + } + } + + visitArray(field: IOTypeField): void { + if (field.member) { + this.visitField(field.member); + } + } + + visitField(field: IOTypeField): void { + if (!field) { return; } + + switch (field.kind) { + case 'union': + this.visitUnion(field); + break; + case 'record': + this.visitRecord(field); + break; + case 'array': + this.visitArray(field); + break; + } + + if (field.members && Array.isArray(field.members)) { + field.members.forEach(member => this.visitField(member)); + } + + if (field.member && field.kind !== 'array') { + this.visitField(field.member); + } + } + + visitFields(fields: IOTypeField[]): void { + if (!fields || !Array.isArray(fields)) { return; } + + for (const field of fields) { + this.visitField(field); + } + } + } + + class UnionMemberClearer implements FieldVisitor { + visitUnion(field: IOTypeField): void { + if (field.ref && field.members) { + field.members = []; + } + } + + visitRecord(field: IOTypeField): void { + if (field.fields) { + this.visitFields(field.fields); + } + } + + visitArray(field: IOTypeField): void { + if (field.member) { + this.visitField(field.member); + } + } + + visitField(field: IOTypeField): void { + if (!field || typeof field !== 'object') { return; } + + if (Array.isArray(field)) { + field.forEach(item => this.visitField(item)); + return; + } + + switch (field.kind) { + case 'union': + this.visitUnion(field); + break; + case 'record': + this.visitRecord(field); + break; + case 'array': + this.visitArray(field); + break; + } + + for (const key of Object.keys(field)) { + if (typeof field[key] === 'object') { + this.visitField(field[key]); + } + } + } + + visitFields(fields: IOTypeField[]): void { + if (!fields || !Array.isArray(fields)) { return; } + + for (const field of fields) { + this.visitField(field); + } + } + } + + const collector = new UnionRefCollector(); + + if (processedModel.inputs) { + collector.visitFields(processedModel.inputs); + } + + if (processedModel.output) { + if (processedModel.output.fields) { + collector.visitFields(processedModel.output.fields); + } else { + collector.visitField(processedModel.output); + } + } + + if (processedModel.subMappings) { + collector.visitFields(processedModel.subMappings); + } + + if (processedModel.refs) { + for (const refKey of Object.keys(processedModel.refs)) { + const refObj = processedModel.refs[refKey]; + if (refObj.fields) { + collector.visitFields(refObj.fields); + } else if (refObj.members) { + refObj.members.forEach((member: IOTypeField) => collector.visitField(member)); + } + } + } + + unionRefs.forEach((unionRef, refId) => { + if (!processedModel.refs[refId]) { + processedModel.refs[refId] = unionRef; + } + }); + + const clearer = new UnionMemberClearer(); + + clearer.visitField(processedModel.inputs); + clearer.visitField(processedModel.output); + if (processedModel.subMappings) { + clearer.visitField(processedModel.subMappings); + } + + if (processedModel.refs) { + for (const refKey of Object.keys(processedModel.refs)) { + const refObj = processedModel.refs[refKey]; + if (refObj.kind === 'record' && refObj.fields) { + clearer.visitField(refObj.fields); + } + } + } + + return processedModel; +} + +export function normalizeRefs(model: DMModel): DMModel { + const processedModel: DMModel = JSON.parse(JSON.stringify(model)); + + function removeRef(field: IOTypeField) { + if (!field || typeof field !== 'object') { return; } + + delete field.ref; + + if (field.member) { removeRef(field.member); } + if (Array.isArray(field.members)) { field.members.forEach(removeRef); } + if ((field as IOTypeField).fields && Array.isArray((field as IOTypeField).fields)) { + (field as IOTypeField).fields.forEach(removeRef); + } + } + + if (processedModel.inputs) { processedModel.inputs.forEach(removeRef); } + + if (processedModel.output) { removeRef(processedModel.output); } + + if (processedModel.subMappings) { + processedModel.subMappings.forEach((sub) => removeRef(sub as IOTypeField)); + } + + const newRefs: Record = {}; + if (processedModel.refs) { + for (const refObj of Object.values(processedModel.refs)) { + const typeName = (refObj as RecordType).typeName; + if (typeName) { + if ((refObj as RecordType).fields) { + (refObj as RecordType).fields.forEach(removeRef); + } + newRefs[typeName] = refObj as RecordType | EnumType; + } + } + } + + processedModel.refs = newRefs; + + return processedModel; +} + +export function omitDefaultMappings(model: DMModel, enabled: boolean = true): DMModel { + if (!enabled || !model.mappings || !Array.isArray(model.mappings)) { + return model; + } + + const processedModel: DMModel = JSON.parse(JSON.stringify(model)); + + processedModel.mappings = processedModel.mappings.filter((mapping: Mapping) => { + if (!mapping.inputs || !Array.isArray(mapping.inputs)) { + return true; + } + return mapping.inputs.length > 0; + }); + + return processedModel; +} + +async function processSubMappings( + subMappings: IORoot[], + filePath: string, + codeData: CodeData, + langClient: ExtendedLangClient, + position?: LinePosition +): Promise { + const allSubMappings: Mapping[] = []; + + for (const subMapping of subMappings) { + const subMappingCodeData = await langClient.getSubMappingCodedata({ + filePath, + codedata: codeData, + view: (subMapping as IORoot).name + }); + + const subMappingModel = await langClient.getDataMapperMappings({ + filePath, + codedata: subMappingCodeData.codedata, + targetField: (subMapping as IORoot).name, + position: position + }) as DataMapperModelResponse; + + if (subMappingModel.mappingsModel && + 'mappings' in subMappingModel.mappingsModel && + subMappingModel.mappingsModel.mappings) { + allSubMappings.push(...subMappingModel.mappingsModel.mappings); + } + } + + return allSubMappings; +} + +// ================================================================================================ +// Mapping Details Extraction - Functions for extracting and validating mapping parameters +// ================================================================================================ + +export async function extractMappingDetails( + params: ExtractMappingDetailsRequest, + langClient: ExtendedLangClient +): Promise { + const { parameters, recordMap, allImports, existingFunctions } = params; + const importsMap: Record = {}; + let inputParams: string[]; + let outputParam: string; + let inputNames: string[] = []; + + const existingFunctionMatch = await processExistingFunctions( + existingFunctions, + parameters.functionName, + langClient + ); + + const hasProvidedRecords = parameters.inputRecord.length > 0 || parameters.outputRecord !== ""; + + if (hasProvidedRecords) { + if (existingFunctionMatch.match) { + throw new Error( + `"${parameters.functionName}" function already exists. Please provide a valid function name.` + ); + } + inputParams = parameters.inputRecord; + outputParam = parameters.outputRecord; + } else { + if (!existingFunctionMatch.match || !existingFunctionMatch.functionDefNode) { + throw new Error( + `"${parameters.functionName}" function was not found. Please provide a valid function name.` + ); + } + + const funcNode = existingFunctionMatch.functionDefNode; + const params = funcNode.functionSignature.parameters?.filter( + (param): param is RequiredParam | DefaultableParam | RestParam | IncludedRecordParam => + param.kind !== 'CommaToken' + ) ?? []; + + inputParams = params.map(param => (param.typeName.source || "").trim()); + inputNames = params.map(param => (param.paramName.value || "").trim()); + outputParam = (funcNode.functionSignature.returnTypeDesc.type.source || "").trim(); + } + + const inputs = processInputs(inputParams, recordMap, allImports, importsMap); + const output = processOutput(outputParam, recordMap, allImports, importsMap); + + return { + inputs, + output, + inputParams, + outputParam, + imports: Object.values(importsMap), + inputNames, + existingFunctionMatch, + }; +} + +// Processes existing functions to find a matching function by name +export async function processExistingFunctions( + existingFunctions: ComponentInfo[], + functionName: string, + langClient: ExtendedLangClient +): Promise { + for (const func of existingFunctions) { + const filePath = func.filePath; + const fileName = filePath.split("/").pop(); + + const funcDefNode = await getFunctionDefinitionFromSyntaxTree(langClient, filePath, functionName); + if (funcDefNode) { + return { + match: true, + matchingFunctionFile: fileName, + functionDefNode: funcDefNode, + }; + } else { + continue; + } + } + + return { + match: false, + matchingFunctionFile: null, + functionDefNode: null, + }; +} + +// Process input parameters +export function processInputs( + inputParams: string[], + recordMap: Record, + allImports: ImportInfo[], + importsMap: Record +) { + let results = inputParams.map((param: string) => + processRecordReference(param, recordMap, allImports, importsMap) + ); + return results.filter((result): result is DataMappingRecord => { + if (result instanceof Error) { + throw INVALID_RECORD_REFERENCE; + } + return true; + }); +} + +// Process Output parameters +export function processOutput( + outputParam: string, + recordMap: Record, + allImports: ImportInfo[], + importsMap: Record +) { + const outputResult = processRecordReference(outputParam, recordMap, allImports, importsMap); + if (outputResult instanceof Error) { + throw INVALID_RECORD_REFERENCE; + } + return outputResult; +} + +// Validate and register an imported type in the imports map +function registerImportedType( + typeName: string, + allImports: ImportInfo[], + importsMap: Record +): void { + if (!typeName.includes("/")) { + const [moduleName, recName] = typeName.split(":"); + const matchedImport = allImports.find((imp) => { + if (imp.alias) { + return typeName.startsWith(imp.alias); + } + const moduleNameParts = imp.moduleName.split(/[./]/); + const inferredAlias = moduleNameParts[moduleNameParts.length - 1]; + return typeName.startsWith(inferredAlias); + }); + + if (!matchedImport) { + throw new Error(`Import not found for: ${typeName}`); + } + importsMap[typeName] = { + moduleName: matchedImport.moduleName, + alias: matchedImport.alias, + recordName: recName, + }; + } else { + const [moduleName, recName] = typeName.split(":"); + importsMap[typeName] = { + moduleName: moduleName, + recordName: recName, + }; + } +} + +// Validate that a type exists as either a primitive, local record, or imported type +function validateTypeExists( + typeName: string, + recordMap: Record, + allImports: ImportInfo[], + importsMap: Record +): void { + if (isAnyPrimitiveType(typeName)) { + return; + } + + const cleanedType = typeName.replace(/\[\]$/, ""); + if (recordMap[cleanedType]) { + return; + } + + if (cleanedType.includes(":")) { + registerImportedType(cleanedType, allImports, importsMap); + return; + } + + throw new Error(`${cleanedType} is not defined.`); +} + +// Process and validate a union type, returning its data mapping record +function processUnionType( + unionTypeString: string, + recordMap: Record, + allImports: ImportInfo[], + importsMap: Record +): DataMappingRecord { + const unionTypes = unionTypeString.split("|").map(t => t.trim()); + + for (const unionType of unionTypes) { + validateTypeExists(unionType, recordMap, allImports, importsMap); + } + + return { type: unionTypeString, isArray: false, filePath: null }; +} + +// Process and validate a single type reference, returning its data mapping record +function processSingleType( + typeName: string, + recordMap: Record, + allImports: ImportInfo[], + importsMap: Record +): DataMappingRecord { + if (isAnyPrimitiveType(typeName)) { + return { type: typeName, isArray: false, filePath: null }; + } + + const isArray = typeName.endsWith("[]") && !isPrimitiveArrayType(typeName); + const cleanedRecordName = isArray ? typeName.replace(/\[\]$/, "") : typeName; + + const rec = recordMap[cleanedRecordName]; + + if (rec) { + return { ...rec, isArray }; + } + + if (cleanedRecordName.includes(":")) { + registerImportedType(cleanedRecordName, allImports, importsMap); + return { type: typeName, isArray, filePath: null }; + } + + throw new Error(`${cleanedRecordName} is not defined.`); +} + +// Process a record type reference and validate it exists, handling both union and single types +export function processRecordReference( + recordName: string, + recordMap: Record, + allImports: ImportInfo[], + importsMap: Record +): DataMappingRecord { + const trimmedRecordName = recordName.trim(); + + if (trimmedRecordName.includes("|")) { + return processUnionType(trimmedRecordName, recordMap, allImports, importsMap); + } + + return processSingleType(trimmedRecordName, recordMap, allImports, importsMap); +} + +// ================================================================================================ +// Code Repair, Diagnostics, and Mapping Generation +// ================================================================================================ + +export async function repairAndCheckDiagnostics( + langClient: ExtendedLangClient, + projectRoot: string, + params: TempDirectoryPath +): Promise { + const targetDir = params.tempDir && params.tempDir.trim() !== "" ? params.tempDir : projectRoot; + + let diagnostics = await attemptRepairProject(langClient, targetDir); + + // Add missing required fields and recheck diagnostics + let isDiagsChanged = await addMissingRequiredFields(diagnostics, langClient); + if (isDiagsChanged) { + diagnostics = await checkProjectDiagnostics(langClient, targetDir); + } + + const filteredDiagnostics = diagnostics.filter(diag => + params.filePaths.some(filePath => diag.uri.includes(filePath)) + ); + + return { diagnosticsList: filteredDiagnostics }; +} + +// ================================================================================================ +// processInlineMappings - Functions for processing inline mapping parameters +// ================================================================================================ + +export async function generateInlineMappingsSource( + inlineMappingRequest: MetadataWithAttachments, + langClient: ExtendedLangClient, + context: any, + eventHandler: CopilotEventHandler +): Promise { + if (!inlineMappingRequest) { + throw new Error("Inline mapping request is required"); + } + + if (!inlineMappingRequest.metadata) { + throw new Error("Metadata is required for inline mapping generation"); + } + + if (!inlineMappingRequest.metadata.codeData) { + throw new Error("Code data is required for inline mapping generation"); + } + + if (!langClient) { + throw new Error("Language client is required for inline mapping generation"); + } + + const targetFileName = inlineMappingRequest.metadata.codeData.lineRange.fileName; + + if (!targetFileName) { + throw new Error("Target file name could not be determined from code data"); + } + + const tempDirectory = await createTempBallerinaDir(); + const tempFileMetadata = await createTempFileAndGenerateMetadata( + { + tempDir: tempDirectory, + filePath: targetFileName, + metadata: inlineMappingRequest.metadata + }, + langClient, + context + ); + + // Prepare mapping request payload + const mappingRequestPayload: MetadataWithAttachments = { + metadata: tempFileMetadata, + attachments: [] + }; + if (inlineMappingRequest.attachments.length > 0) { + mappingRequestPayload.attachments = inlineMappingRequest.attachments; + } + + // Generate mappings and source code + const allMappingsRequest = await generateMappings( + mappingRequestPayload, + context, + eventHandler + ); + + const generatedSourceResponse = await getAllDataMapperSource(allMappingsRequest); + + return { + sourceResponse: generatedSourceResponse, + allMappingsRequest, + tempFileMetadata, + tempDir: tempDirectory + }; +} + +// ================================================================================================ +// processContextTypeCreation - Functions for processing context type creation +// ================================================================================================ + +// Extract record and enum types from syntax tree +export async function extractRecordTypesFromSyntaxTree( + langClient: ExtendedLangClient, + filePath: string +): Promise<{ records: string[]; enums: string[] }> { + const st = (await langClient.getSyntaxTree({ + documentIdentifier: { + uri: Uri.file(filePath).toString(), + }, + })) as SyntaxTree; + + if (!st.syntaxTree) { + throw new Error("Failed to retrieve syntax tree for file: " + filePath); + } + + const modulePart = st.syntaxTree as ModulePart; + const records: string[] = []; + const enums: string[] = []; + + for (const member of modulePart.members) { + if (STKindChecker.isTypeDefinition(member)) { + const typeName = member.typeName?.value; + if (typeName) { + records.push(typeName); + } + } else if (STKindChecker.isEnumDeclaration(member)) { + const enumName = member.identifier?.value; + if (enumName) { + enums.push(enumName); + } + } + } + + return { records, enums }; +} + +// Generate Ballerina record types from context attachments and validate against existing records +export async function generateTypesFromContext( + sourceAttachments: Attachment[], + projectComponents: ProjectComponentsResponse, + langClient: ExtendedLangClient +): Promise { + if (!sourceAttachments || sourceAttachments.length === 0) { + throw new Error("Source attachments are required for type generation"); + } + + if (!projectComponents) { + throw new Error("Project components are required for type generation"); + } + + const outputFileName = "types.bal"; + const existingRecordTypesMap = new Map(); + + projectComponents.components.packages?.forEach((packageSummary: PackageSummary) => { + packageSummary.modules?.forEach((moduleSummary: ModuleSummary) => { + let baseFilePath = packageSummary.filePath; + if (moduleSummary.name !== undefined) { + baseFilePath += `modules/${moduleSummary.name}/`; + } + moduleSummary.records.forEach((recordComponent: ComponentInfo) => { + const recordFilePath = baseFilePath + recordComponent.filePath; + existingRecordTypesMap.set(recordComponent.name, { type: recordComponent.name, isArray: false, filePath: recordFilePath }); + }); + moduleSummary.types.forEach((typeComponent: ComponentInfo) => { + const typeFilePath = baseFilePath + typeComponent.filePath; + existingRecordTypesMap.set(typeComponent.name, { type: typeComponent.name, isArray: false, filePath: typeFilePath }); + }); + moduleSummary.enums.forEach((enumComponent: ComponentInfo) => { + const enumFilePath = baseFilePath + enumComponent.filePath; + existingRecordTypesMap.set(enumComponent.name, { type: enumComponent.name, isArray: false, filePath: enumFilePath }); + }); + }); + }); + + // Generate type definitions from all attachments together + const typeGenerationRequest: GenerateTypesFromRecordRequest = { + attachment: sourceAttachments + }; + + const typeGenerationResponse = await generateTypeCreation(typeGenerationRequest); + const generatedTypesCode = typeGenerationResponse.typesCode; + + // Create temp directory and file to validate generated types + const tempDirectory = await createTempBallerinaDir(); + const tempTypesFilePath = path.join(tempDirectory, outputFileName); + + writeBallerinaFileDidOpenTemp(tempTypesFilePath, generatedTypesCode); + + // Extract record and enum names from syntax tree + const { records: generatedRecords, enums: generatedEnums } = await extractRecordTypesFromSyntaxTree(langClient, tempTypesFilePath); + + // Check for duplicate record names + for (const recordName of generatedRecords) { + if (existingRecordTypesMap.has(recordName)) { + throw new Error(`Record "${recordName}" already exists in the workspace`); + } + } + + // Check for duplicate enum names + for (const enumName of generatedEnums) { + if (existingRecordTypesMap.has(enumName)) { + throw new Error(`Enum "${enumName}" already exists in the workspace`); + } + } + + return { + typesCode: generatedTypesCode, + filePath: outputFileName, + recordMap: existingRecordTypesMap + }; +} + +// Generate Ballerina record type definitions from attachment files +export async function generateTypeCreation( + typeGenerationRequest: GenerateTypesFromRecordRequest +): Promise { + if (typeGenerationRequest.attachment.length === 0) { + throw new Error('No attachments provided for type generation'); + } + + // Process all attachments together to understand correlations + const generatedTypeDefinitions = await extractRecordTypeDefinitionsFromFile(typeGenerationRequest.attachment); + if (typeof generatedTypeDefinitions !== 'string') { + throw new Error(`Failed to generate types: ${JSON.stringify(generatedTypeDefinitions)}`); + } + + return { typesCode: generatedTypeDefinitions }; +} + +export function extractImports(content: string, filePath: string): ImportStatements { + const withoutSingleLineComments = content.replace(/\/\/.*$/gm, ""); + const withoutComments = withoutSingleLineComments.replace(/\/\*[\s\S]*?\*\//g, ""); + + const importRegex = /import\s+([\w\.\/]+)(?:\s+as\s+([\w]+))?;/g; + const imports: ImportInfo[] = []; + let match; + + while ((match = importRegex.exec(withoutComments)) !== null) { + const importStatement: ImportInfo = { moduleName: match[1] }; + if (match[2]) { + importStatement.alias = match[2]; + } + imports.push(importStatement); + } + + return { filePath, statements: imports }; +} + +// ================================================================================================ +// Code Repair and Content Update - Functions for repairing code and getting updated content +// ================================================================================================ + +// Collect file paths for diagnostics checking +function collectDiagnosticFilePaths( + tempFileMetadata: ExtendedDataMapperMetadata, + customFunctionsFilePath?: string +): string[] { + const filePaths = [tempFileMetadata.codeData.lineRange.fileName]; + if (customFunctionsFilePath) { + filePaths.push(customFunctionsFilePath); + } + return filePaths; +} + +// Prepare source files for LLM repair +function prepareSourceFilesForRepair( + mainFilePath: string, + mainContent: string, + customFunctionsFilePath: string | undefined, + customFunctionsContent: string +): SourceFile[] { + const sourceFiles: SourceFile[] = [ + { + filePath: mainFilePath, + content: mainContent, + } + ]; + + if (customFunctionsFilePath) { + sourceFiles.push({ + filePath: customFunctionsFilePath, + content: customFunctionsContent, + }); + } + + return sourceFiles; +} + +// Repair code and get updated content +export async function repairCodeAndGetUpdatedContent( + params: RepairCodeParams, + langClient: ExtendedLangClient, + projectRoot: string +): Promise { + + // Read main file content + let finalContent = fs.readFileSync(params.tempFileMetadata.codeData.lineRange.fileName, 'utf8'); + + // Read custom functions content (only if path is provided) + let customFunctionsContent = params.customFunctionsFilePath + ? await getCustomFunctionsContent(params.customFunctionsFilePath) + : ''; + + // Check and repair diagnostics + const diagnostics = await checkAndRepairDiagnostics( + params, + langClient, + projectRoot + ); + + // Repair with LLM if needed + if (diagnostics.diagnosticsList && diagnostics.diagnosticsList.length > 0) { + const result = await repairWithLLM( + params.tempFileMetadata, + finalContent, + params.customFunctionsFilePath, + customFunctionsContent, + diagnostics, + params.imports + ); + finalContent = result.finalContent; + customFunctionsContent = result.customFunctionsContent; + } + + return { finalContent, customFunctionsContent }; +} + +// Get custom functions content if file exists +export async function getCustomFunctionsContent( + customFunctionsFilePath: string | undefined, +): Promise { + if (!customFunctionsFilePath) { + return ""; + } + return fs.readFileSync(customFunctionsFilePath, 'utf8'); +} + +// Check diagnostics and attempt repair +async function checkAndRepairDiagnostics( + params: RepairCodeParams, + langClient: ExtendedLangClient, + projectRoot: string +): Promise { + const diagnosticsParams: TempDirectoryPath = { + filePaths: collectDiagnosticFilePaths(params.tempFileMetadata, params.customFunctionsFilePath) + }; + + if (params.tempDir) { + diagnosticsParams.tempDir = params.tempDir; + } + + return await repairAndCheckDiagnostics(langClient, projectRoot, diagnosticsParams); +} + +// Repair code using LLM +async function repairWithLLM( + tempFileMetadata: ExtendedDataMapperMetadata, + mainContent: string, + customFunctionsFilePath: string | undefined, + customFunctionsContent: string, + diagnostics: DiagnosticList, + imports: ImportInfo[] +): Promise<{ finalContent: string; customFunctionsContent: string }> { + const sourceFiles = prepareSourceFilesForRepair( + tempFileMetadata.codeData.lineRange.fileName, + mainContent, + customFunctionsFilePath, + customFunctionsContent + ); + + await repairCodeWithLLM({sourceFiles, diagnostics, imports}); + + // Get updated content after repair + const finalContent = fs.readFileSync(tempFileMetadata.codeData.lineRange.fileName, 'utf8'); + const updatedCustomFunctionsContent = await getCustomFunctionsContent(customFunctionsFilePath); + + return { + finalContent, + customFunctionsContent: updatedCustomFunctionsContent + }; +} + +// ================================================================================================ +// processMappingParameters - Functions for processing mapping parameters +// ================================================================================================ + +// Build record map from project components +export function buildRecordMap( + projectComponents: ProjectComponentsResponse, + moduleDirs: Map +): Map { + const recordMap = new Map(); + + for (const pkg of projectComponents.components.packages || []) { + for (const mod of pkg.modules || []) { + let filepath = URI.parse(pkg.filePath).fsPath; + if (mod.name !== undefined && moduleDirs.has(mod.name)) { + const modDir = moduleDirs.get(mod.name); + filepath += `${modDir}/${mod.name}/`; + } + + mod.records.forEach((rec: ComponentInfo) => { + const recFilePath = filepath + rec.filePath; + recordMap.set(rec.name, { type: rec.name, isArray: false, filePath: recFilePath }); + }); + } + } + + return recordMap; +} + +// Collect existing functions from project components +export function collectExistingFunctions( + projectComponents: ProjectComponentsResponse, + moduleDirs: Map +): ComponentInfo[] { + const existingFunctions: ComponentInfo[] = []; + + for (const pkg of projectComponents.components.packages || []) { + for (const mod of pkg.modules || []) { + let filepath = URI.parse(pkg.filePath).fsPath; + if (mod.name !== undefined && moduleDirs.has(mod.name)) { + const modDir = moduleDirs.get(mod.name); + filepath += `${modDir}/${mod.name}/`; + } + + mod.functions?.forEach((func: ComponentInfo) => { + existingFunctions.push({ + name: func.name, + filePath: filepath + func.filePath, + startLine: func.startLine, + startColumn: func.startColumn, + endLine: func.endLine, + endColumn: func.endColumn + }); + }); + } + } + + return existingFunctions; +} + +// Get unique file paths from existing functions +export function getUniqueFunctionFilePaths(existingFunctions: ComponentInfo[]): string[] { + return [...new Set(existingFunctions.map(func => func.filePath))]; +} + +// Collect module information that needs directory resolution +export function collectModuleInfo(projectComponents: ProjectComponentsResponse): PackageInfo[] { + const moduleInfo: Array<{ moduleName: string; packageFilePath: string }> = []; + + for (const pkg of projectComponents.components.packages || []) { + for (const mod of pkg.modules || []) { + if (mod.name !== undefined) { + moduleInfo.push({ + moduleName: mod.name, + packageFilePath: pkg.filePath + }); + } + } + } + + return moduleInfo; +} + +// Determine file path for mapping function +export function determineMappingFilePath( + existingFunctionMatch: ExistingFunctionMatchResult, + activeFile: string, + projectRoot?: string +): string { + if (existingFunctionMatch.match) { + return existingFunctionMatch.matchingFunctionFile; + } else if (activeFile && activeFile.endsWith(".bal")) { + return activeFile; + } else { + if (projectRoot) { + const allBalFiles = findBalFilesInDirectory(projectRoot); + if (allBalFiles.length > 0) { + return path.basename(allBalFiles[allBalFiles.length - 1]); + } + } + + return null; + } +} + +// Determine the file path for custom functions +export function determineCustomFunctionsPath( + projectRoot: string, + activeFilePath?: string +): string | null { + const functionsBalPath = path.join(projectRoot, "functions.bal"); + + if (fs.existsSync(functionsBalPath)) { + return functionsBalPath; + } + + const allBalFiles = findBalFilesInDirectory(projectRoot); + + if (activeFilePath) { + const normalizedActiveFilePath = path.join(projectRoot, activeFilePath); + const otherBalFiles = allBalFiles.filter(file => file !== normalizedActiveFilePath); + + if (otherBalFiles.length > 0) { + return otherBalFiles[0]; + } + if (otherBalFiles.length === 0) { + return allBalFiles[0]; + } + } else { + if (allBalFiles.length > 0) { + return allBalFiles[0]; + } + } + + return null; +} + +// Build file array for mapping results +export function buildMappingFileArray( + filePath: string, + finalContent: string, + customFunctionsTargetPath?: string, + customFunctionsContent?: string +): SourceFile[] { + const fileArray: SourceFile[] = [ + { + filePath: filePath, + content: finalContent + } + ]; + + if (customFunctionsContent) { + fileArray.push({ + filePath: customFunctionsTargetPath, + content: customFunctionsContent + }); + } + + return fileArray; +} + +// Prepare mapping context with record map, functions, and mapping details for code generation +export async function prepareMappingContext( + mappingParameters: MappingParameters, + availableRecordTypes: Map, + existingProjectFunctions: ComponentInfo[], + projectImports: ImportInfo[], + functionSourceContents: Map, + currentActiveFileName: string, + langClient: ExtendedLangClient, + projectRoot?: string +): Promise<{ + recordMap: Map; + existingFunctions: ComponentInfo[]; + mappingDetails: ExtractMappingDetailsResponse; + filePath: string; +}> { + const extractedMappingDetails = await extractMappingDetails({ + parameters: mappingParameters, + recordMap: Object.fromEntries(availableRecordTypes), + allImports: projectImports, + existingFunctions: existingProjectFunctions, + functionContents: Object.fromEntries(functionSourceContents) + }, langClient); + + const targetFilePath = determineMappingFilePath(extractedMappingDetails.existingFunctionMatch, currentActiveFileName, projectRoot); + + return { + recordMap: availableRecordTypes, + existingFunctions: existingProjectFunctions, + mappingDetails: extractedMappingDetails, + filePath: targetFilePath + }; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/ask/ask.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/ask/ask.ts index 7ed350163a7..4e5f58413c0 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/ask/ask.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/ask/ask.ts @@ -103,7 +103,7 @@ async function fetchDocumentationFromVectorStore(query: string): Promise { - const project: ProjectSource = await getProjectSource(params.operationType); - const packageName = project.projectName; - const sourceFiles: SourceFiles[] = transformProjectSource(project); - let updatedSourceFiles: SourceFiles[] = [...sourceFiles]; + const projects: ProjectSource[] = await getProjectSource(params.operationType); + const activeProject = projects.find(p => p.isActive) || projects[0]; + const packageName = activeProject.projectName; + const sourceFiles: SourceFile[] = flattenProjectToFiles(projects); + let updatedSourceFiles: SourceFile[] = [...sourceFiles]; let updatedFileNames: string[] = []; - const prompt = getRewrittenPrompt(params, sourceFiles); + const prompt = getRewrittenPrompt(params, projects); const historyMessages = populateHistory(params.chatHistory); const cacheOptions = await getProviderCacheControl(); @@ -84,7 +89,7 @@ export async function generateCodeCore(params: GenerateCodeRequest, eventHandler const allMessages: ModelMessage[] = [ { role: "system", - content: getSystemPromptPrefix(sourceFiles, params.operationType), + content: getSystemPromptPrefix(projects, params.operationType), }, { role: "system", @@ -96,7 +101,7 @@ export async function generateCodeCore(params: GenerateCodeRequest, eventHandler role: "user", content: getUserPrompt( prompt, - sourceFiles, + projects, params.fileAttachmentContents, packageName, params.operationType @@ -126,7 +131,6 @@ export async function generateCodeCore(params: GenerateCodeRequest, eventHandler eventHandler({ type: "start" }); let assistantResponse: string = ""; - let finalResponse: string = ""; let selectedLibraries: string[] = []; let codeGenStart = false; const tempCodeSegment = '\n```ballerina\n// Code Generation\n```\n'; @@ -222,19 +226,17 @@ export async function generateCodeCore(params: GenerateCodeRequest, eventHandler const { messages: finalMessages } = await response; appendFinalMessages(allMessages, finalMessages, cacheOptions); - let codeSegment = getCodeBlocks(updatedSourceFiles, updatedFileNames); const postProcessedResp: PostProcessResponse = await postProcess({ - assistant_response: codeSegment, + sourceFiles: updatedSourceFiles, + updatedFileNames: updatedFileNames, }); - codeSegment = postProcessedResp.assistant_response; + updatedSourceFiles = postProcessedResp.sourceFiles; let diagnostics: DiagnosticEntry[] = postProcessedResp.diagnostics.diagnostics; const MAX_REPAIR_ATTEMPTS = 3; let repair_attempt = 0; - let diagnosticFixResp = codeSegment; //TODO: Check if we need this variable while ( - hasCodeBlocks(diagnosticFixResp) && diagnostics.length > 0 && repair_attempt < MAX_REPAIR_ATTEMPTS ) { @@ -244,20 +246,24 @@ export async function generateCodeCore(params: GenerateCodeRequest, eventHandler const repairedResponse: RepairResponse = await repairCode( { previousMessages: allMessages, - assistantResponse: diagnosticFixResp, + sourceFiles: updatedSourceFiles, + updatedFileNames: updatedFileNames, diagnostics: diagnostics, }, libraryDescriptions, - updatedSourceFiles, eventHandler ); - diagnosticFixResp = repairedResponse.repairResponse; + updatedSourceFiles = repairedResponse.sourceFiles; + updatedFileNames = repairedResponse.updatedFileNames; diagnostics = repairedResponse.diagnostics; repair_attempt++; } + // Generate final code blocks from repaired source files + const finalCodeSegment = getCodeBlocks(updatedSourceFiles, updatedFileNames); + // Update the final assistant response with the final code blocks - assistantResponse = assistantResponse.replace(tempCodeSegment, diagnosticFixResp); + assistantResponse = assistantResponse.replace(tempCodeSegment, finalCodeSegment); console.log("Final Diagnostics ", diagnostics); codeGenStart = false; @@ -271,7 +277,7 @@ export async function generateCodeCore(params: GenerateCodeRequest, eventHandler } } -function getCodeBlocks(updatedSourceFiles: SourceFiles[], updatedFileNames: string[]) { +function getCodeBlocks(updatedSourceFiles: SourceFile[], updatedFileNames: string[]) { const codeBlocks: string[] = []; for (const fileName of updatedFileNames) { @@ -301,12 +307,14 @@ export async function generateCode(params: GenerateCodeRequest): Promise { } } -function getSystemPromptPrefix(sourceFiles: SourceFiles[], op: OperationType): string { +function getSystemPromptPrefix(projects: ProjectSource[], op: OperationType): string { const basePrompt = `You are an expert assistant specializing in Ballerina code generation. Your should ONLY answer Ballerina related queries.`; if (op === "CODE_FOR_USER_REQUIREMENT") { + const sourceFiles = flattenProjectToFiles(projects); return getRequirementAnalysisCodeGenPrefix(extractResourceDocumentContent(sourceFiles)); } else if (op === "TESTS_FOR_USER_REQUIREMENT") { + const sourceFiles = flattenProjectToFiles(projects); return getRequirementAnalysisTestGenPrefix(extractResourceDocumentContent(sourceFiles)); } return basePrompt; @@ -374,29 +382,20 @@ ${JSON.stringify(langlibs, null, 2)} - Do not add/modify toml files (Config.toml/Ballerina.toml/Dependencies.toml). - Prefer modifying existing bal files over creating new files unless explicitly asked to create a new file in the query. -Begin your response with the very consice explanation. The explanation should contain a very high level the control flow decided in step 1 along with the how libraries are utilized. +Begin your response with the very consice explanation in the same language as the user query. The explanation should contain a very high level the control flow decided in step 1 along with the how libraries are utilized. Once the explanation is finished, make the necessary File modifications. Avoid any usage guides or explanations after the file modifications. `; } function getUserPrompt( usecase: string, - existingCode: SourceFiles[], + projects: ProjectSource[], fileUploadContents: FileAttatchment[], packageName: string, op: OperationType ): string { - let fileInstructions = ""; - if (fileUploadContents.length > 0) { - fileInstructions = `4. File Upload Contents. : Contents of the file which the user uploaded as additional information for the query. - -${fileUploadContents - .map( - (file) => `File Name: ${file.fileName} -Content: ${file.content}` - ) - .join("\n")}`; - } + const fileInstructions = formatFileUploadContents(fileUploadContents); + const packageContext = buildPackageContext(projects, packageName); return `QUERY: The query you need to answer. @@ -405,10 +404,10 @@ ${usecase} Existing Code: Users existing code. -${stringifyExistingCode(existingCode, op)} +${stringifyExistingCode(projects, op)} -Current Package name: ${packageName} +${packageContext} ${fileInstructions} @@ -419,6 +418,12 @@ export async function triggerGeneratedCodeRepair(params: RepairParams): Promise< // add null as the command since this is a repair operation is not a command const eventHandler = createWebviewEventHandler(undefined); try { + // Parse sourceFiles from assistantResponse XML if provided + if (params.assistantResponse && !params.sourceFiles) { + params.sourceFiles = parseSourceFilesFromXML(params.assistantResponse); + params.updatedFileNames = params.sourceFiles.map(file => file.filePath); + } + // Fetch all libraries for tool description const allLibraries = await getAllLibraries(GenerationType.CODE_GENERATION); const libraryDescriptions = @@ -440,8 +445,10 @@ export async function repairCodeCore( eventHandler: CopilotEventHandler ): Promise { eventHandler({ type: "start" }); - const resp = await repairCode(params, libraryDescriptions, [], eventHandler); - eventHandler({ type: "content_replace", content: resp.repairResponse }); + const resp = await repairCode(params, libraryDescriptions, eventHandler); + // Convert repaired sourceFiles to XML format for display + const repairedCodeBlocks = getCodeBlocks(resp.sourceFiles, resp.updatedFileNames); + eventHandler({ type: "content_replace", content: repairedCodeBlocks }); console.log("Manual Repair Diagnostics left: ", resp.diagnostics); eventHandler({ type: "diagnostics", diagnostics: resp.diagnostics }); eventHandler({ type: "stop", command: undefined }); @@ -451,14 +458,16 @@ export async function repairCodeCore( export async function repairCode( params: RepairParams, libraryDescriptions: string, - sourceFiles: SourceFiles[] = [], eventHandler?: CopilotEventHandler ): Promise { + // Convert current sourceFiles to XML format for assistant message + const assistantResponse = getCodeBlocks(params.sourceFiles, params.updatedFileNames); + const allMessages: ModelMessage[] = [ ...params.previousMessages, { role: "assistant", - content: params.assistantResponse, + content: assistantResponse, }, { role: "user", @@ -469,9 +478,8 @@ export async function repairCode( }, ]; - let updatedSourceFiles: SourceFiles[] = - sourceFiles.length == 0 ? getProjectFromResponse(params.assistantResponse).sourceFiles : sourceFiles; - let updatedFileNames: string[] = []; + let updatedSourceFiles: SourceFile[] = [...params.sourceFiles]; + let updatedFileNames: string[] = [...params.updatedFileNames]; const tools = { LibraryProviderTool: getLibraryProviderTool(libraryDescriptions, GenerationType.CODE_GENERATION), @@ -505,31 +513,45 @@ export async function repairCode( }, }); } - const updatedCodeBlocks = getCodeBlocks(updatedSourceFiles, updatedFileNames); - // replace original response with new code blocks - let diagnosticFixResp = replaceCodeBlocks(params.assistantResponse, updatedCodeBlocks); + const postProcessResp: PostProcessResponse = await postProcess({ - assistant_response: diagnosticFixResp, + sourceFiles: updatedSourceFiles, + updatedFileNames: updatedFileNames, }); - diagnosticFixResp = postProcessResp.assistant_response; console.log("After auto repair, Diagnostics : ", postProcessResp.diagnostics.diagnostics); - return { repairResponse: diagnosticFixResp, diagnostics: postProcessResp.diagnostics.diagnostics }; + return { + sourceFiles: postProcessResp.sourceFiles, + updatedFileNames: updatedFileNames, + diagnostics: postProcessResp.diagnostics.diagnostics + }; } -export function stringifyExistingCode(existingCode: SourceFiles[], op: OperationType): string { - let existingCodeStr = ""; - for (const file of existingCode) { - const filePath = file.filePath; - if (op !== "CODE_GENERATION" && !filePath.endsWith(".bal")) { - continue; - } +/** + * Formats a file as XML with filename and optional external package attribute. + */ +function formatFileAsXml(filePath: string, content: string, externalAttr: string): string { + return ` + +${content} + +`; +} - existingCodeStr += `\n`; - existingCodeStr += `\n${file.content}\n\n`; - existingCodeStr += `\n`; - } - return existingCodeStr; +export function stringifyExistingCode(projects: ProjectSource[], op: OperationType): string { + const usePackagePrefix = projects.length > 1; + const fileFilter = (filePath: string) => + op === "CODE_GENERATION" || filePath.endsWith(".bal"); + + const files = buildFilePaths(projects, fileFilter); + + return files.map(({ filePath, content, packageName, isActive }) => { + const externalAttr = (usePackagePrefix && packageName && !isActive) + ? ` externalPackageName="${packageName}"` + : ""; + + return formatFileAsXml(filePath, content, externalAttr); + }).join("\n"); } export function hasCodeBlocks(text: string) { diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/connection.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/connection.ts index 8786a427a39..dd1ecc17da5 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/connection.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/connection.ts @@ -16,9 +16,9 @@ import { createAnthropic } from "@ai-sdk/anthropic"; import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock"; -import { getAccessToken, getLoginMethod, getRefreshedAccessToken, getAwsBedrockCredentials } from "../../../utils/ai/auth"; +import { getAccessToken, getLoginMethod, getRefreshedAccessToken, getAwsBedrockCredentials, refreshDevantToken } from "../../../utils/ai/auth"; import { AIStateMachine } from "../../../views/ai-panel/aiMachine"; -import { BACKEND_URL, DEVANT_API_KEY_FOR_ASK } from "../utils"; +import { BACKEND_URL } from "../utils"; import { AIMachineEventType, AnthropicKeySecrets, LoginMethod, BIIntelSecrets, DevantEnvSecrets } from "@wso2/ballerina-core"; export const ANTHROPIC_HAIKU = "claude-3-5-haiku-20241022"; @@ -59,10 +59,9 @@ let cachedAuthMethod: LoginMethod | null = null; * Reusable fetch function that handles authentication with token refresh * @param input - The URL, Request object, or string to fetch * @param options - Fetch options - * @param isAskRequest - TEMPORARY HACK: If true, uses DEVANT_API_KEY_FOR_ASK env variable as API key * @returns Promise */ -export async function fetchWithAuth(input: string | URL | Request, options: RequestInit = {}, isAskRequest: boolean = false): Promise { +export async function fetchWithAuth(input: string | URL | Request, options: RequestInit = {}): Promise { try { const credentials = await getAccessToken(); const loginMethod = credentials.loginMethod; @@ -74,17 +73,12 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ }; if (credentials && loginMethod === LoginMethod.DEVANT_ENV) { - // For DEVANT_ENV, use api-key and x-Authorization headers + // For DEVANT_ENV, use Bearer token (exchanged from STS token) const secrets = credentials.secrets as DevantEnvSecrets; - // TEMPORARY HACK: Use DEVANT_API_KEY_FOR_ASK env variable for ask requests - const apiKey = isAskRequest ? DEVANT_API_KEY_FOR_ASK : secrets.apiKey; - const stsToken = secrets.stsToken; - - if (apiKey && stsToken && apiKey.trim() !== "" && stsToken.trim() !== "") { - headers["api-key"] = apiKey; - headers["x-Authorization"] = stsToken; + if (secrets.accessToken && secrets.accessToken.trim() !== "") { + headers["Authorization"] = `Bearer ${secrets.accessToken}`; } else { - console.warn("DevantEnv secrets missing, this may cause authentication issues"); + console.warn("DevantEnv access token missing, this may cause authentication issues"); } } else if (credentials && loginMethod === LoginMethod.BI_INTEL) { // For BI_INTEL, use Bearer token @@ -101,22 +95,52 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ let response = await fetch(input, options); console.log("Response status: ", response.status); - // Handle token expiration (only for BI_INTEL method) - if (response.status === 401 && loginMethod === LoginMethod.BI_INTEL) { - console.log("Token expired. Refreshing token..."); - const newToken = await getRefreshedAccessToken(); - if (newToken) { - options.headers = { - ...options.headers, - 'Authorization': `Bearer ${newToken}`, - }; - response = await fetch(input, options); - } else { - AIStateMachine.service().send(AIMachineEventType.LOGOUT); - return; + // Handle token expiration for both BI_INTEL and DEVANT_ENV methods + if (response.status === 401) { + if (loginMethod === LoginMethod.BI_INTEL) { + console.log("Token expired. Refreshing BI_INTEL token..."); + const newToken = await getRefreshedAccessToken(); + if (newToken) { + options.headers = { + ...options.headers, + 'Authorization': `Bearer ${newToken}`, + }; + response = await fetch(input, options); + } else { + AIStateMachine.service().send(AIMachineEventType.LOGOUT); + return; + } + } else if (loginMethod === LoginMethod.DEVANT_ENV) { + console.log("Token expired. Refreshing DEVANT_ENV token..."); + try { + const newToken = await refreshDevantToken(); + if (newToken) { + options.headers = { + ...options.headers, + 'Authorization': `Bearer ${newToken}`, + }; + response = await fetch(input, options); + } else { + AIStateMachine.service().send(AIMachineEventType.LOGOUT); + return; + } + } catch (error) { + console.error("Failed to refresh Devant token:", error); + AIStateMachine.service().send(AIMachineEventType.LOGOUT); + return; + } } } + // Handle usage limit exceeded + if (response.status === 429) { + console.log("Usage limit exceeded (429)"); + const error = new Error("Usage limit exceeded. Please try again later."); + error.name = "UsageLimitError"; + (error as any).statusCode = 429; + throw error; + } + return response; } catch (error: any) { if (error?.message === "TOKEN_EXPIRED") { @@ -136,9 +160,10 @@ export const getAnthropicClient = async (model: AnthropicModel): Promise => // Recreate client if login method has changed or no cached instance if (!cachedAnthropic || cachedAuthMethod !== loginMethod) { + let url = BACKEND_URL + "/intelligence-api/v1.0/claude"; if (loginMethod === LoginMethod.BI_INTEL || loginMethod === LoginMethod.DEVANT_ENV) { cachedAnthropic = createAnthropic({ - baseURL: BACKEND_URL + "/intelligence-api/v1.0/claude", + baseURL: url, apiKey: "xx", // dummy value; real auth is via fetchWithAuth fetch: fetchWithAuth, }); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/codeRepairPrompt.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/codeRepairPrompt.ts new file mode 100644 index 00000000000..2f820687694 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/codeRepairPrompt.ts @@ -0,0 +1,80 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * Generates the main data mapping prompt for AI + */ +export function getBallerinaCodeRepairPrompt(sourceFiles: string, diagnostics: string, imports: string): string { + return `You are an expert Ballerina programmer tasked with fixing compiler errors in Ballerina source code. + +# Context +You have been provided with: +1. Source files with Ballerina code that contains errors +2. Diagnostic information (compiler errors and warnings) +3. Import statements available in the project + +# Your Task +Analyze the provided code and diagnostics, then generate corrected Ballerina source files that: +- Fix all compiler errors identified in the diagnostics +- Maintain the original code structure and logic as much as possible +- Use correct Ballerina syntax and idioms +- Ensure all function signatures, type definitions, and record field accesses are valid +- Verify that all imported modules are used correctly +- Follow Ballerina best practices and conventions + +# Input Data + +## Source Files: +${sourceFiles} + +## Diagnostics (Errors and Warnings): +${diagnostics} + +## Available Imports: +${imports} + +# Instructions +1. Carefully examine each diagnostic error and identify the root cause +2. Check function signatures, return types, and parameter types against Ballerina documentation +3. Verify record field access patterns are correct (use dot notation for required fields, optional chaining for optional fields) +4. Ensure type compatibility in assignments and function calls +5. Fix any syntax errors or misused language constructs +6. Validate that all imported modules and their functions are used correctly +7. Return the complete corrected source files with the same file paths + +# Output Format +Return a JSON object with the following structure: +{ + "repairedFiles": [ + { + "filePath": "path/to/file.bal", + "content": "// Complete corrected Ballerina code here" + } + ] +} + +# Important Notes +- Include ALL source files in your response, even if some don't have errors +- Provide the COMPLETE file content, not just the changed portions +- Ensure the code compiles without errors +- Maintain code readability and formatting +- Preserve all existing comments from the original code +- Do NOT add any new comments or explanatory notes +- Only fix the errors without adding documentation or explanations +- Do not change the core logic or business requirements of the code + +Generate the repaired source files now.`; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/constant.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/constant.ts deleted file mode 100644 index 2de7e713fb2..00000000000 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/constant.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. - -// WSO2 LLC. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 - -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -// ============================================================================= -// OPERATION TYPE CONSTANTS -// ============================================================================= -const DIRECT = "DIRECT"; -const LENGTH = "LENGTH"; -const SPLIT = "SPLIT"; -const ADDITION = "ADDITION"; -const SUBTRACTION = "SUBTRACTION"; -const MULTIPLICATION = "MULTIPLICATION"; -const DIVISION = "DIVISION"; -const MODULAR = "MODULAR"; -const EQUAL = "EQUAL"; -const NOTEQUAL = "NOTEQUAL"; -const LESS_THAN = "LESS_THAN"; -const LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL"; -const AND = "AND"; -const OR = "OR"; -const REPLACE_ALL = "REPLACE_ALL"; -const AVERAGE = "AVERAGE"; -const MAXIMUM = "MAXIMUM"; -const MINIMUM = "MINIMUM"; -const SUMMATION = "SUMMATION"; -const ABSOLUTE = "ABSOLUTE"; - -// Parameter constants -const PARAMETER_1 = "PARAMETER_1"; -const PARAMETER_2 = "PARAMETER_2"; -const PARAMETER_3 = "PARAMETER_3"; -const NAME = "NAME"; - - -// ============================================================================= -// EXPORTS -// ============================================================================= - -// Export operation constants for external use -export { - DIRECT, - LENGTH, - SPLIT, - ADDITION, - SUBTRACTION, - MULTIPLICATION, - DIVISION, - MODULAR, - EQUAL, - NOTEQUAL, - LESS_THAN, - LESS_THAN_OR_EQUAL, - AND, - OR, - REPLACE_ALL, - AVERAGE, - MAXIMUM, - MINIMUM, - SUMMATION, - ABSOLUTE, - PARAMETER_1, - PARAMETER_2, - PARAMETER_3, - NAME -}; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/context_api.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/context_api.ts index 0f8a331f16a..14cf1183c78 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/context_api.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/context_api.ts @@ -17,111 +17,32 @@ import { generateText, ModelMessage } from "ai"; import { getAnthropicClient, ANTHROPIC_SONNET_4 } from "../connection"; import { AIPanelAbortController } from "../../../../../src/rpc-managers/ai-panel/utils"; +import { ContentPart, DataMapperRequest, DataMapperResponse, FileData, FileTypeHandler, ProcessType } from "./types"; -// Types -export type FileData = { - fileName: string; - content: string; -}; - -export type ProcessType = "mapping_instruction" | "records" | "requirements"; - -export type DataMapperRequest = { - file?: FileData; - text?: string; - processType: ProcessType; - isRequirementAnalysis?: boolean; //TODO: Why is this -}; - -export type DataMapperResponse = { - fileContent: string; -}; - -export type SupportedFileExtension = "pdf" | "jpg" | "jpeg" | "png" | "txt"; // Maybe have better names and types? export async function processDataMapperInput(request: DataMapperRequest): Promise { - if (request.file) { - return await processFile(request.file, request.processType, request.isRequirementAnalysis); + if (request.files.length > 0) { + return await processFiles(request.files, request.processType, request.isRequirementAnalysis); } else if (request.text) { - const message = await processText(request.text, request.processType); - const fileContent = request.isRequirementAnalysis - ? message - : extractBallerinaCode(message, request.processType); - return { fileContent }; + return await processFiles([{ fileName: 'text', content: btoa(request.text) }], request.processType, request.isRequirementAnalysis); } else { - throw new Error("No file or text provided. Please provide file data or text input."); + throw new Error("No files or text provided. Please provide file data or text input."); } } -// Process file data -async function processFile(file: FileData, processType: ProcessType, isRequirementAnalysis: boolean = false): Promise { - let message: string; - - const extension = getFileExtension(file.fileName); - +// Process files (single or multiple) +async function processFiles(files: FileData[], processType: ProcessType, isRequirementAnalysis: boolean = false): Promise { try { - //TODO: I think we should handle supported files from one place. - if (extension === "pdf") { - message = await processPdf(file.content, processType); - } else if (extension === "jpeg" || extension === "jpg" || extension === "png") { - message = await processImage(file.content, processType, extension); - } else if (extension === "txt" || extension === "csv" || !extension) { - const txtContent = atob(file.content); - message = await processText(txtContent, processType); - } else { - throw new Error(`Unsupported file type: ${extension}`); - } + const message = await processFilesWithClaude(files, processType); - const fileContent = isRequirementAnalysis + const fileContent = isRequirementAnalysis ? getRequirementsContent(message) : extractBallerinaCode(message, processType); return { fileContent }; } catch (error) { - throw new Error(`Error processing file: ${error instanceof Error ? error.message : String(error)}`); - } -} - -// Process PDF content -async function processPdf(base64Content: string, processType: ProcessType): Promise { - try { - return await extractionUsingClaude({ - pdfData: base64Content, - processType - }); - } catch (error) { - throw new Error(`PDF processing error: ${error instanceof Error ? error.message : String(error)}`); - } -} - -// Process image content -async function processImage(base64Content: string, processType: ProcessType, extension: string): Promise { - // Only process actual image extensions - if (extension !== "jpeg" && extension !== "jpg" && extension !== "png") { - throw new Error(`Unsupported image extension: ${extension}`); - } - - try { - return await imageExtractionUsingClaude({ - imgData: base64Content, - processType, - extension - }); - } catch (error) { - throw new Error(`Image processing error: ${error instanceof Error ? error.message : String(error)}`); - } -} - -// Process text content -async function processText(text: string, processType: ProcessType): Promise { - try { - return await textExtractionUsingClaude({ - textContent: text, - processType - }); - } catch (error) { - throw new Error(`Error processing text: ${error instanceof Error ? error.message : String(error)}`); + throw new Error(`Error processing ${files.length === 1 ? 'file' : 'files'}: ${error instanceof Error ? error.message : String(error)}`); } } @@ -158,12 +79,73 @@ function getRequirementsContent(message: any): string { return String(message); } +// Supported file types configuration +const SUPPORTED_FILE_TYPES: Record = { + pdf: (file: FileData) => ({ + type: "file", + data: file.content, + mediaType: "application/pdf" + }), + jpeg: (file: FileData) => ({ + type: "image", + image: file.content, + mediaType: "image/jpeg" + }), + jpg: (file: FileData) => ({ + type: "image", + image: file.content, + mediaType: "image/jpeg" + }), + png: (file: FileData) => ({ + type: "image", + image: file.content, + mediaType: "image/png" + }), + txt: (file: FileData, includeFileName: boolean) => { + const txtContent = atob(file.content); + return { + type: "text", + text: includeFileName ? `File: ${file.fileName}\n\n${txtContent}` : txtContent + }; + }, + csv: (file: FileData, includeFileName: boolean) => { + const txtContent = atob(file.content); + return { + type: "text", + text: includeFileName ? `File: ${file.fileName}\n\n${txtContent}` : txtContent + }; + } +}; + // Get file extension from filename function getFileExtension(fileName: string): string { const extension = fileName.toLowerCase().split('.').pop(); return extension || ""; } +// Convert file to content part for Claude API +function convertFileToContentPart(file: FileData, includeFileName: boolean = false): ContentPart { + const extension = getFileExtension(file.fileName); + + const handler = SUPPORTED_FILE_TYPES[extension]; + + if (handler) { + return handler(file, includeFileName); + } + + // Fallback for files without extension + if (!extension) { + const txtContent = atob(file.content); + return { + type: "text", + text: includeFileName ? `File: ${file.fileName}\n\n${txtContent}` : txtContent + }; + } + + const supportedTypes = Object.keys(SUPPORTED_FILE_TYPES).join(', '); + throw new Error(`Unsupported file type: ${extension}. Supported types are: ${supportedTypes}`); +} + // Prompt generation functions function getMappingInstructionPrompt(): string { return `You are an AI assistant specialized in generating data field mappings for data integration and transformation tasks. @@ -256,96 +238,48 @@ Generate only Ballerina code with in tags based on the provided } function getRecordsPrompt(): string { - return `You are an AI assistant specializing in the Ballerina programming language. -Your task is to analyze given content and create Ballerina code for type records based on the content provided. - -IMPORTANT: - - Do not take any assumptions based on data types or records. - - Do not include any comments in the code - - Final output has only Ballerina code within tags. - - Extract as much as all possible records and fields - -Please follow these steps to create the Ballerina code: - - 1. Analyze the content: - a) If it is an image, Input records appear on the left side of the image, and output records appear on the right side. - b) All subfields of nested fields or subfields should be structured hierarchically, expanding downwards recursively within their respective parent fields. This hierarchy should reflect nested relationships. - c) Must extract all records and their all fields and their data types in the content. - d) Using and refer to all links or hyperlinks that provide additional information about records and data types in the content. - e) Quote and number specific parts of the content that mention record types and data types. - f) List all record types mentioned in the content, numbering them (e.g., 1. RecordType1, 2. RecordType2, ...). - g) For each record type, list it's all fields and their exact data types as mentioned in the content, also numbering them (e.g., 1.1 field1: SI, 1.2 field2: int, ... ). - h) Identify any nested structures and explain how they relate to the main records. - i) Summarize and use relevant comments or conditions or additional information about the records or data types in the content. - - 2. Define the record types: - Based on your analysis: - - Create a type record for each identified record with its sub-fields - - Consider all records and fields with optional and nullable feature - - Use only the exact data types you identified in step 1 for each field and record - - Apply these naming conventions: PascalCase for record names, camelCase for field names - - For nested fields, create recursive record types, stopping at simple data types - -After your analysis, provide the Ballerina code within tags. The code should include: - - Type record definitions for all identified records with its all fields - -Example output structure (generic, without specific content): - - -type RecordName1 record { - FieldDataType1 fieldName1; - FieldDataType2 fieldName2; - }; - -type RecordName2 record { - FieldDataType3 fieldName3; - RecordName1 nestedField; -}; + return `You are an AI assistant specializing in the Ballerina programming language. Your task is to analyze provided content and generate comprehensive Ballerina type record definitions based on all the information present in that content. -type RecordName3 record { - FieldDataType4 fieldName4; - RecordName4 nestedField; -}; - +Your goal is to extract every possible record type and field from this content and convert them into proper Ballerina type record definitions. You must capture all the information mentioned - leave nothing out. -Sample example for the required format: +## Code Generation Requirements -type Person record { - int? id?; - string firstName; - string? lastName; - int? age; - string country?; - College? college?; -}; +Generate Ballerina code that includes: -type College record { - Course[] courses; -}; +- Type record definitions for ALL identified records with ALL their fields +- Proper handling of optional (\`?\`) and nullable features - but ONLY when explicitly mentioned as optional or nullable in the content +- Correct Ballerina naming conventions +- No comments in the generated code +- No assumptions beyond what's explicitly stated in the content -type Course record { - string? id?; - decimal credits?; - Address? address; -}; +## Enum Declaration Format -type Student record { - string id; - string firstName; - float? age; - record { - int id; - float credits?; - Address address; - }[] courses; -}; +When you encounter enumerated types, use this specific syntax: -type A record { - Person[] person; +\`\`\`ballerina +enum EnumName { + VALUE1, + VALUE2, + VALUE3 }; +\`\`\` + +## Output Format + +Present your final code within \`\` tags. Structure your code as follows: + +- Place all enum definitions first +- Follow with type record definitions +- Use proper Ballerina syntax throughout -type B record { - Student[] student?; +Example structure (generic structure only): + +type Person record { + int? id?; + string firstName; + string? lastName; + int? age; + Address? address?; }; type Address record { @@ -354,7 +288,14 @@ type Address record { string? zipcode; }; -Generate only Ballerina code with in tags based on the provided content.`; +enum Gender { + MALE, + FEMALE, + OTHER +}; + +Generate only Ballerina code with in tags based on the provided content. +`; } function getRequirementsPrompt(): string { @@ -403,93 +344,28 @@ function getPromptForProcessType(processType: ProcessType): string { } } -// Claude API integration functions -async function extractionUsingClaude({ pdfData, processType }: { pdfData: string; processType: ProcessType }): Promise { +// Process files with Claude (handles both single and multiple files) +async function processFilesWithClaude(files: FileData[], processType: ProcessType): Promise { const promptText = getPromptForProcessType(processType); - - const messages: ModelMessage[] = [ - { - role: "user", - content: [ - { - type: "file", - data: pdfData, - mediaType: "application/pdf" - }, - { - type: "text", - text: promptText - } - ] - } - ]; - const { text } = await generateText({ - model: await getAnthropicClient(ANTHROPIC_SONNET_4), - maxOutputTokens: 8192, - temperature: 0, - messages: messages, - abortSignal: AIPanelAbortController.getInstance().signal - }); - - return text; -} + // Build content array with all files + const contentParts: Array = []; + const includeFileName = files.length > 1; -async function imageExtractionUsingClaude({ - imgData, - processType, - extension -}: { - imgData: string; - processType: ProcessType; - extension: string; -}): Promise { - const promptText = getPromptForProcessType(processType); - - // Convert extension to proper media type - const mimeType = extension === "png" ? "image/png" : "image/jpeg"; - - const messages: ModelMessage[] = [ - { - role: "user", - content: [ - { - type: "image", - image: imgData, - mediaType: mimeType - }, - { - type: "text", - text: promptText - } - ] - } - ]; + for (const file of files) { + contentParts.push(convertFileToContentPart(file, includeFileName)); + } - const { text } = await generateText({ - model: await getAnthropicClient(ANTHROPIC_SONNET_4), - maxOutputTokens: 8192, - temperature: 0, - messages: messages, - abortSignal: AIPanelAbortController.getInstance().signal + // Add the prompt at the end + contentParts.push({ + type: "text", + text: promptText }); - return text; -} - -async function textExtractionUsingClaude({ - textContent, - processType -}: { - textContent: string; - processType: ProcessType; -}): Promise { - const promptText = getPromptForProcessType(processType); - const messages: ModelMessage[] = [ { role: "user", - content: promptText + "\n\n" + textContent + content: contentParts } ]; @@ -505,21 +381,21 @@ async function textExtractionUsingClaude({ } // Utility functions for specific use cases -export async function generateMappingInstruction(input: { file?: FileData; text?: string }): Promise { +export async function generateMappingInstruction(input: { files: FileData[]; text?: string }): Promise { return await processDataMapperInput({ ...input, processType: "mapping_instruction" }); } -export async function generateRecord(input: { file?: FileData; text?: string }): Promise { +export async function generateRecord(input: { files: FileData[]; text?: string }): Promise { return await processDataMapperInput({ ...input, processType: "records" }); } -export async function extractRequirements(input: { file?: FileData; text?: string }): Promise { +export async function extractRequirements(input: { files: FileData[]; text?: string }): Promise { return await processDataMapperInput({ ...input, processType: "requirements", diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/dataMappingPrompt.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/dataMappingPrompt.ts new file mode 100644 index 00000000000..cd472c44060 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/dataMappingPrompt.ts @@ -0,0 +1,138 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * Generates the main data mapping prompt for AI + */ +export function getDataMappingPrompt(DM_MODEL: string, userMappings: string, mappingTips: string, subMappings: string): string { + return `You are a specialized code generation assistant for the Ballerina programming language. Your task is to generate syntactically correct Ballerina expressions that transform input data fields into output data fields based on provided specifications. + +Here is the data model schema that defines the structure and types: +${DM_MODEL} + +**User-Defined Mappings:** +${userMappings} + +**Sub-Mappings (nested mappings or additional mapping context):** +${subMappings} + +**Mapping Context (These are mapping tips with HIGHEST PRIORITY):** +${mappingTips} + +## Priority Hierarchy + +When generating mapping expressions, follow this strict order of priority: + +1. **User-defined mappings (mapping tips/mapping context)** - These have ABSOLUTE HIGHEST PRIORITY. Check these first and give them complete precedence over all other considerations. +2. **Existing submappings** - If a submapping exists for the target output field, use the submapping's output name as a direct reference +3. **Context and constraints** - Apply all provided business rules and transformation logic +4. **Ballerina programming knowledge** - Use built-in functions and standard approaches +5. **Default handling** - Only for non-optional fields when no other mapping is available + +## Technical Requirements + +### Schema and Type Handling +- Use existing submappings within the data model schema when available +- Use specific types defined in the schema - never use generic types like \`anydata\` or \`any\` +- Use exact type names from the schema in custom function signatures +- Ensure type compatibility between input and output fields +- Only reference fields and symbols that exist in the schema +- For imported package records, use only the package alias (the part after the colon) +- **For nullable or optional types, always use \`string?\` format instead of \`string|()\`** + +### Field Access Rules +- Use \`?.\` (safe access) only when the field is actually optional or nullable in the schema +- Use \`.\` (dot notation) for accessing non-optional and non-nullable fields +- When input and output are the same type, direct assignment is sufficient even for optional fields +- When input and output are different types, apply appropriate transformation methods +- For output field names, always use dot notation from the root level + +### Union Types and Enums +- When either input field or output field is a union type or enum, create custom functions +- For nested union types, create separate custom functions for each level of nesting +- Each custom function should handle only one level of union complexity +- Never handle nested unions inline - always create separate helper functions +- Use exact type names from the schema in all custom function signatures + +### Mapping Strategy +- Perform mapping at the field level, not at the record or array level +- Break down complex structures and map their individual components +- For arrays of records, analyze individual fields within those records +- **Only** use query expressions with the pattern \`from var in select \` when **both the input and output are arrays**. Otherwise, **do not use** this pattern. +- For nested structures with unions, create record construction expressions that call appropriate custom functions + +### Regular Expression Operations +- Use Ballerina's \`lang.regexp\` library for all regex operations: \`import ballerina/lang.regexp;\` +- Use the \`re\` template expression to create RegExp values: \`string:RegExp pattern = re \`[0-9]+\`;\` +- Common functions: \`regexp:isFullMatch()\`, \`regexp:find()\`, \`regexp:findAll()\`, \`regexp:replace()\`, \`regexp:replaceAll()\`, \`regexp:split()\` + +### Ballerina Syntax Requirements +1. Write syntactically correct Ballerina code without compilation errors +2. Use \`.toString()\` directly for type conversion to strings +3. Use \`check\` expressions instead of \`trap\` or \`panic\` for error handling +4. Handle union types and enums with appropriate type checking using \`check\` expressions or \`if-else\` type narrowing +5. Use dot notation for nested field access +6. Use Ballerina built-in methods for transformations +7. Use query expressions for array mappings at the element level +8. For nested structures, prefer record constructor expressions over inline mapping +9. **NEVER use \`let\` clause expressions in your mapping output** +10. If you need complex logic, define separate functions instead and call those functions in the expression +11. **Type Declaration Consistency**: When declaring nullable types, use ONLY the \`?\` suffix notation (e.g., \`string?\`, \`CustomType?\`). Never combine union syntax \`|()\` with the \`?\` suffix. + +### Default Values +- Only provide default values for non-optional fields when no mapping is available +- Do not include default values for fields that have explicit mappings +- Do not provide default values for optional fields + +## Output Format + +Provide your final answer as a JSON array. Each object in the array must contain exactly these three fields: + +- **\`"outputField"\`**: The COMPLETE field path in the output model, starting from the root. This can be: + - A complete field path for simple mappings (e.g., \`"transform.id"\`) + - A parent record path when constructing nested structures (e.g., \`"transform.bio"\`) + - Use \`""\` for root-level mappings + +- **\`"expression"\`**: The complete Ballerina code expression that performs the mapping. Provide ONLY executable code without comments. This can be: + - A simple field reference for direct mappings + - If a submapping exists, use the submapping's output name directly as the expression + - A record constructor expression for nested structures + - A query expression for array mappings + +- **\`"functionDefinition"\`**: (include only when the expression requires a function) All custom function implementations needed, including helper functions, ordered by dependency. Provide ONLY executable Ballerina code without comments. If no custom function is needed, omit this field entirely. + +**Important Grouping Rule**: When multiple output fields belong to the same nested record structure, create ONE mapping object with the parent path as \`outputField\` and a record constructor expression that maps all the fields together. + +**Example Output Structure:** +\`\`\`json +[ + { + "outputField": "mapPatient.customerAge", + "expression": "check int:fromString(input.customer?.age.toString())" + }, + { + "outputField": "", + "expression": "from var project in input.projects select {\n id: project.id,\n name: project.name\n}" + }, + { + "outputField": "transform.customerType", + "expression": "processCustomerType(input?.customerType)", + "functionDefinition": "\n\nfunction processCustomerType(module:CustomerTypeEnum? inputType) returns string {\n if inputType is () {\n return \"UNKNOWN\";\n }\n return inputType;\n}" + } +] +\`\`\` +`; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/datamapper.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/datamapper.ts index 27e928ead2d..64a1a6262a0 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/datamapper.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/datamapper.ts @@ -14,1003 +14,1246 @@ // specific language governing permissions and limitations // under the License. -import { ModelMessage, generateObject } from "ai"; +import { CoreMessage, ModelMessage, generateObject } from "ai"; import { getAnthropicClient, ANTHROPIC_SONNET_4 } from "../connection"; import { + CodeRepairResult, DatamapperResponse, - AIDataMappings, - MappingJson, - MappingRecord, - MappingOperation, - FieldMetadata, - ParameterMetadata, + DataModelStructure, MappingFields, - Mapping, - Operation, - DataMappingRequest, - DataMappingResponse, - IOTypeVisitor, - VisitorContext, - Payload + RepairedFiles, } from "./types"; -import { MappingSchema } from "./schema"; +import { GeneratedMappingSchema, RepairedSourceFilesSchema } from "./schema"; import { AIPanelAbortController } from "../../../../../src/rpc-managers/ai-panel/utils"; -import { ADDITION, DIRECT, DIVISION, LENGTH, MODULAR, MULTIPLICATION, NAME, PARAMETER_1, SPLIT, SUBTRACTION } from "./constant"; -import { ExpandedDMModel, DataMapperModelResponse, IOType, TypeKind } from "@wso2/ballerina-core"; -import { getDataMappingPrompt } from "./prompt"; - -// Operations table - In a real implementation, this would be loaded from JSON files -const operationsTable: Map = new Map([ - [ - DIRECT, - { - name: DIRECT, - structure: { - operation: "DIRECT", - outputType: ["int", "float", "decimal", "string", "boolean"], - inputType: ["int", "float", "decimal", "string", "boolean"], - imports: {}, - errorReturned: false, - expression: "${LHS} : ${PA_1}", - }, - }, - ], - [ - ADDITION, - { - name: ADDITION, - structure: { - operation: "ADDITION", - outputType: ["int", "float", "decimal"], - inputType: ["int", "float", "decimal"], - imports: {}, - errorReturned: false, - expression: "+", - }, - }, - ], - [ - DIVISION, - { - name: DIVISION, - structure: { - operation: "DIVISION", - outputType: ["int", "float", "decimal"], - inputType: ["int", "float", "decimal"], - imports: {}, - errorReturned: false, - expression: "/", - }, - }, - ], - [ - LENGTH, - { - name: LENGTH, - structure: { - operation: "LENGTH", - outputType: ["int"], - inputType: ["string[]", "int[]", "float[]", "decimal[]", "boolean[]", "record[]"], - imports: {}, - errorReturned: false, - expression: "${LHS} : ${RHS}.length()", - }, - }, - ], - [ - MODULAR, - { - name: MODULAR, - structure: { - operation: "MODULAR", - outputType: ["int"], - inputType: ["int"], - imports: {}, - errorReturned: false, - expression: "%", - }, - }, - ], - [ - MULTIPLICATION, - { - name: MULTIPLICATION, - structure: { - operation: "MULTIPLICATION", - outputType: ["int", "float", "decimal"], - inputType: ["int", "float", "decimal"], - imports: {}, - errorReturned: false, - expression: "*", - }, - }, - ], - [ - SPLIT, - { - name: SPLIT, - structure: { - operation: "SPLIT", - outputType: ["string[]", "string"], - inputType: ["string"], - imports: { org: "ballerina", package: "lang.regexp" }, - errorReturned: false, - expression: "${LHS} : re `,`.split(${RHS})", - }, - }, - ], - [ - SUBTRACTION, - { - name: SUBTRACTION, - structure: { - operation: "SUBTRACTION", - outputType: ["int", "float", "decimal"], - inputType: ["int", "float", "decimal"], - imports: {}, - errorReturned: false, - expression: "-", - }, - }, - ], -]); +import { DataMapperModelResponse, DMModel, Mapping, repairCodeRequest, SourceFile, DiagnosticList, ImportInfo, ProcessMappingParametersRequest, Command, MetadataWithAttachments, InlineMappingsSourceResult, ProcessContextTypeCreationRequest, ProjectImports, ImportStatements, TemplateId, GetModuleDirParams, TextEdit, DataMapperSourceResponse, DataMapperSourceRequest, AllDataMapperSourceRequest, DataMapperModelRequest, DeleteMappingRequest } from "@wso2/ballerina-core"; +import { getDataMappingPrompt } from "./dataMappingPrompt"; +import { getBallerinaCodeRepairPrompt } from "./codeRepairPrompt"; +import { CopilotEventHandler, createWebviewEventHandler } from "../event"; +import { getErrorMessage } from "../utils"; +import { buildMappingFileArray, buildRecordMap, collectExistingFunctions, collectModuleInfo, createTempBallerinaDir, createTempFileAndGenerateMetadata, getFunctionDefinitionFromSyntaxTree, getUniqueFunctionFilePaths, prepareMappingContext, generateInlineMappingsSource, generateTypesFromContext, repairCodeAndGetUpdatedContent, extractImports, generateDataMapperModel, determineCustomFunctionsPath, generateMappings, getCustomFunctionsContent, repairAndCheckDiagnostics } from "../../dataMapping"; +import { addCheckExpressionErrors } from "../../../../../src/rpc-managers/ai-panel/repair-utils"; +import { BiDiagramRpcManager, getBallerinaFiles } from "../../../../../src/rpc-managers/bi-diagram/rpc-manager"; +import { updateSourceCode } from "../../../../../src/utils/source-utils"; +import { StateMachine } from "../../../../stateMachine"; +import { extractVariableDefinitionSource, getHasStopped, setHasStopped } from "../../../../../src/rpc-managers/data-mapper/utils"; +import { commands, Uri, window } from "vscode"; +import { CLOSE_AI_PANEL_COMMAND, OPEN_AI_PANEL_COMMAND } from "../../constants"; +import path from "path"; +import { URI } from "vscode-uri"; +import fs from 'fs'; +import { writeBallerinaFileDidOpenTemp } from "../../../../../src/utils/modification"; + +const NO_MAPPINGS_GENERATED_WARNING = `**No Relevant Mappings Generated**\n\n` + + `The AI was unable to identify compatible field mappings between the input and output structures.\n\n` + + `**Suggestions:**\n` + + `- Check if input and output record structures are correct\n` + + `- Try providing mapping hints or examples\n`; // ============================================================================= -// UTILITY FUNCTIONS FOR SCHEMA PROCESSING +// ENHANCED MAIN ORCHESTRATOR FUNCTION // ============================================================================= -/** - * Finds a schema type by path in the input schemas array - */ +// Generates AI-powered data mappings with retry logic for handling failures +async function generateAIPoweredDataMappings(dataMapperModelResponse: DataMapperModelResponse): Promise { + if (!dataMapperModelResponse.mappingsModel) { + throw new Error("Mappings model is required in the data mapper response"); + } + + const maxRetries = 3; + let lastError: Error; -class IOTypeVisitorImpl implements IOTypeVisitor { - visitIOType(ioType: IOType, context: VisitorContext): IOType | null { - if (ioType.id === context.targetPath) { - context.found = ioType; - return this.isContainerWithRecordFields(ioType) ? null : ioType; + for (let attempt = 0; attempt < maxRetries; attempt++) { + if (attempt > 0) { + console.debug("Retrying to generate mappings for the payload."); } - // Visit all child types - const childTypes = [ - ...(ioType.fields || []), - ...(ioType.members || []), - ...(ioType.member ? [ioType.member] : []) - ]; + try { + const mappingsModel = dataMapperModelResponse.mappingsModel as DMModel; + const existingMappings = mappingsModel.mappings; + const userProvidedMappingHints = mappingsModel.mapping_fields || {}; + const existingSubMappings = mappingsModel.subMappings as Mapping[] || []; - for (const child of childTypes) { - const result = this.visitIOType(child, context); - if (result) { return result; } - } + if (!mappingsModel.inputs || !mappingsModel.output) { + throw new Error("Mappings model must contain both inputs and output fields"); + } - return null; - } + // Extract only inputs, output, and refs from mappingsModel + const dataModelStructure: DataModelStructure = { + inputs: mappingsModel.inputs, + output: mappingsModel.output, + refs: mappingsModel.refs + }; - private isContainerWithRecordFields(ioType: IOType): boolean { - return this.hasRecordFields(ioType); - } + const aiGeneratedMappings = await generateAIMappings( + dataModelStructure, + existingMappings, + userProvidedMappingHints, + existingSubMappings + ); - private hasRecordFields(type: IOType): boolean { - if (!type) { return false; } - - // Direct record with fields - if (type.kind === TypeKind.Record && type.fields?.length) { - return true; - } - - // Array containing records - if (type.kind === TypeKind.Array) { - return this.hasRecordFields(type.member); - } - - // Union containing records - if (type.kind === TypeKind.Union && type.members?.length) { - return type.members.some(member => this.hasRecordFields(member)); + if (Object.keys(aiGeneratedMappings).length === 0) { + throw new Error("No valid fields were identified for mapping between the given input and output records."); + } + + return { mappings: aiGeneratedMappings }; + + } catch (error) { + console.error(`Error occurred while generating mappings: ${error}`); + lastError = error as Error; } - - return false; } + + throw lastError!; } +// Calls Claude AI to generate mappings based on data model, user mappings, and mapping hints +async function generateAIMappings( + dataModelStructure: DataModelStructure, + existingUserMappings: Mapping[], + userProvidedMappingHints: { [key: string]: MappingFields }, + existingSubMappings: Mapping[] +): Promise { + if (!dataModelStructure.inputs || !dataModelStructure.output) { + throw new Error("Data model structure must contain inputs and output"); + } -function findSchemaTypeByPath(inputs: IOType[], path: string): IOType | null { - const context: VisitorContext = { - targetPath: path, - found: null - }; + // Build prompt for AI + const aiPrompt = getDataMappingPrompt( + JSON.stringify(dataModelStructure), + JSON.stringify(existingUserMappings || []), + JSON.stringify(userProvidedMappingHints || {}), + JSON.stringify(existingSubMappings || []) + ); - const visitor = new IOTypeVisitorImpl(); + const chatMessages: ModelMessage[] = [ + { role: "user", content: aiPrompt } + ]; - for (const inputSchema of inputs) { - const result = visitor.visitIOType(inputSchema, context); - if (result) { return result; } - } + try { + const { object } = await generateObject({ + model: await getAnthropicClient(ANTHROPIC_SONNET_4), + maxOutputTokens: 8192, + temperature: 0, + messages: chatMessages, + schema: GeneratedMappingSchema, + abortSignal: AIPanelAbortController.getInstance().signal, + }); - return null; + const aiGeneratedMappings = object.generatedMappings as Mapping[]; + return aiGeneratedMappings; + } catch (error) { + console.error("Failed to parse response:", error); + throw new Error(`Failed to parse mapping response: ${error}`); + } } -/** - * Removes array indices from path to normalize field paths - */ -function removeArrayIndicesFromPath(path: string): string { - const pathParts = path.split('.'); - const cleanParts: string[] = []; +// Uses Claude AI to repair Ballerina source files based on diagnostics and import information +async function repairBallerinaCode( + filesToRepair: SourceFile[], + compilationDiagnostics: DiagnosticList, + availableImports: ImportInfo[] +): Promise { + if (!filesToRepair || filesToRepair.length === 0) { + throw new Error("Source files to repair are required and cannot be empty"); + } - for (const part of pathParts) { - // Skip numeric indices - if (!isNaN(parseInt(part))) { - continue; - } - cleanParts.push(part); + if (!compilationDiagnostics) { + throw new Error("Compilation diagnostics are required for code repair"); } - - return cleanParts.join('.'); -} -/** - * Removes output record prefix from field name - */ -function removeOutputRecordPrefix(fieldName: string, output: IOType): string { - const outputRecordName = output.name; - if (outputRecordName) { - const prefix = outputRecordName + "."; - if (fieldName.startsWith(prefix)) { - return fieldName.substring(prefix.length); - } + // Build repair prompt + const codeRepairPrompt = getBallerinaCodeRepairPrompt( + JSON.stringify(filesToRepair), + JSON.stringify(compilationDiagnostics), + JSON.stringify(availableImports || []) + ); + + const chatMessages: CoreMessage[] = [ + { role: "user", content: codeRepairPrompt } + ]; + + try { + const { object } = await generateObject({ + model: await getAnthropicClient(ANTHROPIC_SONNET_4), + maxOutputTokens: 8192, + temperature: 0, + messages: chatMessages, + schema: RepairedSourceFilesSchema, + abortSignal: AIPanelAbortController.getInstance().signal, + }); + + return object.repairedFiles as SourceFile[]; + } catch (error) { + console.error("Failed to parse response:", error); + throw new Error(`Failed to parse repaired files response: ${error}`); } - return fieldName; } // ============================================================================= -// MAPPING EVALUATION FUNCTIONS +// MAIN EXPORT FUNCTION // ============================================================================= -/** - * Main function to evaluate mappings with enhanced schema support - */ -async function evaluateMappings( - path: string[], - llmGeneratedMappings: AIDataMappings, - initialRecords: DataMappingRequest -): Promise { - if (isMapping(llmGeneratedMappings)) { - return await processMappingOperation(path, llmGeneratedMappings, initialRecords); - } else { - return await processNestedMappings(path, llmGeneratedMappings as { [key: string]: AIDataMappings }, initialRecords); +// Main entry point for generating automatic data mappings from data mapper model +export async function generateAutoMappings(dataMapperModelResponse?: DataMapperModelResponse): Promise { + if (!dataMapperModelResponse) { + throw new Error("Data mapper model response is required for generating auto mappings"); } -} - -/** - * Processes individual mapping operations with schema validation - */ -async function processMappingOperation( - path: string[], - llmGeneratedMappings: Mapping, - initialRecords: DataMappingRequest -): Promise { try { - const operationRecord = llmGeneratedMappings.OPERATION; - const parametersTypes: { [key: string]: ParameterMetadata } = {}; - let validParameters = false; + const mappingResponse: DatamapperResponse = await generateAIPoweredDataMappings(dataMapperModelResponse); + return mappingResponse.mappings; + } catch (error) { + console.error(`Error generating auto mappings: ${error}`); + throw error; + } +} - for (const subKey of Object.keys(operationRecord)) { - if (subKey === NAME) { - continue; - } - - const subPathString = operationRecord[subKey as keyof MappingOperation] as string; - if (!subPathString) { - continue; - } - - const operationName = operationRecord.NAME; - const inputType = findSchemaTypeByPath(initialRecords.input, subPathString); - if (!inputType) { - continue; - } +// Generates repaired Ballerina code by fixing diagnostics with retry logic +export async function generateRepairCode(codeRepairRequest?: repairCodeRequest): Promise { + if (!codeRepairRequest) { + throw new Error("Code repair request is required for generating repair code"); + } - const fieldMetadata = getFieldMetadataFromSchemaType(inputType, subKey, operationName); - if (!fieldMetadata) { - continue; - } + const maxRetries = 3; + let attemptCount = 0; + let lastError: Error; - parametersTypes[subKey] = { - type: fieldMetadata.type, - input: subPathString, - optional: fieldMetadata.optional, - nullable: fieldMetadata.nullable - }; - validParameters = true; + while (attemptCount < maxRetries) { + if (attemptCount > 0) { + console.debug("Retrying to generate repair code for the payload."); } - if (validParameters) { - const outputType = getOutputFieldMetadata(initialRecords.output, path); - if (!outputType) { - return null; + try { + // Generate AI-powered repaired source files using Claude + const aiRepairedFiles = await repairBallerinaCode(codeRepairRequest.sourceFiles, codeRepairRequest.diagnostics, codeRepairRequest.imports); + + if (!aiRepairedFiles || aiRepairedFiles.length === 0) { + const error = new Error("No repaired files were generated. Unable to fix the provided source code."); + lastError = error; + attemptCount += 1; + continue; } - - const mapping = validateMappingOperation( - operationRecord, - parametersTypes, - outputType, - path[path.length - 1], - initialRecords.input - ); - return mapping; - } - return null; - } catch (error) { - console.error('Error processing mapping operation:', error); - return null; - } -} -/** - * Processes nested mapping structures - */ -async function processNestedMappings( - path: string[], - llmGeneratedMappings: { [key: string]: AIDataMappings }, - initialRecords: DataMappingRequest -): Promise { - const returnRec: { [key: string]: MappingJson } = {}; - - for (const [key, value] of Object.entries(llmGeneratedMappings)) { - if (value === null || value === undefined) { + return { repairedFiles: aiRepairedFiles }; + + } catch (error) { + console.error(`Error occurred while generating repaired code: ${error}`); + lastError = error as Error; + attemptCount += 1; continue; } - - const newPath = [...path]; - let cleanKey = removeOutputRecordPrefix(key, initialRecords.output); - newPath.push(key); - - const temporaryRecord = await evaluateMappings(newPath, value, initialRecords); - if (temporaryRecord) { - if (isMappingRecord(temporaryRecord) || - (typeof temporaryRecord === 'object' && Object.keys(temporaryRecord).length > 0)) { - returnRec[removeArrayIndicesFromPath(cleanKey)] = temporaryRecord; - } - } } - return convertFlatToNestedMap(returnRec); + throw lastError!; } // ============================================================================= -// MAPPING OPERATION VALIDATION +// MAPPING CODE GENERATION WITH EVENT HANDLERS // ============================================================================= -/** - * Validates mapping operations with enhanced error handling - */ -function validateMappingOperation( - mapping: MappingOperation, - inputType: { [key: string]: ParameterMetadata }, - outputType: FieldMetadata, - name: string, - inputs: IOType[] -): MappingJson | null { - const operation = mapping.NAME; - // STEP 1: Verify operation exists in operations database - const op = operationsTable.get(operation); - - if (!op) { - return null; +// Core mapping code generation function that emits events +export async function generateMappingCodeCore(mappingRequest: ProcessMappingParametersRequest, eventHandler: CopilotEventHandler): Promise { + if (!mappingRequest.parameters) { + throw new Error("Parameters are required in the mapping request"); } - switch (op.name) { - // STEP 2: Validate DIRECT mapping operation - case DIRECT: { - const param = inputType[PARAMETER_1]; - if (!param) { - return null; - } - - if (!findSchemaTypeByPath(inputs, param.input)) { - throw new Error(`Input path not found for DIRECT operation: ${param.input}`); - } - - return { - operation: DIRECT, - targetType: outputType.type, - parameters: [removeArrayIndicesFromPath(param.input)] - }; - } - // STEP 3: Validate LENGTH operation - case LENGTH: { - const param = inputType[PARAMETER_1]; - if (!param) { - throw new Error("Parameter 1 not found in input type for LENGTH operation"); - } - - if (!(outputType.type === "int" || outputType.type === "int|()")) { - throw new Error("Invalid output type for LENGTH operation"); - } - - if (!findSchemaTypeByPath(inputs, param.input)) { - throw new Error(`Input path not found for LENGTH operation: ${param.input}`); - } - - return { - operation: LENGTH, - targetType: outputType.type, - parameters: [removeArrayIndicesFromPath(param.input)] - }; + if (!mappingRequest.parameters.functionName) { + throw new Error("Function name is required in the mapping parameters"); + } + + // Initialize generation process + eventHandler({ type: "start" }); + eventHandler({ type: "content_block", content: "Building the transformation logic using your provided data structures and mapping hints\n\n" }); + eventHandler({ type: "content_block", content: "Reading project files and collecting imports..." }); + let assistantResponse: string = ""; + const biDiagramRpcManager = new BiDiagramRpcManager(); + const langClient = StateMachine.langClient(); + const context = StateMachine.context(); + const projectRoot = context.projectPath; + + const targetFunctionName = mappingRequest.parameters.functionName; + + const [projectImports, currentActiveFile, projectComponents] = await Promise.all([ + collectAllImportsFromProject(), + getCurrentActiveFileName(), + biDiagramRpcManager.getProjectComponents(), + langClient + ]); + + const allImportStatements = projectImports.imports.flatMap(file => file.statements || []); + + // Remove duplicates based on moduleName + const uniqueImportStatements = Array.from( + new Map(allImportStatements.map(imp => [imp.moduleName, imp])).values() + ); + + const moduleInfoList = collectModuleInfo(projectComponents); + const moduleDirectoryMap = new Map(); + + for (const moduleInfo of moduleInfoList) { + const moduleDirectoryType = getModuleDirectory({ + moduleName: moduleInfo.moduleName, + filePath: moduleInfo.packageFilePath + }); + moduleDirectoryMap.set(moduleInfo.moduleName, moduleDirectoryType); + } + + const recordTypeMap = buildRecordMap(projectComponents, moduleDirectoryMap); + const existingFunctionsInProject = collectExistingFunctions(projectComponents, moduleDirectoryMap); + + const functionFileContents = new Map(); + if (existingFunctionsInProject.length > 0) { + const uniqueFunctionFilePaths = getUniqueFunctionFilePaths(existingFunctionsInProject); + const fileContentResults = await Promise.all( + uniqueFunctionFilePaths.map(async (filePath) => { + const projectFsPath = URI.parse(filePath).fsPath; + const fileContent = await fs.promises.readFile(projectFsPath, "utf-8"); + return { filePath, content: fileContent }; + }) + ); + fileContentResults.forEach(({ filePath, content }) => { + functionFileContents.set(filePath, content); + }); + } + + const mappingContext = await prepareMappingContext( + mappingRequest.parameters, + recordTypeMap, + existingFunctionsInProject, + uniqueImportStatements, + functionFileContents, + currentActiveFile, + langClient, + projectRoot + ); + + const tempDirectory = await createTempBallerinaDir(); + const doesFunctionAlreadyExist = existingFunctionsInProject.some(func => func.name === targetFunctionName); + + const tempFileMetadata = await createTempFileAndGenerateMetadata({ + tempDir: tempDirectory, + filePath: mappingContext.filePath, + metadata: mappingRequest.metadata, + inputs: mappingContext.mappingDetails.inputs, + output: mappingContext.mappingDetails.output, + functionName: targetFunctionName, + inputNames: mappingContext.mappingDetails.inputNames, + imports: mappingContext.mappingDetails.imports, + hasMatchingFunction: doesFunctionAlreadyExist, + }, langClient, context); + + const allMappingsRequest = await generateMappings({ + metadata: tempFileMetadata, + attachments: mappingRequest.attachments + }, context, eventHandler); + + // Check if no mappings were generated + if (!allMappingsRequest.mappings || allMappingsRequest.mappings.length === 0) { + eventHandler({ type: "content_block", content: NO_MAPPINGS_GENERATED_WARNING }); + eventHandler({ type: "stop", command: Command.DataMap }); + return; + } + + const sourceCodeResponse = await getAllDataMapperSource(allMappingsRequest); + + await updateSourceCode({ textEdits: sourceCodeResponse.textEdits, skipPayloadCheck: true }); + await new Promise((resolve) => setTimeout(resolve, 100)); + + let customFunctionsTargetPath: string; + let customFunctionsFileName: string; + + if (allMappingsRequest.customFunctionsFilePath) { + const absoluteCustomFunctionsPath = determineCustomFunctionsPath(projectRoot, currentActiveFile); + customFunctionsFileName = path.basename(absoluteCustomFunctionsPath); + + // For workspace projects, make path relative to workspace root + const workspacePath = context.workspacePath; + if (workspacePath) { + customFunctionsTargetPath = path.relative(workspacePath, absoluteCustomFunctionsPath); + } else { + // Normal project: use relative path from project root + customFunctionsTargetPath = path.relative(projectRoot, absoluteCustomFunctionsPath); } - // STEP 4: Validate SPLIT operation - case SPLIT: { - const paramOne = inputType[PARAMETER_1]; - const paramTwo = mapping.PARAMETER_2; - - if (!paramOne || !paramTwo) { - throw new Error("Required parameters not found in input type for SPLIT operation"); - } - - if (paramOne.type !== "regex" || - !( - outputType.type === "string[]" || - outputType.type === "string[]|()" || - outputType.type === "(string|())[]" || - outputType.type === "(string|())[]|()" - ) - ) { - throw new Error("Invalid input or output type for SPLIT operation"); - } - - if (!findSchemaTypeByPath(inputs, paramOne.input)) { - throw new Error(`Input path not found for SPLIT operation: ${paramOne.input}`); - } - - return { - operation: SPLIT, - targetType: outputType.type, - parameters: [paramOne.input, paramTwo] - }; + } + + // Check if mappings file and custom functions file are the same + const mainFilePath = tempFileMetadata.codeData.lineRange.fileName; + const isSameFile = customFunctionsTargetPath && + path.resolve(mainFilePath) === path.resolve(path.join(tempDirectory, customFunctionsFileName)); + + let codeRepairResult: CodeRepairResult; + const customContent = await getCustomFunctionsContent(allMappingsRequest.customFunctionsFilePath); + eventHandler({ type: "content_block", content: "\nRepairing generated code..." }); + + if (isSameFile) { + const mainContent = fs.readFileSync(mainFilePath, 'utf8'); + + if (customContent) { + // Merge: main content + custom functions + const mergedContent = `${mainContent}\n\n${customContent}`; + fs.writeFileSync(mainFilePath, mergedContent, 'utf8'); } - default: - return null; + codeRepairResult = await repairCodeAndGetUpdatedContent({ + tempFileMetadata, + customFunctionsFilePath: undefined, + imports: uniqueImportStatements, + tempDir: tempDirectory + }, langClient, projectRoot); + + codeRepairResult.customFunctionsContent = ''; + } else { + // Files are different, repair them separately + codeRepairResult = await repairCodeAndGetUpdatedContent({ + tempFileMetadata, + customFunctionsFilePath: allMappingsRequest.customFunctionsFilePath, + imports: uniqueImportStatements, + tempDir: tempDirectory + }, langClient, projectRoot); } -} -// ============================================================================= -// FIELD METADATA EXTRACTION FUNCTIONS -// ============================================================================= + // Handle check expression errors and repair diagnostics + const filePaths = await handleCheckExpressionErrorsAndRepair( + langClient, + projectRoot, + tempFileMetadata, + allMappingsRequest, + tempDirectory, + isSameFile, + codeRepairResult + ); + + // Remove compilation error mappings + const { updatedMainContent, updatedCustomContent } = await removeCompilationErrorMappingFields( + langClient, + projectRoot, + mainFilePath, + targetFunctionName, + allMappingsRequest, + tempDirectory, + filePaths, + isSameFile + ); + + let generatedFunctionDefinition = await getFunctionDefinitionFromSyntaxTree( + langClient, + tempFileMetadata.codeData.lineRange.fileName, + targetFunctionName + ); + await new Promise((resolve) => setTimeout(resolve, 100)); + + // For workspace projects, compute relative file path from workspace root + const workspacePath = context.workspacePath; + let targetFilePath = mappingContext.filePath; + + if (workspacePath) { + // Workspace project: need to include package path prefix (e.g., "foo/mappings.bal") + const absoluteFilePath = path.join(projectRoot, mappingContext.filePath); + targetFilePath = path.relative(workspacePath, absoluteFilePath); + } -/** - * Extracts field metadata from schema type with enhanced type checking - */ -function getFieldMetadataFromSchemaType( - inputType: IOType, - paramName?: string, - operationName?: string -): FieldMetadata | null { - if (paramName && operationName) { - if (operationName === SPLIT && paramName === PARAMETER_1) { - return { type: "regex", optional: inputType.optional, nullable: false }; + const generatedSourceFiles = buildMappingFileArray( + targetFilePath, + updatedMainContent, + customFunctionsTargetPath, + updatedCustomContent, + ); + + // Build assistant response + assistantResponse = `The generated data mapping details are as follows:\n`; + if (mappingRequest.parameters.inputRecord.length === 1) { + assistantResponse += `- **Input Record**: ${mappingContext.mappingDetails.inputParams[0]}\n`; + } else { + assistantResponse += `- **Input Records**: ${mappingContext.mappingDetails.inputParams.join(", ")}\n`; + } + assistantResponse += `- **Output Record**: ${mappingContext.mappingDetails.outputParam}\n`; + assistantResponse += `- **Function Name**: ${targetFunctionName}\n`; + + if (mappingRequest.attachments.length > 0) { + const attachmentNames = []; + for (const att of (mappingRequest.attachments)) { + attachmentNames.push(att.name); } + assistantResponse += `- **Attachments**: ${attachmentNames.join(", ")}\n`; + } + + if (tempFileMetadata.mappingsModel.mappings.length > 0) { + assistantResponse += `\n**Note**: When you click **Add to Integration**, it will override your existing mappings.\n`; } - const kind = inputType.kind; - const typeName = inputType.typeName; + if (isSameFile) { + const mergedContent = `${generatedFunctionDefinition.source}\n${customContent}`; + assistantResponse += `\n\`\`\`ballerina\n${mergedContent}\n\`\`\`\n`; + } else { + assistantResponse += `\n\`\`\`ballerina\n${generatedFunctionDefinition.source}\n\`\`\`\n`; - if (!kind || !typeName) { - throw new Error("Missing kind or typeName in SchemaType"); + if (updatedCustomContent) { + assistantResponse += `\n\`\`\`ballerina\n${updatedCustomContent}\n\`\`\`\n`; + } } - const typeString = typeName; - const isOptional = inputType.optional; - let isNullable = false; + eventHandler({ type: "generated_sources", fileArray: generatedSourceFiles }); + eventHandler({ type: "content_block", content: assistantResponse }); + eventHandler({ type: "stop", command: Command.DataMap }); +} - // Check if type is nullable (contains ? or ()) - if (typeName.includes("?") || typeName.includes("()")) { - isNullable = true; +// Main public function that uses the default event handler for mapping generation +export async function generateMappingCode(mappingRequest: ProcessMappingParametersRequest): Promise { + const eventHandler = createWebviewEventHandler(Command.DataMap); + try { + await generateMappingCodeCore(mappingRequest, eventHandler); + } catch (error) { + console.error("Error during mapping code generation:", error); + eventHandler({ type: "error", content: getErrorMessage(error) }); + throw error; } +} + +async function collectAllImportsFromProject(): Promise { + const projectPath = StateMachine.context().projectPath; - return { - type: typeString, - optional: isOptional, - nullable: isNullable + const ballerinaSourceFiles = await getBallerinaFiles(Uri.file(projectPath).fsPath); + + const importStatements: ImportStatements[] = []; + + for (const ballerinaFile of ballerinaSourceFiles) { + const sourceFileContent = fs.readFileSync(ballerinaFile, "utf8"); + const extractedImports = extractImports(sourceFileContent, ballerinaFile); + importStatements.push(extractedImports); + } + + return { + projectPath: projectPath, + imports: importStatements, }; } -/** - * Gets output field metadata from schema type - */ -function getOutputFieldMetadata(output: IOType, path: string[]): FieldMetadata | null { - let current = output; +function getCurrentActiveFileName(): string { + const activeTabGroup = window.tabGroups.all.find(group => { + return group.activeTab.isActive && group.activeTab?.input; + }); + + if (activeTabGroup && activeTabGroup.activeTab && activeTabGroup.activeTab.input) { + const activeTabInput = activeTabGroup.activeTab.input as { uri: { fsPath: string } }; - for (const pathSegment of path) { - const found = findFieldInSchemaType(current, pathSegment); - if (!found) { - return null; + if (activeTabInput.uri) { + const activeFileUri = activeTabInput.uri; + const activeFileName = activeFileUri.fsPath.split('/').pop(); + return activeFileName || ''; } - current = found; } +} + +function getModuleDirectory(params: GetModuleDirParams): string { + const { filePath, moduleName } = params; + const generatedPath = path.join(filePath, "generated", moduleName); + if (fs.existsSync(generatedPath) && fs.statSync(generatedPath).isDirectory()) { + return "generated"; + } else { + return "modules"; + } +} + +export async function getAllDataMapperSource( + mappingSourceRequest: AllDataMapperSourceRequest +): Promise { + setHasStopped(false); + + const individualSourceRequests = buildSourceRequests(mappingSourceRequest); + const sourceResponses = await processSourceRequests(individualSourceRequests); + const consolidatedTextEdits = consolidateTextEdits(sourceResponses, mappingSourceRequest.mappings.length); + + return { textEdits: consolidatedTextEdits }; +} + - return getFieldMetadataFromSchemaType(current); +// Builds individual source requests from the provided parameters by creating a request for each mapping +export function buildSourceRequests(allMappingsRequest: AllDataMapperSourceRequest): DataMapperSourceRequest[] { + return allMappingsRequest.mappings.map(singleMapping => ({ + filePath: allMappingsRequest.filePath, + codedata: allMappingsRequest.codedata, + varName: allMappingsRequest.varName, + targetField: allMappingsRequest.targetField, + mapping: singleMapping + })); } -/** - * Finds a field within a schema type structure - */ -function findFieldInSchemaType(schemaType: IOType, fieldId: string): IOType | null { - const fields = schemaType.fields || schemaType.members; - if (fields && Array.isArray(fields)) { - for (const field of fields) { - if (field.id === fieldId || field.name === fieldId) { - return field; +// Processes source requests with cancellation support and error handling for each request +export async function processSourceRequests(sourceRequests: DataMapperSourceRequest[]): Promise[]> { + return Promise.allSettled( + sourceRequests.map(async (singleRequest) => { + if (getHasStopped()) { + throw new Error("Operation was stopped"); } - - const found = findFieldInSchemaType(field, fieldId); - if (found) { - return found; + try { + return await StateMachine.langClient().getDataMapperSource(singleRequest); + } catch (error) { + console.error("Error in getDataMapperSource:", error); + throw error; } + }) + ); +} + +// Consolidates text edits from multiple source responses into a single optimized collection +export function consolidateTextEdits( + sourceResponses: PromiseSettledResult[], + totalMappingCount: number +): { [key: string]: TextEdit[] } { + const allTextEditsByFile: { [key: string]: TextEdit[] } = {}; + + sourceResponses.forEach((result, index) => { + if (result.status === 'fulfilled') { + console.log(`>>> Completed mapping ${index + 1}/${totalMappingCount}`); + mergeTextEdits(allTextEditsByFile, result.value.textEdits); + } else { + console.error(`>>> Failed mapping ${index + 1}:`, result.reason); } - } + }); + + return optimizeTextEdits(allTextEditsByFile); +} - const member = schemaType.member; - if (member) { - if (member.id === fieldId || member.name === fieldId) { - return member; +// Merges new text edits into the existing collection, grouping by file path +export function mergeTextEdits( + existingTextEdits: { [key: string]: TextEdit[] }, + newTextEditsToMerge?: { [key: string]: TextEdit[] } +): void { + if (!newTextEditsToMerge) { return; } + + Object.entries(newTextEditsToMerge).forEach(([filePath, editsForFile]) => { + if (!existingTextEdits[filePath]) { + existingTextEdits[filePath] = []; } - return findFieldInSchemaType(member, fieldId); - } + existingTextEdits[filePath].push(...editsForFile); + }); +} - return null; +// Optimizes text edits by sorting and combining them into single edits per file +export function optimizeTextEdits(allTextEditsByFile: { [key: string]: TextEdit[] }): { [key: string]: TextEdit[] } { + const optimizedEditsByFile: { [key: string]: TextEdit[] } = {}; + + Object.entries(allTextEditsByFile).forEach(([filePath, editsForFile]) => { + if (editsForFile.length === 0) { return; } + + const sortedEditsForFile = sortTextEdits(editsForFile); + const combinedEditForFile = combineTextEdits(sortedEditsForFile); + + optimizedEditsByFile[filePath] = [combinedEditForFile]; + }); + + return optimizedEditsByFile; } -/** - * Converts flat mapping structure to nested format - */ -function convertFlatToNestedMap(flatMap: { [key: string]: MappingJson }): { [key: string]: MappingJson } { - const nested: { [key: string]: MappingJson } = {}; - - for (const [flatKey, value] of Object.entries(flatMap)) { - const parts = flatKey.split('.'); - let current = nested; - - for (let i = 0; i < parts.length - 1; i++) { - const part = parts[i]; - if (!(part in current)) { - current[part] = {}; - } else if (typeof current[part] !== 'object' || current[part] === null) { - current[part] = {}; - } - current = current[part] as { [key: string]: MappingJson }; +// Sorts text edits by line number and character position to ensure proper ordering +export function sortTextEdits(textEdits: TextEdit[]): TextEdit[] { + return textEdits.sort((editA, editB) => { + if (editA.range.start.line !== editB.range.start.line) { + return editA.range.start.line - editB.range.start.line; } + return editA.range.start.character - editB.range.start.character; + }); +} - const lastPart = parts[parts.length - 1]; - current[lastPart] = value; - } - - return nested; +// Combines multiple text edits into a single edit with comma-separated content +export function combineTextEdits(sortedTextEdits: TextEdit[]): TextEdit { + const formattedTextArray = sortedTextEdits.map((singleEdit, editIndex) => { + const editContent = singleEdit.newText.trim(); + return editIndex < sortedTextEdits.length - 1 ? `${editContent},` : editContent; + }); + + return { + range: sortedTextEdits[0].range, + newText: formattedTextArray.join('\n').trimStart() + }; } // ============================================================================= -// ENHANCED MAIN ORCHESTRATOR FUNCTION +// INLINE MAPPING CODE GENERATION WITH EVENT HANDLERS // ============================================================================= -/** - * Enhanced main function for AI-powered data mapping generation with schema support - */ -async function mapData(payload: DataMapperModelResponse): Promise { - const maxRetries = 3; - let retries = 0; - let lastError: Error; +// Core inline mapping code generation function that emits events and generates mappings inline +export async function generateInlineMappingCodeCore(inlineMappingRequest: MetadataWithAttachments, eventHandler: CopilotEventHandler): Promise { + if (!inlineMappingRequest.metadata) { + throw new Error("Metadata is required in the inline mapping request"); + } - while (retries < maxRetries) { - if (retries > 0) { - console.debug("Retrying to generate mappings for the payload."); - } + if (!inlineMappingRequest.metadata.codeData) { + throw new Error("Code data is required in the metadata"); + } - try { - // Extract existing mapping field hints - const mappingFields: { [key: string]: MappingFields } = payload.mappingsModel.mapping_fields || {}; + // Initialize generation process + eventHandler({ type: "start" }); + eventHandler({ type: "content_block", content: "Building the transformation logic using your provided data structures and mapping hints\n\n" }); + eventHandler({ type: "content_block", content: "Reading project files and collecting imports..." }); + let assistantResponse: string = ""; + const projectImports = await collectAllImportsFromProject(); + const allImportStatements = projectImports.imports.flatMap(file => file.statements || []); + + // Remove duplicates based on moduleName + const uniqueImportStatements = Array.from( + new Map(allImportStatements.map(imp => [imp.moduleName, imp])).values() + ); - // STEP 1: Generate AI-powered mappings using Claude - const generatedMappings = await getMappings((payload.mappingsModel as ExpandedDMModel)?.inputs, (payload.mappingsModel as ExpandedDMModel)?.output, payload.mappingsModel.mappings, mappingFields); + let targetFileName = inlineMappingRequest.metadata.codeData.lineRange.fileName; - if (Object.keys(generatedMappings).length === 0) { - const error = new Error("No valid fields were identified for mapping between the given input and output records."); - lastError = error; - retries += 1; - continue; - } + if (!targetFileName) { + throw new Error("Target file name could not be determined from code data"); + } - // STEP 2: Prepare inputs for validation - const inputs: DataMappingRequest = { - input: (payload.mappingsModel as ExpandedDMModel)?.inputs, - output: (payload.mappingsModel as ExpandedDMModel)?.output - }; + const langClient = StateMachine.langClient(); + const context = StateMachine.context(); + const projectRoot = context.projectPath; - // STEP 3: Validate and process AI-generated mappings with schema - const evaluateMappingsResult = await evaluateMappings([], generatedMappings, inputs); + const inlineMappingsResult: InlineMappingsSourceResult = + await generateInlineMappingsSource(inlineMappingRequest, langClient, context, eventHandler); - if (evaluateMappingsResult) { - // STEP 4: Extract and structure the validated mappings - const mappings = extractMappings(evaluateMappingsResult); - return mappings; - } else { - throw new Error("Failed to generate mappings for the payload."); - } - } catch (error) { - console.error(`Error occurred while generating mappings: ${error}`); - lastError = error as Error; - retries += 1; - continue; + // Check if no mappings were generated + if (!inlineMappingsResult.allMappingsRequest.mappings || inlineMappingsResult.allMappingsRequest.mappings.length === 0) { + eventHandler({ type: "content_block", content: NO_MAPPINGS_GENERATED_WARNING }); + eventHandler({ type: "stop", command: Command.DataMap }); + return; + } + + await updateSourceCode({ textEdits: inlineMappingsResult.sourceResponse.textEdits, skipPayloadCheck: true }); + await new Promise((resolve) => setTimeout(resolve, 100)); + + let customFunctionsTargetPath: string | undefined; + let customFunctionsFileName: string | undefined; + let codeToDisplay: string; + + if (inlineMappingsResult.allMappingsRequest.customFunctionsFilePath) { + const absoluteCustomFunctionsPath = determineCustomFunctionsPath(projectRoot, targetFileName); + customFunctionsFileName = path.basename(absoluteCustomFunctionsPath); + + // For workspace projects, make path relative to workspace root + const workspacePath = context.workspacePath; + if (workspacePath) { + customFunctionsTargetPath = path.relative(workspacePath, absoluteCustomFunctionsPath); + } else { + // Normal project: use relative path from project root + customFunctionsTargetPath = path.relative(projectRoot, absoluteCustomFunctionsPath); } } - throw lastError; -} -// Import all existing functions from the original implementation -async function getMappings( - inputJsonRecord: IOType[], - outputJsonRecord: IOType, - userMappings: DataMappingResponse[], - mappingTips: { [key: string]: MappingFields } -): Promise { - const prompt = getDataMappingPrompt( - JSON.stringify(inputJsonRecord), - JSON.stringify(outputJsonRecord), - JSON.stringify(userMappings), - JSON.stringify(mappingTips) - ); + // Check if mappings file and custom functions file are the same + const mainFilePath = inlineMappingsResult.tempFileMetadata.codeData.lineRange.fileName; + const isSameFile = customFunctionsTargetPath && + path.resolve(mainFilePath) === path.resolve(path.join(inlineMappingsResult.tempDir, customFunctionsFileName)); - const messages: ModelMessage[] = [ - { role: "user", content: prompt } - ]; + let codeRepairResult: CodeRepairResult; + const customContent = await getCustomFunctionsContent(inlineMappingsResult.allMappingsRequest.customFunctionsFilePath); + eventHandler({ type: "content_block", content: "\nRepairing generated code..." }); - try { - const { object } = await generateObject({ - model: await getAnthropicClient(ANTHROPIC_SONNET_4), - maxOutputTokens: 4096, - temperature: 0, - messages: messages, - schema: MappingSchema, - abortSignal: AIPanelAbortController.getInstance().signal, - }); + if (isSameFile) { + const mainContent = fs.readFileSync(mainFilePath, 'utf8'); - const generatedMappings = object.generatedMappings as AIDataMappings; - return generatedMappings; - } catch (error) { - console.error("Failed to parse response:", error); - throw new Error(`Failed to parse mapping response: ${error}`); + if (customContent) { + // Merge: main content + custom functions + const mergedContent = `${mainContent}\n\n${customContent}`; + fs.writeFileSync(mainFilePath, mergedContent, 'utf8'); + } + + codeRepairResult = await repairCodeAndGetUpdatedContent({ + tempFileMetadata: inlineMappingsResult.tempFileMetadata, + customFunctionsFilePath: undefined, + imports: uniqueImportStatements, + tempDir: inlineMappingsResult.tempDir + }, langClient, projectRoot); + + codeRepairResult.customFunctionsContent = ''; + } else { + // Files are different, repair them separately + codeRepairResult = await repairCodeAndGetUpdatedContent({ + tempFileMetadata: inlineMappingsResult.tempFileMetadata, + customFunctionsFilePath: inlineMappingsResult.allMappingsRequest.customFunctionsFilePath, + tempDir: inlineMappingsResult.tempDir + }, langClient, projectRoot); } -} -function extractMappings(evaluateMappingsResult: MappingJson): DatamapperResponse { - const mappings: { [key: string]: MappingJson } = {}; + // For workspace projects, compute relative file path from workspace root + let targetFilePath = path.relative(projectRoot, context.documentUri); + const workspacePath = context.workspacePath; - if (isMappingRecord(evaluateMappingsResult)) { - throw new Error("EvaluateMappingsResult is a MappingRecord, expected map structure."); + if (workspacePath) { + // Workspace project: make path relative to workspace root (e.g., "foo/mappings.bal") + targetFilePath = path.relative(workspacePath, context.documentUri); } - if (typeof evaluateMappingsResult === "object" && evaluateMappingsResult !== null) { - for (const [key, value] of Object.entries(evaluateMappingsResult)) { - if (isMappingRecord(value)) { - mappings[key] = value; - } else if (typeof value === "object" && value !== null) { - const nestedMappingsResult = extractMappings(value as MappingJson); - mappings[key] = nestedMappingsResult.mappings; - } + const variableName = inlineMappingRequest.metadata.name || inlineMappingsResult.tempFileMetadata.name; + + // Handle check expression errors and repair diagnostics for inline mappings + const { inlineFilePaths, updatedCodeToDisplay } = await handleInlineCheckExpressionErrorsAndRepair( + langClient, + projectRoot, + inlineMappingsResult, + isSameFile, + codeRepairResult, + variableName + ); + + if (updatedCodeToDisplay) { + codeToDisplay = updatedCodeToDisplay; + } + + // Remove compilation error mappings for inline mappings + const { updatedMainContent, updatedCustomContent } = await removeInlineCompilationErrorMappingFields( + langClient, + projectRoot, + mainFilePath, + variableName, + inlineMappingsResult, + inlineFilePaths, + isSameFile + ); + + if (variableName) { + const extractedVariableDefinition = await extractVariableDefinitionSource( + mainFilePath, + inlineMappingsResult.tempFileMetadata.codeData, + variableName + ); + if (extractedVariableDefinition) { + codeToDisplay = extractedVariableDefinition; } } - return { mappings }; -} + const generatedSourceFiles = buildMappingFileArray( + context.documentUri, + updatedMainContent, + customFunctionsTargetPath, + updatedCustomContent, + ); -// ============================================================================= -// UTILITY FUNCTIONS -// ============================================================================= + // Build assistant response + assistantResponse = `Here are the data mappings:\n\n`; + if (inlineMappingRequest.attachments.length > 0) { + const attachmentNames = []; + for (const att of (inlineMappingRequest.attachments)) { + attachmentNames.push(att.name); + } + assistantResponse += `- **Attachments**: ${attachmentNames.join(", ")}\n`; + } + + if (inlineMappingRequest.metadata.mappingsModel.mappings.length > 0) { + assistantResponse += `\n**Note**: When you click **Add to Integration**, it will override your existing mappings.\n`; + } + + if (isSameFile) { + const mergedCodeDisplay = customContent ? `${codeToDisplay}\n${customContent}` : codeToDisplay; + assistantResponse += `\n\`\`\`ballerina\n${mergedCodeDisplay}\n\`\`\`\n`; + } else { + assistantResponse += `\n\`\`\`ballerina\n${codeToDisplay}\n\`\`\`\n`; -/** - * Type guard to check if value is a MappingRecord - */ -function isMappingRecord(value: any): value is MappingRecord { - return value && typeof value === "object" && "operation" in value && "targetType" in value && "parameters" in value; + if (updatedCustomContent) { + assistantResponse += `\n\`\`\`ballerina\n${updatedCustomContent}\n\`\`\`\n`; + } + } + + eventHandler({ type: "generated_sources", fileArray: generatedSourceFiles }); + eventHandler({ type: "content_block", content: assistantResponse }); + eventHandler({ type: "stop", command: Command.DataMap }); } -/** - * Type guard to check if value is a Mapping - */ -function isMapping(value: any): value is { OPERATION: MappingOperation } { - return value && typeof value === "object" && "OPERATION" in value; +// Main public function that uses the default event handler for inline mapping generation +export async function generateInlineMappingCode(inlineMappingRequest: MetadataWithAttachments): Promise { + const eventHandler = createWebviewEventHandler(Command.DataMap); + try { + await generateInlineMappingCodeCore(inlineMappingRequest, eventHandler); + } catch (error) { + console.error("Error during inline mapping code generation:", error); + eventHandler({ type: "error", content: getErrorMessage(error) }); + throw error; + } } // ============================================================================= -// MAIN EXPORT FUNCTION +// CONTEXT TYPE CREATION WITH EVENT HANDLERS // ============================================================================= -export async function generateAutoMappings(payload?: DataMapperModelResponse): Promise { - if (!payload) { - throw new Error("Payload is required for generating auto mappings"); +// Core context type creation function that emits events and generates Ballerina record types +export async function generateContextTypesCore(typeCreationRequest: ProcessContextTypeCreationRequest, eventHandler: CopilotEventHandler): Promise { + if (typeCreationRequest.attachments.length === 0) { + throw new Error("Attachments are required for type creation"); } + + // Initialize generation process + eventHandler({ type: "start" }); + let assistantResponse: string = ""; + try { - return await mapData(payload); + const biDiagramRpcManager = new BiDiagramRpcManager(); + const langClient = StateMachine.langClient(); + const context = StateMachine.context(); + const projectComponents = await biDiagramRpcManager.getProjectComponents(); + + // Generate types from context with validation + const { typesCode, filePath } = await generateTypesFromContext( + typeCreationRequest.attachments, + projectComponents, + langClient + ); + + // For workspace projects, compute relative file path from workspace root + const workspacePath = context.workspacePath; + const projectRoot = context.projectPath; + let targetFilePath = filePath; + + if (workspacePath && projectRoot) { + // Workspace project: need to include package path prefix (e.g., "foo/types.bal") + const absoluteFilePath = path.isAbsolute(filePath) ? filePath : path.join(projectRoot, filePath); + targetFilePath = path.relative(workspacePath, absoluteFilePath); + } + + // Build assistant response + const sourceAttachmentNames = typeCreationRequest.attachments.map(a => a.name).join(", "); + const fileText = typeCreationRequest.attachments.length === 1 ? "file" : "files"; + assistantResponse = `Types generated from the ${sourceAttachmentNames} ${fileText} shown below.\n`; + assistantResponse += `\n\`\`\`ballerina\n${typesCode}\n\`\`\`\n`; + + // Send assistant response through event handler + eventHandler({ type: "content_block", content: assistantResponse }); + eventHandler({ type: "stop", command: Command.TypeCreator }); } catch (error) { - console.error(`Error generating auto mappings: ${error}`); + console.error("Error during context type creation:", error); throw error; } } -/** - * Helper function to create a sample payload for testing - */ -export function createSamplePayload(): Payload { - return { - inputs: { - person: { - id: { type: "string", comment: "Unique identifier for the person" }, - firstName: { type: "string", comment: "First name of the person" }, - lastName: { type: "string", comment: "Last name of the person" }, - age: { type: "int", comment: "Age of the person" }, - country: { type: "string", comment: "Country of the person" }, - courses: { - id: { type: "string", comment: "Unique identifier for the course" }, - name: { type: "string", comment: "Name of the course" }, - credits: { type: "int", comment: "Credits of the course" }, - }, - }, - }, - output: { - id: { type: "string", comment: "Unique identifier for the student" }, - firstName: { type: "string", comment: "First name of the student" }, - age: { type: "int", comment: "Age of the student" }, - country: { type: "string", comment: "Country of the student" }, - courses: { - id: { type: "string", comment: "Unique identifier for the course" }, - name: { type: "string", comment: "Name of the course" }, - credits: { type: "int", comment: "Credits of the course" }, - }, - }, - inputMetadata: { - person: { - parameterType: "Person", - parameterName: "person", - isArrayType: false, - type: "record", - fields: { - id: { - type: "string", - typeInstance: "id", - typeName: "string", - nullable: false, - optional: false, - }, - firstName: { - type: "string", - typeInstance: "firstName", - typeName: "string", - nullable: false, - optional: false, - }, - lastName: { - type: "string", - typeInstance: "lastName", - typeName: "string", - nullable: false, - optional: false, - }, - age: { - type: "int", - typeInstance: "age", - typeName: "int", - nullable: false, - optional: false, - }, - country: { - type: "string", - typeInstance: "country", - typeName: "string", - nullable: false, - optional: false, - }, - courses: { - type: "record[]", - typeInstance: "courses", - typeName: "record[]", - nullable: false, - optional: false, - fields: { - id: { - type: "string", - typeInstance: "id", - typeName: "string", - nullable: false, - optional: false, - }, - name: { - type: "string", - typeInstance: "name", - typeName: "string", - nullable: false, - optional: false, - }, - credits: { - type: "int", - typeInstance: "credits", - typeName: "int", - nullable: false, - optional: false, - }, - }, - }, - }, - }, - }, - outputMetadata: { - id: { - type: "string", - typeInstance: "id", - typeName: "string", - nullable: false, - optional: false, - }, - firstName: { - type: "string", - typeInstance: "firstName", - typeName: "string", - nullable: false, - optional: false, - }, - age: { - type: "int", - typeInstance: "age", - typeName: "int", - nullable: false, - optional: false, - }, - country: { - type: "string", - typeInstance: "country", - typeName: "string", - nullable: false, - optional: false, - }, - courses: { - type: "record[]", - typeInstance: "courses", - typeName: "record[]", - nullable: false, - optional: false, - fields: { - id: { - type: "string", - typeInstance: "id", - typeName: "string", - nullable: false, - optional: false, - }, - name: { - type: "string", - typeInstance: "name", - typeName: "string", - nullable: false, - optional: false, - }, - credits: { - type: "int", - typeInstance: "credits", - typeName: "int", - nullable: false, - optional: false, - }, - }, - }, - }, +// Main public function that uses the default event handler for context type creation +export async function generateContextTypes(typeCreationRequest: ProcessContextTypeCreationRequest): Promise { + const eventHandler = createWebviewEventHandler(Command.TypeCreator); + try { + await generateContextTypesCore(typeCreationRequest, eventHandler); + } catch (error) { + console.error("Error during context type creation:", error); + eventHandler({ type: "error", content: getErrorMessage(error) }); + throw error; + } +} + +// Opens the AI panel with data mapper chat interface +export async function openChatWindowWithCommand(): Promise { + const langClient = StateMachine.langClient(); + const context = StateMachine.context(); + const model = await generateDataMapperModel({}, langClient, context); + + const { identifier, dataMapperMetadata } = context; + + // Automatically close and open AI mapping chat window with the generated model + commands.executeCommand(CLOSE_AI_PANEL_COMMAND); + commands.executeCommand(OPEN_AI_PANEL_COMMAND, { + type: 'command-template', + command: Command.DataMap, + templateId: identifier ? TemplateId.MappingsForFunction : TemplateId.InlineMappings, + ...(identifier && { params: { functionName: identifier } }), + metadata: { + ...dataMapperMetadata, + mappingsModel: model.mappingsModel as DMModel + } + }); +} + +// Removes mapping fields with compilation errors for inline mappings and reads updated content +async function removeInlineCompilationErrorMappingFields( + langClient: any, + projectRoot: string, + mainFilePath: string, + variableName: string, + inlineMappingsResult: InlineMappingsSourceResult, + inlineFilePaths: string[], + isSameFile: boolean +): Promise<{ updatedMainContent: string; updatedCustomContent: string }> { + // For inline mappings, we use the variable's location from the codedata + const updatedDataMapperMetadata: DataMapperModelRequest = { + filePath: mainFilePath, + codedata: inlineMappingsResult.allMappingsRequest.codedata, + targetField: variableName, + position: inlineMappingsResult.allMappingsRequest.codedata.lineRange.startLine }; + + // Get DM model with mappings to check for mapping-level diagnostics + const dataMapperModel = await langClient.getDataMapperMappings(updatedDataMapperMetadata) as DataMapperModelResponse; + const dmModel = dataMapperModel.mappingsModel as DMModel; + + // Check if any mappings have diagnostics + if (dmModel && dmModel.mappings && dmModel.mappings.length > 0) { + const mappingsWithDiagnostics = dmModel.mappings.filter((mapping: Mapping) => + mapping.diagnostics && mapping.diagnostics.length > 0 + ); + + if (mappingsWithDiagnostics.length > 0) { + // Delete each mapping with diagnostics using the deleteMapping API + for (const mapping of mappingsWithDiagnostics) { + const deleteRequest: DeleteMappingRequest = { + filePath: mainFilePath, + codedata: updatedDataMapperMetadata.codedata, + mapping: mapping, + varName: inlineMappingsResult.allMappingsRequest.varName, + targetField: variableName, + }; + + const deleteResponse = await langClient.deleteMapping(deleteRequest); + + // Apply the text edits from the delete operation directly to temp files + if (Object.keys(deleteResponse.textEdits).length > 0) { + await applyTextEditsToTempFile(deleteResponse.textEdits, mainFilePath); + await new Promise((resolve) => setTimeout(resolve, 100)); + } + } + + await repairAndCheckDiagnostics(langClient, projectRoot, { + tempDir: inlineMappingsResult.tempDir, + filePaths: inlineFilePaths + }); + } + } + + // Read updated content after diagnostics handling + const updatedMainContent = fs.readFileSync(mainFilePath, 'utf8'); + let updatedCustomContent = ''; + if (inlineMappingsResult.allMappingsRequest.customFunctionsFilePath && !isSameFile) { + updatedCustomContent = fs.readFileSync(inlineMappingsResult.allMappingsRequest.customFunctionsFilePath, 'utf8'); + } + + return { updatedMainContent, updatedCustomContent }; } -/** - * Helper function to validate the structure of a mapping response - */ -export function validateMappingResponse(response: DatamapperResponse): boolean { - if (!response || !response.mappings) { - return false; +// Handles check expression errors (BCE3032) and repairs diagnostics for inline mapping files +async function handleInlineCheckExpressionErrorsAndRepair( + langClient: any, + projectRoot: string, + inlineMappingsResult: InlineMappingsSourceResult, + isSameFile: boolean, + codeRepairResult: CodeRepairResult, + variableName: string +): Promise<{ inlineFilePaths: string[]; updatedCodeToDisplay?: string }> { + // Build file paths array for both main file and custom functions file + const inlineFilePaths = [inlineMappingsResult.tempFileMetadata.codeData.lineRange.fileName]; + if (inlineMappingsResult.allMappingsRequest.customFunctionsFilePath && !isSameFile) { + inlineFilePaths.push(inlineMappingsResult.allMappingsRequest.customFunctionsFilePath); } - for (const [key, mapping] of Object.entries(response.mappings)) { - if (!isValidMapping(mapping)) { - console.warn(`Invalid mapping found for key: ${key}`); - return false; + // Repair and check diagnostics for all files + let diags = await repairAndCheckDiagnostics(langClient, projectRoot, { + tempDir: inlineMappingsResult.tempDir, + filePaths: inlineFilePaths + }); + + // Check for inline mappings with 'check' expressions (BCE3032 error) + const hasCheckError = diags.diagnosticsList.some(diagEntry => + diagEntry.diagnostics.some(d => d.code === "BCE3032") + ); + + let updatedCodeToDisplay: string; + + if (hasCheckError) { + const isModified = await addCheckExpressionErrors(diags.diagnosticsList, langClient); + if (isModified) { + // Re-read the files after modifications + const tempFilePath = inlineMappingsResult.tempFileMetadata.codeData.lineRange.fileName; + codeRepairResult.finalContent = fs.readFileSync(tempFilePath, 'utf8'); + + // Update the code to display if we're working with a variable + if (variableName) { + const extractedVariableDefinition = await extractVariableDefinitionSource( + tempFilePath, + inlineMappingsResult.tempFileMetadata.codeData, + variableName + ); + if (extractedVariableDefinition) { + updatedCodeToDisplay = extractedVariableDefinition; + } + } + + if (inlineMappingsResult.allMappingsRequest.customFunctionsFilePath && !isSameFile) { + codeRepairResult.customFunctionsContent = fs.readFileSync( + inlineMappingsResult.allMappingsRequest.customFunctionsFilePath, + 'utf8' + ); + } } } - return true; + return { inlineFilePaths, updatedCodeToDisplay }; } -/** - * Recursive function to validate a mapping structure - */ -function isValidMapping(mapping: MappingJson): boolean { - if (isMappingRecord(mapping)) { - return Boolean( - mapping.operation && mapping.targetType && mapping.parameters && Array.isArray(mapping.parameters) +// Handles check expression errors (BCE3032) and repairs diagnostics for mapping files +async function handleCheckExpressionErrorsAndRepair( + langClient: any, + projectRoot: string, + tempFileMetadata: any, + allMappingsRequest: AllDataMapperSourceRequest, + tempDirectory: string, + isSameFile: boolean, + codeRepairResult: CodeRepairResult +): Promise { + // Build file paths array for both main file and custom functions file + const filePaths = [tempFileMetadata.codeData.lineRange.fileName]; + if (allMappingsRequest.customFunctionsFilePath && !isSameFile) { + filePaths.push(allMappingsRequest.customFunctionsFilePath); + } + + // Repair and check diagnostics for all files + let diags = await repairAndCheckDiagnostics(langClient, projectRoot, { + tempDir: tempDirectory, + filePaths + }); + + // Check for mappings with 'check' expressions (BCE3032 error) + const hasCheckError = diags.diagnosticsList.some((diagEntry) => + diagEntry.diagnostics.some(d => d.code === "BCE3032") + ); + + if (hasCheckError) { + const isModified = await addCheckExpressionErrors(diags.diagnosticsList, langClient); + if (isModified) { + // Re-read the files after modifications + const mainFilePath = tempFileMetadata.codeData.lineRange.fileName; + codeRepairResult.finalContent = fs.readFileSync(mainFilePath, 'utf8'); + + if (allMappingsRequest.customFunctionsFilePath && !isSameFile) { + codeRepairResult.customFunctionsContent = fs.readFileSync( + allMappingsRequest.customFunctionsFilePath, + 'utf8' + ); + } + } + } + + return filePaths; +} + +// Removes mapping fields with compilation errors to avoid syntax errors in generated code and reads updated content +async function removeCompilationErrorMappingFields( + langClient: any, + projectRoot: string, + mainFilePath: string, + targetFunctionName: string, + allMappingsRequest: AllDataMapperSourceRequest, + tempDirectory: string, + filePaths: string[], + isSameFile: boolean +): Promise<{ updatedMainContent: string; updatedCustomContent: string }> { + // Get function definition from syntax tree + const funcDefinitionNode = await getFunctionDefinitionFromSyntaxTree( + langClient, + mainFilePath, + targetFunctionName + ); + + const updatedDataMapperMetadata: DataMapperModelRequest = { + filePath: mainFilePath, + codedata: { + lineRange: { + fileName: mainFilePath, + startLine: { + line: funcDefinitionNode.position.startLine, + offset: funcDefinitionNode.position.startColumn, + }, + endLine: { + line: funcDefinitionNode.position.endLine, + offset: funcDefinitionNode.position.endColumn, + }, + }, + }, + targetField: targetFunctionName, + position: { + line: funcDefinitionNode.position.startLine, + offset: funcDefinitionNode.position.startColumn + } + }; + + // Get DM model with mappings to check for mapping-level diagnostics + const dataMapperModel = await langClient.getDataMapperMappings(updatedDataMapperMetadata) as DataMapperModelResponse; + const dmModel = dataMapperModel.mappingsModel as DMModel; + + // Check if any mappings have diagnostics + if (dmModel && dmModel.mappings && dmModel.mappings.length > 0) { + const mappingsWithDiagnostics = dmModel.mappings.filter((mapping: Mapping) => + mapping.diagnostics && mapping.diagnostics.length > 0 ); + + if (mappingsWithDiagnostics.length > 0) { + // Delete each mapping with diagnostics using the deleteMapping API + for (const mapping of mappingsWithDiagnostics) { + const deleteRequest: DeleteMappingRequest = { + filePath: mainFilePath, + codedata: updatedDataMapperMetadata.codedata, + mapping: mapping, + varName: allMappingsRequest.varName, + targetField: targetFunctionName, + }; + + const deleteResponse = await langClient.deleteMapping(deleteRequest); + + // Apply the text edits from the delete operation directly to temp files + if (Object.keys(deleteResponse.textEdits).length > 0) { + await applyTextEditsToTempFile(deleteResponse.textEdits, mainFilePath); + await new Promise((resolve) => setTimeout(resolve, 100)); + } + } + + await repairAndCheckDiagnostics(langClient, projectRoot, { + tempDir: tempDirectory, + filePaths: filePaths + }); + } } - if (typeof mapping === "object" && mapping !== null) { - return Object.values(mapping).every((value) => isValidMapping(value)); + // Read updated content after diagnostics handling + const updatedMainContent = fs.readFileSync(mainFilePath, 'utf8'); + let updatedCustomContent = ''; + if (allMappingsRequest.customFunctionsFilePath && !isSameFile) { + updatedCustomContent = fs.readFileSync(allMappingsRequest.customFunctionsFilePath, 'utf8'); } - return false; + return { updatedMainContent, updatedCustomContent }; } -// ============================================================================= -// EXPORTS -// ============================================================================= +// Applies text edits to a temporary file without using VS Code workspace APIs +async function applyTextEditsToTempFile(textEdits: { [key: string]: TextEdit[] }, targetFilePath: string): Promise { + // Read current file content + let fileContent = fs.readFileSync(targetFilePath, 'utf8'); + const lines = fileContent.split('\n'); -export { - operationsTable -}; -// Default export for the main function -export default generateAutoMappings; + // Get edits for this file + const editsForFile = textEdits[targetFilePath] || textEdits[Uri.file(targetFilePath).toString()]; -/* -// Example Usage: -async function testDataMapping() { - try { - // Create sample payload - const payload = createSamplePayload(); - - // Generate mappings - const response = await generateAutoMappings(payload); - - // Validate response - const isValid = validateMappingResponse(response); - - if (isValid) { - console.log("Generated mappings:", JSON.stringify(response, null, 2)); + if (!editsForFile || editsForFile.length === 0) { + return; + } + + // Sort edits in reverse order (bottom to top) to maintain line positions + const sortedEdits = [...editsForFile].sort((a, b) => { + if (b.range.start.line !== a.range.start.line) { + return b.range.start.line - a.range.start.line; + } + return b.range.start.character - a.range.start.character; + }); + + // Apply each edit + for (const edit of sortedEdits) { + const startLine = edit.range.start.line; + const startChar = edit.range.start.character; + const endLine = edit.range.end.line; + const endChar = edit.range.end.character; + + // Handle single line edit + if (startLine === endLine) { + const line = lines[startLine]; + lines[startLine] = line.substring(0, startChar) + edit.newText + line.substring(endChar); } else { - console.error("Invalid mapping response"); + // Handle multi-line edit + const firstLine = lines[startLine].substring(0, startChar); + const lastLine = lines[endLine].substring(endChar); + const newContent = firstLine + edit.newText + lastLine; + + // Remove the lines in the range and replace with new content + lines.splice(startLine, endLine - startLine + 1, newContent); } - - // Expected output structure: - // { - // "mappings": { - // "id": { - // "operation": "DIRECT", - // "targetType": "string", - // "parameters": ["person.id"] - // }, - // "firstName": { - // "operation": "DIRECT", - // "targetType": "string", - // "parameters": ["person.firstName"] - // }, - // "age": { - // "operation": "DIRECT", - // "targetType": "int", - // "parameters": ["person.age"] - // }, - // "courses": { - // "id": { - // "operation": "DIRECT", - // "targetType": "string", - // "parameters": ["person.courses.id"] - // }, - // "name": { - // "operation": "DIRECT", - // "targetType": "string", - // "parameters": ["person.courses.name"] - // }, - // "credits": { - // "operation": "DIRECT", - // "targetType": "int", - // "parameters": ["person.courses.credits"] - // } - // }, - // "country": { - // "operation": "DIRECT", - // "targetType": "string", - // "parameters": ["person.country"] - // } - // } - // } - - } catch (error) { - console.error("Error generating mappings:", error); } + + // Write updated content back to file + const updatedContent = lines.join('\n'); + writeBallerinaFileDidOpenTemp(targetFilePath, updatedContent); } -*/ diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/prompt.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/prompt.ts deleted file mode 100644 index 1b9b2cb8a0e..00000000000 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/prompt.ts +++ /dev/null @@ -1,454 +0,0 @@ -// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. - -// WSO2 LLC. licenses this file to you under the Apache License, -// Version 2.0 (the "License"); you may not use this file except -// in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 - -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -/** - * Generates the main data mapping prompt for AI - */ -export function getDataMappingPrompt(inputJson: string, outputJson: string, userMappings: string, mappingTips: string): string { - return `You are an assistant that can help to map attributes between multiple JSON objects (data-mapping). - -## Instructions - -Before starting the mapping process, consider the mappings provided by the user mappings and mapping tips below. Use the user's and mapping tips as a guide/tip to do the mapping process, ensuring that they are relevant to input and output JSON. Only use the tips in user's mappings and mapping tips that have input and output records and their fields and subfields are in input and output JSON. Otherwise omit the irrelevant mapping guides. - -## Input JSON - -${inputJson} - -## Output JSON - -${outputJson} - -## User's Mappings - -${userMappings} - -## Mapping Tips - -${mappingTips} - -## Mapping Rules - -Follow these rules during data mapping: - -1. One or more input JSON can be given -2. Only a single output JSON can be given -3. Mapping the fields requires performing operations on the data. Most common operation is to do a one-to-one mapping with no transformations -4. One or more fields in the input JSON may be required to construct the output field value in-case we have complex operations that require multiple input fields -5. Some input fields may not participate in any mappings if they are irrelevant to the output field -6. Some output fields may not participate in any mappings if they are irrelevant to the input field -7. Field access uses dot notation for JSON format. To access subfield "abc" from object "xyz", use "xyz.abc". For accessing fields with IDs like "input.contactInfo.email", use the exact ID path as provided in the schema. -8. Strictly follow data types accepted and returned by the operations when mapping input fields -9. When mapping, you must use operators which return the expected data type -10. When Mapping, consider the information mentioned in the comments -11. DO NOT use the value in the field "optional" when mapping the fields -12. DO NOT map anything if you aren't sure -13. When both input and output are records, recursively traverse ALL nested fields until you reach primitive types (int, string, boolean, float, decimal, etc.) and map ONLY those primitive fields. NEVER map at the record level. -14. Consider constants, configurables, variables, enum values, and module variables when mapping fields -15. Constants, variables, module variables and configurables can be mapped directly using their defined values -16. Enum values should be mapped using their exact enum identifiers -17. Consider both user's mappings and mapping tips when determining field relationships and transformations -18. Mapping tips provide additional mapping context from previous operations or related mappings that can be used as reference - -## Available Operations - -### 0) Direct Mapping -- ${"DIRECT(x)"} - used to substitute with x without any transformations -- **For input fields, variables, and module variables: use field path (e.g., "input.fieldName")** -- **For constants and configurables: use their defined values** -- **For enums: use their exact enum identifiers** - -### 1) Arithmetic Expressions -- ${"ADDITION(x, y, z, ...)"} - add variables x, y and z and so on -- ${"SUBTRACTION(x, y)"} - subtract y from x -- ${"MULTIPLICATION(x, y, z, ...)"} - multiply x, y and z and so on -- ${"DIVISION(x, y)"} - divide x by y -- ${"MODULAR(x, y)"} - get the modular division between x and y i.e. x%y - -### 2) Equality Expressions -- ${"EQUAL(x, y)"} - return true if x and y are equal -- ${"NOTEQUAL(x, y)"} - return true if x and y are not equal - -### 3) Relational Expressions -- ${"LESS_THAN(x, y)"} - return true if x is less than y -- ${"LESS_THAN_OR_EQUAL(x, y)"} - return true if x is less than or equals to y - -### 4) Logical Expressions -- ${"AND(x, y)"} - return x AND y value -- ${"OR(x, y)"} - return x OR y value - -### 5) Member Access Expressions -- ${"x[y]"} - access y th element of x array object in the json - -### 6) Regex Operations -- ${"SPLIT(text, regex)"} - Split the string text based on the regex and returns an array of strings (string[]) - - Example: ${"SPLIT(\"word1, word2, word3\", \",\")"} will return a string array ["word1", "word2", "word3"] - - Example: ${"SPLIT(\"word1, word2, word3\", \" \")"} will return a string array ["word1", "word2", "word3"] -- ${"REPLACE_ALL(text, regex, replacement)"} - Replace all the instances of regex in the text using string replacement - - Example: ${"REPLACE_ALL(\"word1 word2 word3\", \" \", \"\")"} will return a string "word1word2word3" - -### 7) Numerical Operations -- ${"AVERAGE(x, TYPE)"} - get the average over x. x is a single array of variables of TYPE (ex - [12, 13, 14]) when TYPE is INTEGER. TYPE can be either INT, DECIMAL, or FLOAT -- ${"MAXIMUM(x, TYPE)"} - get the maximum over x. x is an array of variables of TYPE(ex - [12, 13, 14]) when TYPE is INTEGER. TYPE can be either INT, DECIMAL, or FLOAT -- ${"MINIMUM(x, TYPE)"} - get the minimum over x. x is a single array of variables of TYPE (ex - [12, 13, 14]) when TYPE is INTEGER. TYPE can be either INT, DECIMAL, or FLOAT -- ${"SUMMATION(x, TYPE)"} - get the summation over x. x is a single array of variables of TYPE(ex - [12, 13, 14]) when TYPE is INTEGER. TYPE can be either INT, DECIMAL, or FLOAT -- ${"ABSOLUTE(x, TYPE)"} - get the absolute value of the given variable of TYPE, x. TYPE can be either INT, DECIMAL, or FLOAT - -### 8) Array Operations -- ${"LENGTH(x)"} - Get the length of an array named x - -## Response Format - -Always use the following json format to respond without any markdown formatting: - -{ - "": { - "OPERATION": { - "NAME": "", - "PARAMETER_1": "", - "PARAMETER_2": "" - // ...additional parameters as needed - } - } - // ...additional fields as needed -} - -Following is an example of the input, output and the mapping: - -Example Input json : - -[ - { - "fields":[ - { - "id":"studentDetails.id", - "name":"id", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.tags", - "name":"tags", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "fields":[ - { - "id":"studentDetails.bio.firstName", - "name":"firstName", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.bio.lastName", - "name":"lastName", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.bio.age", - "name":"age", - "typeName":"int", - "kind":"int", - "optional":false - } - ], - "id":"studentDetails.bio", - "name":"bio", - "typeName":"Bio", - "kind":"record", - "optional":false - }, - { - "fields":[ - { - "id":"studentDetails.address.address1", - "name":"address1", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.address.address2", - "name":"address2", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.address.city", - "name":"city", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.address.country", - "name":"country", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.address.zipcode", - "name":"zipcode", - "typeName":"string", - "kind":"string", - "optional":false - } - ], - "id":"studentDetails.address", - "name":"address", - "typeName":"Address", - "kind":"record", - "optional":false - }, - { - "fields":[ - { - "id":"studentDetails.academicDetails.major", - "name":"major", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "member":{ - "id":"studentDetails.academicDetails.subjects.0", - "name":"", - "typeName":"string", - "kind":"string", - "optional":false - }, - "id":"studentDetails.academicDetails.subjects", - "name":"subjects", - "typeName":"string[]", - "kind":"array", - "optional":false - } - ], - "id":"studentDetails.academicDetails", - "name":"academicDetails", - "typeName":"AcademicDetails", - "kind":"record", - "optional":false - }, - { - "fields":[ - { - "id":"studentDetails.studentProgress.studentId", - "name":"studentId", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"studentDetails.studentProgress.currentLevel", - "name":"currentLevel", - "typeName":"float", - "kind":"float", - "optional":false - } - ], - "id":"studentDetails.studentProgress", - "name":"studentProgress", - "typeName":"StudentProgress", - "kind":"record", - "optional":false - } - ], - "id":"studentDetails", - "name":"studentDetails", - "typeName":"StudentDetails", - "kind":"record", - "category":"parameter", - "optional":false - } -] - -Example Output json : - -{ - "fields":[ - { - "id":"student.studentId", - "name":"studentId", - "typeName":"int", - "kind":"int", - "optional":false - }, - { - "member":{ - "id":"student.studentTags", - "name":"", - "typeName":"string", - "kind":"string", - "optional":false - }, - "id":"student.studentTags", - "name":"studentTags", - "typeName":"string[]", - "kind":"array", - "optional":false - }, - { - "fields":[ - { - "id":"student.studentBio.fullName", - "name":"fullName", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"student.studentBio.age", - "name":"age", - "typeName":"int", - "kind":"int", - "optional":false - } - ], - "id":"student.studentBio", - "name":"studentBio", - "typeName":"StudentBio", - "kind":"record", - "optional":false - }, - { - "id":"student.studentAddress", - "name":"studentAddress", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "id":"student.academicMajor", - "name":"academicMajor", - "typeName":"string", - "kind":"string", - "optional":false - }, - { - "member":{ - "id":"student.subjects", - "name":"", - "typeName":"string", - "kind":"string", - "optional":false - }, - "id":"student.subjects", - "name":"subjects", - "typeName":"string[]", - "kind":"array", - "optional":false - }, - { - "id":"student.currentLevel", - "name":"currentLevel", - "typeName":"string", - "kind":"string", - "optional":false - } - ], - "id":"student", - "name":"student", - "typeName":"Student", - "kind":"record", - "optional":false -} - -Example Mapping: - -{ - "student.studentId":{ - "OPERATION":{ - "NAME":"DIRECT", - "PARAMETER_1":"studentDetails.id" - } - }, - "student.studentTags":{ - "OPERATION":{ - "NAME":"DIRECT", - "PARAMETER_1":"studentDetails.tags" - } - }, - "student.studentBio.fullName":{ - "OPERATION":{ - "NAME":"ADDITION", - "PARAMETER_1":"studentDetails.bio.firstName", - "PARAMETER_2":" ", - "PARAMETER_3":"studentDetails.bio.lastName" - } - }, - "student.studentBio.age":{ - "OPERATION":{ - "NAME":"DIRECT", - "PARAMETER_1":"studentDetails.bio.age" - } - }, - "student.studentAddress":{ - "OPERATION":{ - "NAME":"ADDITION", - "PARAMETER_1":"studentDetails.address.address1", - "PARAMETER_2":", ", - "PARAMETER_3":"studentDetails.address.address2", - "PARAMETER_4":", ", - "PARAMETER_5":"studentDetails.address.city", - "PARAMETER_6":", ", - "PARAMETER_7":"studentDetails.address.country", - "PARAMETER_8":" ", - "PARAMETER_9":"studentDetails.address.zipcode" - } - }, - "student.academicMajor":{ - "OPERATION":{ - "NAME":"DIRECT", - "PARAMETER_1":"studentDetails.academicDetails.major" - } - }, - "student.subjects":{ - "OPERATION":{ - "NAME":"DIRECT", - "PARAMETER_1":"studentDetails.academicDetails.subjects" - } - }, - "student.currentLevel":{ - "OPERATION":{ - "NAME":"DIRECT", - "PARAMETER_1":"studentDetails.studentProgress.currentLevel" - } - } -} - -## IMPORTANT NOTES: - -- **DO NOT RETURN ANYTHING OTHER THAN THE MAPPING JSON!** -- **DO NOT ENCLOSE THE RESULT JSON WITH ANYTHING.** -- **DO NOT USE MARKDOWN CODE BLOCKS OR BACKTICKS.** -- **RETURN ONLY RAW JSON WITHOUT ANY FORMATTING OR WRAPPER.** -- **FOR DIRECT MAPPINGS:** - - **Input fields, variables, constants, configurables and module variables: use field ID/path from the input schema** - - **Enum values: use their exact enum identifiers** - - **DEFAULT VALUES AND NULL LIKE VALUES MUST NOT BE MAPPED DIRECT.** -- **Use the exact field IDs as provided in the input/output schema (e.g., "input.contactInfo.email", "output.salaryInfo.baseSalary")** -- **Consider mapping tips as additional reference for understanding field relationships and mapping patterns** -`; -} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/schema.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/schema.ts index eae58bd7d50..cc31e8123a9 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/schema.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/schema.ts @@ -16,46 +16,32 @@ import { z } from 'zod'; -// Schema for individual operation -const OperationSchema = z.object({ - NAME: z.string(), - PARAMETER_1: z.union([z.string(), z.number()]).optional(), - PARAMETER_2: z.union([z.string(), z.number()]).optional(), - PARAMETER_3: z.union([z.string(), z.number()]).optional(), - PARAMETER_4: z.union([z.string(), z.number()]).optional(), - PARAMETER_5: z.union([z.string(), z.number()]).optional(), - PARAMETER_6: z.union([z.string(), z.number()]).optional(), - PARAMETER_7: z.union([z.string(), z.number()]).optional(), - PARAMETER_8: z.union([z.string(), z.number()]).optional(), - PARAMETER_9: z.union([z.string(), z.number()]).optional(), - PARAMETER_10: z.union([z.string(), z.number()]).optional(), +// Forward declaration for recursive Mapping schema +const MappingSchema: z.ZodType = z.lazy(() => z.object({ + output: z.string(), + expression: z.string(), + requiresCustomFunction: z.boolean(), + functionContent: z.string().optional(), +})); + +// Main schema for the complete data mapping (array of Mapping objects) +const DataMappingSchema = z.array(MappingSchema); + +// Top-level schema for the generated mappings +const GeneratedMappingSchema = z.object({ + generatedMappings: DataMappingSchema, }); -// Schema for a field mapping that contains an operation -const FieldMappingSchema = z.object({ - OPERATION: OperationSchema +// Schema for a single source file +const SourceFileSchema = z.object({ + filePath: z.string().min(1), + content: z.string(), }); -// Schema for nested field mappings (like bio.fullName, bio.age) -const NestedFieldMappingSchema = z.record( - z.string(), - z.union([ - FieldMappingSchema, - z.lazy(() => NestedFieldMappingSchema) - ]) -); - -// Main schema for the complete data mapping -export const DataMappingSchema = z.record( - z.string(), - z.union([ - FieldMappingSchema, - NestedFieldMappingSchema - ]) -); - -// Top-level schema for the data mapping -export const MappingSchema = z.object({ - generatedMappings: DataMappingSchema +// Schema for the array of repaired source files +const RepairedSourceFilesSchema = z.object({ + repairedFiles: z.array(SourceFileSchema), }); +// Export the schema for reuse +export { GeneratedMappingSchema, RepairedSourceFilesSchema }; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/types.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/types.ts index b52871f49d3..cf477d48e9a 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/types.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/datamapper/types.ts @@ -14,94 +14,52 @@ // specific language governing permissions and limitations // under the License. -import { IOType } from "@wso2/ballerina-core"; +import { DataMappingRecord, EnumType, IORoot, Mapping, RecordType, SourceFile } from "@wso2/ballerina-core"; // ============================================================================= -// OPERATION TYPES +// DATA MAPPING REQUEST/RESPONSE // ============================================================================= -export type OperationType = string; - -// ============================================================================= -// MAPPING TYPES -// ============================================================================= - -export interface MappingRecord { - operation: OperationType; - targetType: string; - parameters: string[]; +export interface PackageInfo { + moduleName: string; + packageFilePath: string; } -export type MappingJson = MappingRecord | { [key: string]: MappingJson }; - -export interface DatamapperResponse { - mappings: { [key: string]: MappingJson }; +export interface TypesGenerationResult { + typesCode: string; + filePath: string; + recordMap: Map; } -export interface Payload { - inputs: { [key: string]: RecordField }; - output: { [key: string]: RecordField }; - inputMetadata: { [key: string]: Metadata }; - outputMetadata: { [key: string]: MetadataField }; - mapping_fields?: { [key: string]: MappingFields }; +export interface DataModelStructure { + inputs: IORoot[]; + output: IORoot; + refs: Record; } // ============================================================================= -// FIELD AND METADATA TYPES +// DATAMAPPER CODE GENERATION // ============================================================================= -export interface SimpleField { - type: string; - comment: string; -} - -export interface MappingOperation { - NAME: OperationType; - PARAMETER_1: string; - PARAMETER_2?: string; - PARAMETER_3?: string; - PARAMETER_4?: string; -} - -export type RecordField = SimpleField | { [key: string]: RecordField }; - -export interface Mapping { - OPERATION: MappingOperation; -} - -export type AIDataMappings = (Mapping) | { [key: string]: AIDataMappings }; - -export interface Metadata { - parameterName: string; - parameterType: string; - type: string; - isArrayType?: boolean; - fields: { [key: string]: MetadataField }; +export interface DatamapperResponse { + mappings: Mapping[]; } -export interface MetadataField { - type: string; - typeInstance: string; - typeName: string; - nullable: boolean; - optional: boolean; - fields?: { [key: string]: MetadataField }; - members?: { [key: string]: MetadataField }; -} +// ============================================================================= +// DATAMAPPER CODE REPAIR +// ============================================================================= -export interface DataMappingResponse { - output: string; - inputs?: string[]; - expression: string; +export interface RepairedFiles { + repairedFiles: SourceFile[]; } -export interface DataMappingRequest { - input: IOType[]; - output: IOType; +export interface CodeRepairResult { + finalContent: string; + customFunctionsContent: string; } // ============================================================================= -// MAPPING HINT TYPES +// MAPPING HINTS // ============================================================================= export interface MappingField { @@ -111,41 +69,8 @@ export interface MappingField { export type MappingFields = MappingField | { [key: string]: MappingFields }; -export type MetadataType = Metadata | MetadataField | { [key: string]: MetadataField }; - // ============================================================================= -// OPERATION METADATA STRUCTURES -// ============================================================================= - -export interface FieldMetadata { - type: string; - optional: boolean; - nullable: boolean; -} - -export interface ParameterMetadata extends FieldMetadata { - input: string; -} - -export interface Structure { - operation: string; - outputType: string[]; - inputType: string[]; - imports: { - org?: string; - package?: string; - }; - errorReturned: boolean; - expression: string; -} - -export interface Operation { - readonly name: string; - structure: Structure; -} - -// ============================================================================= -// API RESPONSE TYPES +// CHAT API // ============================================================================= export interface ChatMessage { @@ -169,14 +94,33 @@ export interface ChatResponse { } // ============================================================================= -// VISITOR PATTERN TYPES +// CONTEXT API CONTENT TYPES // ============================================================================= -export interface VisitorContext { - targetPath: string; - found: IOType | null; -} - -export interface IOTypeVisitor { - visitIOType(ioType: IOType, context: VisitorContext): IOType | null; -} +export type FileData = { + fileName: string; + content: string; +}; + +export type ContentPart = { + type: "file" | "image" | "text"; + data?: string; + image?: string; + text?: string; + mediaType?: string; +}; + +export type FileTypeHandler = (file: FileData, includeFileName: boolean) => ContentPart; + +export type ProcessType = "mapping_instruction" | "records" | "requirements"; + +export type DataMapperRequest = { + files: FileData[]; + text?: string; + processType: ProcessType; + isRequirementAnalysis?: boolean; //TODO: Why is this +}; + +export type DataMapperResponse = { + fileContent: string; +}; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/documentation/doc_generator.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/documentation/doc_generator.ts index 3cd3b3dd1a3..6e4c132b016 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/documentation/doc_generator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/documentation/doc_generator.ts @@ -18,24 +18,24 @@ import { DocGenerationRequest } from '@wso2/ballerina-core'; import { getServiceDeclaration } from '../../testGenerator'; -import { getBallerinaProjectRoot } from '../../../../rpc-managers/ai-panel/rpc-manager'; import { generateDocumentation, DocumentationGenerationRequest } from './documentation'; import { getProjectSource, getOpenAPISpecification } from '../../utils'; +import { getCurrentProjectRoot } from '../../../../utils/project-utils'; // Main documentation generator function that handles all the logic export async function generateDocumentationForService(params: DocGenerationRequest): Promise { try { // Get the project root - const projectRoot = await getBallerinaProjectRoot(); + const projectPath = await getCurrentProjectRoot(); // Get the project source files - const projectSource = await getProjectSource(projectRoot); + const projectSource = await getProjectSource(projectPath); if (!projectSource) { throw new Error("The current project is not recognized as a valid Ballerina project. Please ensure you have opened a Ballerina project."); } // Find the service declaration and get OpenAPI spec - const { serviceDocFilePath } = await getServiceDeclaration(projectRoot, params.serviceName); + const { serviceDocFilePath } = await getServiceDeclaration(projectPath, params.serviceName); const openApiSpec = await getOpenAPISpecification(serviceDocFilePath); // Create the documentation generation request diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/payload_json.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/payload_json.ts new file mode 100644 index 00000000000..5f0d06ed3fe --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/payload_json.ts @@ -0,0 +1,52 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { generateObject } from "ai"; +import { PayloadContext } from "@wso2/ballerina-core"; +import { getAnthropicClient, ANTHROPIC_SONNET_4 } from "../../connection"; +import { AIPanelAbortController } from "../../../../../../src/rpc-managers/ai-panel/utils"; +import { ExamplePayloadSchema, ExamplePayload } from "./schema"; +import { getPayloadGenerationSystemPrompt, getPayloadGenerationUserPrompt } from "./prompts"; + +/** + * Generates an example JSON payload for a service resource using AI + * + * @param context - The payload context containing service and resource details + * @returns Promise - The generated JSON payload + * @throws Error if generation fails or response cannot be parsed + */ +export async function generateExamplePayload(context: PayloadContext): Promise { + const systemPrompt = getPayloadGenerationSystemPrompt(context); + const userPrompt = getPayloadGenerationUserPrompt(context); + + try { + const { object } = await generateObject({ + model: await getAnthropicClient(ANTHROPIC_SONNET_4), + maxOutputTokens: 4096*2, + temperature: 0, + system: systemPrompt, + prompt: userPrompt, + schema: ExamplePayloadSchema, + abortSignal: AIPanelAbortController.getInstance().signal, + }); + + const result = object as ExamplePayload; + return result.payload; + } catch (error) { + console.error("Failed to generate example payload:", error); + throw new Error(`Failed to generate example payload: ${error}`); + } +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/prompts.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/prompts.ts new file mode 100644 index 00000000000..257dcbb79cb --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/prompts.ts @@ -0,0 +1,130 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { PayloadContext, HttpPayloadContext, MessageQueuePayloadContext } from "@wso2/ballerina-core"; +import { isMessageQueuePayloadContext } from "../../utils"; + +/** + * System prompt for generating example JSON payloads + */ +export function getSystemPrompt(serviceType: string): string { + + return `You are an expert at generating realistic and contextually appropriate example JSON payloads for ${serviceType} services. + +Your task is to analyze the provided service context and generate a meaningful JSON payload that: +1. Matches the semantic intent of the service and resource +2. Contains realistic sample data appropriate for the domain +3. Respects the parameter types and constraints provided +4. Uses proper naming conventions and data types +5. Includes nested structures when appropriate for the context +6. Avoid reintroducing existing parameters unless necessary for completeness + +Guidelines: +- For string fields: Use realistic examples (e.g., "John Doe" for names, "john.doe@example.com" for emails) +- For numeric fields: Use reasonable values within expected ranges +- For boolean fields: Choose the most common or expected default +- For arrays: Include 2-3 example items to show the structure +- For dates: Use ISO 8601 format (e.g., "2024-01-15T10:30:00Z") +- Consider the HTTP method and resource path to infer the payload structure +- If parameter details suggest specific types, ensure the payload respects those types + +Return ONLY the JSON payload object in the specified format.`; +} + +/** + * User prompt for generating example JSON payloads for HTTP services + */ +function getHttpUserPrompt(context: HttpPayloadContext): string { + let prompt = `Generate an example JSON payload for the following HTTP service resource:\n\n`; + + prompt += `**Service Name:** ${context.serviceName}\n`; + prompt += `**Service Base Path:** ${context.serviceBasePath}\n`; + + if (context.resourceBasePath) { + prompt += `**Resource Path:** ${context.resourceBasePath}\n`; + } + + if (context.resourceMethod) { + prompt += `**HTTP Method:** ${context.resourceMethod}\n`; + } + + if (context.resourceDocumentation) { + prompt += `**Resource Documentation:** ${context.resourceDocumentation}\n`; + } + + if (context.paramDetails && context.paramDetails.length > 0) { + prompt += `\n**Existing Parameters:**\n`; + context.paramDetails.forEach(param => { + prompt += `- **${param.name}** (${param.type})`; + if (param.defaulValue) { + prompt += ` - Default: ${param.defaulValue}`; + } + prompt += `\n`; + }); + } + + prompt += `\nBased on the above context, generate a realistic and meaningful example JSON payload that would be appropriate for this service resource.`; + + return prompt; +} + +/** + * User prompt for generating example JSON payloads for message brokers + */ +function getMessageBrokerUserPrompt(context: MessageQueuePayloadContext): string { + let prompt = `Generate an example JSON payload for the following message broker service:\n\n`; + + prompt += `**Service Name:** ${context.serviceName}\n`; + + if (context.queueOrTopic) { + prompt += `**Queue/Topic Name:** ${context.queueOrTopic}\n`; + } + + if (context.messageDocumentation) { + prompt += `**Message Documentation:** ${context.messageDocumentation}\n`; + } + + prompt += `\n**IMPORTANT:** Generate ONLY the message payload value that would be consumed by the application logic. +DO NOT include message broker metadata fields such as topic, partition, offset, timestamp, key, headers, exchange, routing_key, +delivery_tag, or any other transport-level metadata. +Generate ONLY the business data object that represents the actual message content. + +Based on the above context, generate a realistic and meaningful example JSON payload that represents the business data for this message.`; + + return prompt; +} + +/** + * System prompt for generating example JSON payloads + * Automatically selects the appropriate prompt based on the payload context type + */ +export function getPayloadGenerationSystemPrompt(context?: PayloadContext): string { + if (context && isMessageQueuePayloadContext(context)) { + return getSystemPrompt("Message Broker"); + } + return getSystemPrompt("REST API"); +} + +/** + * User prompt for generating example JSON payloads + * Automatically selects the appropriate prompt based on the payload context type + */ +export function getPayloadGenerationUserPrompt(context: PayloadContext): string { + if (isMessageQueuePayloadContext(context)) { + return getMessageBrokerUserPrompt(context); + } + return getHttpUserPrompt(context as HttpPayloadContext); +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/schema.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/schema.ts new file mode 100644 index 00000000000..eac89b05164 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/editor/payload-json/schema.ts @@ -0,0 +1,26 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { z } from 'zod'; + +// Schema for the generated example JSON payload +// Uses z.any() to allow flexible JSON structure that adapts to the service context +export const ExamplePayloadSchema = z.object({ + payload: z.record(z.string(), z.any()).describe("The generated example JSON payload object"), +}); + +// Export the type for use in TypeScript +export type ExamplePayload = z.infer; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/event.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/event.ts index c25db3ab525..cffce53741f 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/event.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/event.ts @@ -15,7 +15,7 @@ // under the License. import { ChatNotify, Command } from "@wso2/ballerina-core"; -import { sendContentAppendNotification, sendContentReplaceNotification, sendDiagnosticMessageNotification, sendErrorNotification, sendMessagesNotification, sendMessageStartNotification, sendMessageStopNotification, sendIntermidateStateNotification, sendToolCallNotification, sendToolResultNotification } from "./utils"; +import { sendContentAppendNotification, sendContentReplaceNotification, sendDiagnosticMessageNotification, sendErrorNotification, sendMessagesNotification, sendMessageStartNotification, sendMessageStopNotification, sendIntermidateStateNotification, sendToolCallNotification, sendToolResultNotification, sendGeneratedSourcesNotification } from "./utils"; export type CopilotEventHandler = (event: ChatNotify) => void; @@ -57,6 +57,9 @@ export function createWebviewEventHandler(command: Command): CopilotEventHandler case "diagnostics": sendDiagnosticMessageNotification(event.diagnostics); break; + case "generated_sources": + sendGeneratedSourcesNotification(event.fileArray); + break; default: console.warn(`Unhandled event type: ${event}`); break; diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/healthcare/healthcare.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/healthcare/healthcare.ts index 5201e543d7f..94a4e6b0afa 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/healthcare/healthcare.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/healthcare/healthcare.ts @@ -17,7 +17,7 @@ import { ModelMessage, generateObject, streamText } from "ai"; import { getAnthropicClient, ANTHROPIC_HAIKU, ANTHROPIC_SONNET_4, getProviderCacheControl } from "../connection"; import { GenerationType, getRelevantLibrariesAndFunctions } from "../libs/libs"; -import { getRewrittenPrompt, populateHistory, transformProjectSource, getErrorMessage } from "../utils"; +import { getRewrittenPrompt, populateHistory, flattenProjectToFiles, getErrorMessage, buildPackageContext, formatFileUploadContents } from "../utils"; import { libraryContains } from "../libs/funcs"; import { LANGLIBS } from "../libs/langlibs"; import { @@ -33,7 +33,7 @@ import { FileAttatchment, GenerateCodeRequest, ProjectSource, - SourceFiles, + SourceFile, OperationType, Command } from "@wso2/ballerina-core"; @@ -48,10 +48,10 @@ export async function generateHealthcareCodeCore( params: GenerateCodeRequest, eventHandler: CopilotEventHandler ): Promise { - const project: ProjectSource = await getProjectSource(params.operationType); - const packageName = project.projectName; - const sourceFiles: SourceFiles[] = transformProjectSource(project); - const prompt = getRewrittenPrompt(params, sourceFiles); + const projects: ProjectSource[] = await getProjectSource(params.operationType); + const activeProject = projects.find(p => p.isActive) || projects[0]; + const packageName = activeProject.projectName; + const prompt = getRewrittenPrompt(params, projects); const relevantTrimmedFuncs: Library[] = ( await getRelevantLibrariesAndFunctions({ query: prompt }, GenerationType.HEALTHCARE_GENERATION) ).libraries; @@ -62,7 +62,7 @@ export async function generateHealthcareCodeCore( const allMessages: ModelMessage[] = [ { role: "system", - content: getSystemPromptPrefix(relevantTrimmedFuncs, sourceFiles), + content: getSystemPromptPrefix(relevantTrimmedFuncs), }, { role: "system", @@ -72,7 +72,7 @@ export async function generateHealthcareCodeCore( ...historyMessages, { role: "user", - content: getUserPrompt(prompt, sourceFiles, params.fileAttachmentContents, packageName, params.operationType), + content: getUserPrompt(prompt, projects, params.fileAttachmentContents, packageName, params.operationType), providerOptions: cacheOptions, }, ]; @@ -126,7 +126,7 @@ export async function generateHealthcareCode(params: GenerateCodeRequest): Promi } } -export function getSystemPromptPrefix(apidocs: Library[], sourceFiles: SourceFiles[]): string { +export function getSystemPromptPrefix(apidocs: Library[]): string { return `You are an expert assistant who specializes in writing Ballerina code for healthcare integrations. Your goal is to ONLY answer Ballerina related queries. You should always answer with accurate and functional Ballerina code that addresses the specified query while adhering to the constraints of the given API documentation. You will be provided with following inputs: @@ -256,22 +256,13 @@ Example Codeblock segments: function getUserPrompt( usecase: string, - existingCode: SourceFiles[], + projects: ProjectSource[], fileUploadContents: FileAttatchment[], packageName: string, op: OperationType ): string { - let fileInstructions = ""; - if (fileUploadContents.length > 0) { - fileInstructions = `4. File Upload Contents. : Contents of the file which the user uploaded as addtional information for the query. - -${fileUploadContents - .map( - (file) => `File Name: ${file.fileName} -Content: ${file.content}` - ) - .join("\n")}`; - } + const fileInstructions = formatFileUploadContents(fileUploadContents); + const packageContext = buildPackageContext(projects, packageName); return `QUERY: The query you need to answer using the provided api documentation. @@ -280,10 +271,10 @@ ${usecase} Existing Code: Users existing code. -${stringifyExistingCode(existingCode, op)} +${stringifyExistingCode(projects, op)} -Current Package name: ${packageName} +${packageContext} ${fileInstructions} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/libs/text_editor_tool.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/libs/text_editor_tool.ts index 18e7085f29c..6c03012b853 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/libs/text_editor_tool.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/libs/text_editor_tool.ts @@ -14,7 +14,7 @@ // specific language governing permissions and limitations // under the License. -import { SourceFile, SourceFiles } from "@wso2/ballerina-core"; +import { SourceFile } from "@wso2/ballerina-core"; import { tool } from 'ai'; import { z } from 'zod'; @@ -305,10 +305,14 @@ export function createEditExecute(files: SourceFile[], updatedFileNames: string[ // Perform replacement let newContent: string; - if (replace_all) { - newContent = content.replaceAll(old_string, new_string); + if (content.trim() === "" && old_string.trim() === "") { + newContent = new_string; } else { - newContent = content.replace(old_string, new_string); + if (replace_all) { + newContent = content.replaceAll(old_string, new_string); + } else { + newContent = content.replace(old_string, new_string); + } } updateOrCreateFile(files, file_path, newContent); @@ -400,10 +404,14 @@ export function createMultiEditExecute(files: SourceFile[], updatedFileNames: st } // Apply the edit to simulate the sequence - if (edit.replace_all) { - content = content.replaceAll(edit.old_string, edit.new_string); + if (content.trim() === "" && edit.old_string.trim() === "") { + content = edit.new_string; } else { - content = content.replace(edit.old_string, edit.new_string); + if (edit.replace_all) { + content = content.replaceAll(edit.old_string, edit.new_string); + } else { + content = content.replace(edit.old_string, edit.new_string); + } } } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/function_tests.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/function_tests.ts index f163a14c390..eb9989c14e7 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/function_tests.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/function_tests.ts @@ -17,17 +17,18 @@ import { TestGenerationTarget, TestGeneratorIntermediaryState, Command } from "@wso2/ballerina-core"; import { getErrorMessage } from "../utils"; import { generateTest, getDiagnostics } from "../../testGenerator"; -import { getBallerinaProjectRoot } from "../../../../rpc-managers/ai-panel/rpc-manager"; import { URI } from "vscode-uri"; import * as fs from "fs"; +import * as path from "path"; import { CopilotEventHandler, createWebviewEventHandler } from "../event"; +import { getCurrentProjectRoot } from "../../../../utils/project-utils"; +import { StateMachine } from "../../../../stateMachine"; // Core function test generation that emits events export async function generateFunctionTestsCore( params: TestGeneratorIntermediaryState, eventHandler: CopilotEventHandler ): Promise { - const testPath = "tests/test.bal"; const functionIdentifier = params.resourceFunction; eventHandler({ @@ -39,8 +40,32 @@ export async function generateFunctionTestsCore( content: `\n\nGenerating tests for the function ${functionIdentifier}. This may take a moment.`, }); - const projectRoot = await getBallerinaProjectRoot(); - const response = await generateTest(projectRoot, { + let projectPath: string; + try { + projectPath = await getCurrentProjectRoot(); + } catch (error) { + console.error("Error getting current project root:", error); + eventHandler({ type: "error", content: getErrorMessage(error) }); + return; + } + + // Compute workspace-relative paths for test files (for display in UI) + const context = StateMachine.context(); + const workspacePath = context.workspacePath; + let testPathForDisplay = "tests/test.bal"; + let configPathForDisplay = "tests/Config.toml"; + + if (workspacePath) { + // Workspace project: include package path prefix (e.g., "foo/tests/test.bal") + const relativeProjectPath = path.relative(workspacePath, projectPath); + testPathForDisplay = path.join(relativeProjectPath, "tests/test.bal"); + configPathForDisplay = path.join(relativeProjectPath, "tests/Config.toml"); + } + + // Use project-relative path for file operations + const testPath = "tests/test.bal"; + + const response = await generateTest(projectPath, { targetType: TestGenerationTarget.Function, targetIdentifier: functionIdentifier, testPlan: params.testPlan, @@ -63,7 +88,7 @@ export async function generateFunctionTestsCore( ? existingSource + "\n\n// >>>>>>>>>>>>>>TEST CASES NEED TO BE FIXED <<<<<<<<<<<<<<<\n\n" + response.testSource : response.testSource; - const diagnostics = await getDiagnostics(projectRoot, { + const diagnostics = await getDiagnostics(projectPath, { testSource: generatedFullSource, }); @@ -78,7 +103,7 @@ export async function generateFunctionTestsCore( content: `\nRefining tests based on feedback to ensure accuracy and reliability.`, }); - const fixedCode = await generateTest(projectRoot, { + const fixedCode = await generateTest(projectPath, { targetType: TestGenerationTarget.Function, targetIdentifier: functionIdentifier, testPlan: params.testPlan, @@ -94,12 +119,12 @@ export async function generateFunctionTestsCore( }); eventHandler({ type: "content_block", - content: `\n\n\n\`\`\`ballerina\n${testCode}\n\`\`\`\n`, + content: `\n\n\n\`\`\`ballerina\n${testCode}\n\`\`\`\n`, }); if (testConfig) { eventHandler({ type: "content_block", - content: `\n\n\n\`\`\`ballerina\n${testConfig}\n\`\`\`\n`, + content: `\n\n\n\`\`\`ballerina\n${testConfig}\n\`\`\`\n`, }); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/test_plan.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/test_plan.ts index fa03e5ccebb..a4d9ffb612c 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/test_plan.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/test/test_plan.ts @@ -19,9 +19,11 @@ import { getAnthropicClient, ANTHROPIC_SONNET_4 } from "../connection"; import { getErrorMessage } from "../utils"; import { TestGenerationTarget, TestPlanGenerationRequest, Command } from "@wso2/ballerina-core"; import { generateTest, getDiagnostics } from "../../testGenerator"; -import { getBallerinaProjectRoot } from "../../../../rpc-managers/ai-panel/rpc-manager"; import { CopilotEventHandler, createWebviewEventHandler } from "../event"; import { AIPanelAbortController } from "../../../../../src/rpc-managers/ai-panel/utils"; +import { getCurrentProjectRoot } from "../../../../utils/project-utils"; +import { StateMachine } from "../../../../stateMachine"; +import * as path from "path"; export interface TestPlanResponse { testPlan: string; @@ -168,8 +170,29 @@ export async function generateTestPlanCore( type: "content_block", content: `\n\nGenerating tests for the ${target} service. This may take a moment.`, }); - const projectRoot = await getBallerinaProjectRoot(); - const testResp = await generateTest(projectRoot, { + let projectPath: string; + try { + projectPath = await getCurrentProjectRoot(); + } catch (error) { + console.error("Error getting current project root:", error); + eventHandler({ type: "error", content: getErrorMessage(error) }); + return; + } + + // Compute workspace-relative paths for test files + const context = StateMachine.context(); + const workspacePath = context.workspacePath; + let testPath = "tests/test.bal"; + let configPath = "tests/Config.toml"; + + if (workspacePath) { + // Workspace project: include package path prefix (e.g., "foo/tests/test.bal") + const relativeProjectPath = path.relative(workspacePath, projectPath); + testPath = path.join(relativeProjectPath, "tests/test.bal"); + configPath = path.join(relativeProjectPath, "tests/Config.toml"); + } + + const testResp = await generateTest(projectPath, { targetType: TestGenerationTarget.Service, targetIdentifier: target, testPlan: assistantResponse, @@ -178,7 +201,7 @@ export async function generateTestPlanCore( type: "content_block", content: `\nAnalyzing generated tests for potential issues.`, }); - const diagnostics = await getDiagnostics(projectRoot, testResp); + const diagnostics = await getDiagnostics(projectPath, testResp); let testCode = testResp.testSource; const testConfig = testResp.testConfig; if (diagnostics.diagnostics.length > 0) { @@ -186,7 +209,7 @@ export async function generateTestPlanCore( type: "content_block", content: `\nRefining tests based on feedback to ensure accuracy and reliability.`, }); - const fixedCode = await generateTest(projectRoot, { + const fixedCode = await generateTest(projectPath, { targetType: TestGenerationTarget.Service, targetIdentifier: target, testPlan: assistantResponse, @@ -202,12 +225,12 @@ export async function generateTestPlanCore( }); eventHandler({ type: "content_block", - content: `\n\n\n\`\`\`ballerina\n${testCode}\n\`\`\`\n`, + content: `\n\n\n\`\`\`ballerina\n${testCode}\n\`\`\`\n`, }); if (testConfig) { eventHandler({ type: "content_block", - content: `\n\n\n\`\`\`ballerina\n${testConfig}\n\`\`\`\n`, + content: `\n\n\n\`\`\`ballerina\n${testConfig}\n\`\`\`\n`, }); } eventHandler({ type: "stop", command: Command.Tests }); diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/service/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/service/utils.ts index 58249ba53b9..29431e50dcc 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/service/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/service/utils.ts @@ -26,12 +26,17 @@ import { IntermidaryState, onChatNotify, ProjectSource, - SourceFiles, + SourceFile, TestGeneratorIntermediaryState, ToolCall, ToolResult, Command, - DocumentationGeneratorIntermediaryState + DocumentationGeneratorIntermediaryState, + PayloadContext, + HttpPayloadContext, + MessageQueuePayloadContext, + FileAttatchment, + OperationType } from "@wso2/ballerina-core"; import { ModelMessage } from "ai"; import { MessageRole } from "./types"; @@ -58,35 +63,105 @@ export function populateHistory(chatHistory: ChatEntry[]): ModelMessage[] { return messages; } -export function transformProjectSource(project: ProjectSource): SourceFiles[] { - const sourceFiles: SourceFiles[] = []; - project.sourceFiles.forEach((file) => { - sourceFiles.push({ - filePath: file.filePath, - content: file.content, - }); - }); - project.projectModules?.forEach((module) => { - let basePath = ""; - if (!module.isGenerated) { - basePath += "modules/"; - } else { - basePath += "generated/"; +/** + * Builds file paths for project files with workspace-aware prefixing. + * Returns structured data including file path, content, package name, and active status. + * + * @param projects - Array of project sources to process + * @param fileFilter - Optional filter function to include/exclude files + * @returns Array of file objects with path, content, and metadata + */ +export function buildFilePaths( + projects: ProjectSource[], + fileFilter?: (filePath: string) => boolean +): Array<{ filePath: string; content: string; packageName?: string; isActive: boolean }> { + const usePackagePrefix = projects.length > 1; + const result: Array<{ filePath: string; content: string; packageName?: string; isActive: boolean }> = []; + + for (const project of projects) { + const packagePrefix = usePackagePrefix && project.packagePath ? `${project.packagePath}/` : ""; + const packageName = project.projectName; + const isActive = project.isActive; + + // Process root files + for (const file of project.sourceFiles) { + const filePath = packagePrefix + file.filePath; + if (!fileFilter || fileFilter(filePath)) { + result.push({ filePath, content: file.content, packageName, isActive }); + } } - basePath += module.moduleName + "/"; - // const path = - module.sourceFiles.forEach((file) => { - sourceFiles.push({ - filePath: basePath + file.filePath, - content: file.content, - }); + // Process module files + project.projectModules?.forEach((module) => { + let basePath = packagePrefix; + basePath += module.isGenerated ? "generated/" : "modules/"; + basePath += module.moduleName + "/"; + + for (const file of module.sourceFiles) { + const filePath = basePath + file.filePath; + if (!fileFilter || fileFilter(filePath)) { + result.push({ filePath, content: file.content, packageName, isActive }); + } + } }); - }); - return sourceFiles; + } + + return result; +} + +export function flattenProjectToFiles(projects: ProjectSource[]): SourceFile[] { + return buildFilePaths(projects).map(({ filePath, content }) => ({ + filePath, + content + })); +} + +/** + * Creates workspace context message for AI prompts. + * Handles single vs multi-package scenarios and provides instructions for working with workspaces. + * + * @param projects - Array of project sources + * @param packageName - Name of the current active package + * @returns Formatted context string for AI prompts + */ +export function buildPackageContext(projects: ProjectSource[], packageName: string): string { + const hasMultiplePackages = projects.length > 1; + + if (!hasMultiplePackages) { + return `Current Package name: ${packageName}`; + } + + return `Current Active Package: ${packageName} + +Note: This is a Ballerina workspace with multiple packages. File paths are prefixed with their package paths (e.g., "mainpackage/main.bal"). +Files from external packages (not the active package) are marked with the externalPackageName attribute (e.g., ). +You can import these packages by just using the package name (e.g., import otherpackage;). +When creating or modifying files, you should always prefer making edits for the current active package. Make sure to include the package path as prefix for the file edits.`; +} + +/** + * Formats file upload contents for AI prompts. + * Returns empty string if no files are uploaded. + * + * @param fileUploadContents - Array of file attachments + * @returns Formatted string with file names and contents + */ +export function formatFileUploadContents(fileUploadContents: FileAttatchment[]): string { + if (fileUploadContents.length === 0) { + return ""; + } + + const formattedFiles = fileUploadContents + .map(file => `File Name: ${file.fileName} +Content: ${file.content}`) + .join("\n"); + + return `4. File Upload Contents. : Contents of the file which the user uploaded as additional information for the query. + +${formattedFiles}`; } -export function extractResourceDocumentContent(sourceFiles: readonly SourceFiles[]): string { +export function extractResourceDocumentContent(sourceFiles: readonly SourceFile[]): string { const requirementFiles = sourceFiles .filter(sourceFile => sourceFile.filePath.toLowerCase().endsWith(REQUIREMENTS_DOCUMENT_KEY)) .slice(0, 1) @@ -99,14 +174,16 @@ export function extractResourceDocumentContent(sourceFiles: readonly SourceFiles } //TODO: This should be a query rewriter ideally. -export function getRewrittenPrompt(params: GenerateCodeRequest, sourceFiles: SourceFiles[]) { +export function getRewrittenPrompt(params: GenerateCodeRequest, projects: ProjectSource[]) { const prompt = params.usecase; if (prompt.trim() === GENERATE_CODE_AGAINST_THE_REQUIREMENT) { + const sourceFiles = flattenProjectToFiles(projects); const resourceContent = extractResourceDocumentContent(sourceFiles); return `${GENERATE_CODE_AGAINST_THE_REQUIREMENT}: ${resourceContent}`; } if (prompt.trim() === GENERATE_TEST_AGAINST_THE_REQUIREMENT) { + const sourceFiles = flattenProjectToFiles(projects); const resourceContent = extractResourceDocumentContent(sourceFiles); return `${GENERATE_TEST_AGAINST_THE_REQUIREMENT}: ${resourceContent}`; @@ -116,6 +193,7 @@ ${resourceContent}`; return prompt; } + const sourceFiles = flattenProjectToFiles(projects); const readmeFiles = sourceFiles .filter((sourceFile) => sourceFile.filePath.toLowerCase().endsWith("readme.md")) .map((sourceFile) => sourceFile.content); @@ -211,6 +289,14 @@ export function sendToolResultNotification(toolName: string, toolOutput: any): v sendAIPanelNotification(msg); } +export function sendGeneratedSourcesNotification(fileArray: SourceFile[]): void { + const msg: ChatNotify = { + type: "generated_sources", + fileArray: fileArray, + }; + sendAIPanelNotification(msg); +} + function sendAIPanelNotification(msg: ChatNotify): void { RPCLayer._messenger.sendNotification(onChatNotify, { type: "webview", webviewType: AiPanelWebview.viewType }, msg); } @@ -225,6 +311,9 @@ export function getGenerationMode(generationType: GenerationType) { export function getErrorMessage(error: unknown): string { if (error instanceof Error) { // Standard Error objects have a .message property + if (error.name === "UsageLimitError") { + return "Usage limit exceeded. Please try again later."; + } if (error.name === "AI_RetryError") { return "An error occured connecting with the AI service. Please try again later."; } @@ -234,13 +323,17 @@ export function getErrorMessage(error: unknown): string { return error.message; } - // If it’s an object with a .message field, use that + // If it's an object with a .message field, use that if ( typeof error === "object" && error !== null && "message" in error && typeof (error as Record).message === "string" ) { + // Check if it has a statusCode property indicating 429 + if ("statusCode" in error && (error as any).statusCode === 429) { + return "Usage limit exceeded. Please try again later."; + } return (error as { message: string }).message; } // Fallback: try to JSON-stringify, otherwise call toString() @@ -250,3 +343,35 @@ export function getErrorMessage(error: unknown): string { return String(error); } } + +export function isHttpPayloadContext(context: PayloadContext): context is HttpPayloadContext { + return context.protocol === "HTTP"; +} + +export function isMessageQueuePayloadContext(context: PayloadContext): context is MessageQueuePayloadContext { + return context.protocol === "MESSAGE_BROKER"; +} + +/** + * Parses XML-formatted assistant response to extract source files. + * Extracts code blocks with format: ```ballerina...``` + * + * @param xmlString - The assistant response containing XML code blocks + * @returns Array of SourceFile objects parsed from the XML + */ +export function parseSourceFilesFromXML(xmlString: string): SourceFile[] { + const sourceFiles: SourceFile[] = []; + const regex = /\s*```ballerina([\s\S]*?)```\s*<\/code>/g; + let match; + + while ((match = regex.exec(xmlString)) !== null) { + const filePath = match[1]; + const fileContent = match[2].trim(); + sourceFiles.push({ + filePath, + content: fileContent + }); + } + + return sourceFiles; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/testGenerator.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/testGenerator.ts index 059ee5c5a12..71e75d07134 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/testGenerator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/testGenerator.ts @@ -19,7 +19,7 @@ import { DiagnosticEntry, Diagnostics, OpenAPISpec, ProjectDiagnostics, ProjectModule, ProjectSource, SyntaxTree, TestGenerationRequest, TestGenerationResponse, TestGenerationTarget } from '@wso2/ballerina-core'; import { ErrorCode } from "@wso2/ballerina-core"; import { DotToken, IdentifierToken, ModulePart, ResourceAccessorDefinition, ResourcePathRestParam, ResourcePathSegmentParam, ServiceDeclaration, SlashToken, STKindChecker } from "@wso2/syntax-tree"; -import { Uri, workspace } from "vscode"; +import { Uri } from "vscode"; import { PARSING_ERROR, UNKNOWN_ERROR, ENDPOINT_REMOVED } from '../../views/ai-panel/errorCodes'; import { langClient } from './activator'; import * as fs from 'fs'; @@ -95,7 +95,9 @@ export async function generateTest( content: serviceDeclaration.source } ], - projectName: "" + projectName: "", + packagePath: "", + isActive: true }; const unitTestResp: TestGenerationResponse | ErrorCode = await getUnitTests(updatedTestGenRequest, serviceProjectSource, abortController, openApiSpec); @@ -219,10 +221,9 @@ export async function getResourceAccessorDef(projectRoot: string, resourceMethod } export async function getDiagnostics( - projectRoot: string, + ballerinaProjectRoot: string, generatedTestSource: TestGenerationResponse ): Promise { - const ballerinaProjectRoot = await findBallerinaProjectRoot(projectRoot); const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'temp-bal-test-gen-')); fs.cpSync(ballerinaProjectRoot, tempDir, { recursive: true }); const tempTestFolderPath = path.join(tempDir, 'tests'); @@ -244,18 +245,15 @@ export async function getDiagnostics( }; } -async function getProjectSource(dirPath: string): Promise { - const projectRoot = await findBallerinaProjectRoot(dirPath); - - if (!projectRoot) { - return null; - } +async function getProjectSource(projectRoot: string): Promise { const projectSource: ProjectSource = { sourceFiles: [], projectTests: [], projectModules: [], - projectName: "" + projectName: "", + packagePath: projectRoot, + isActive: true }; // Read root-level .bal files @@ -297,14 +295,9 @@ async function getProjectSource(dirPath: string): Promise return projectSource; } -async function getProjectSourceWithTests(dirPath: string): Promise { - const projectRoot = await findBallerinaProjectRoot(dirPath); - - if (!projectRoot) { - return null; - } +async function getProjectSourceWithTests(projectRoot: string): Promise { - const projectSourceWithTests: ProjectSource = await getProjectSource(dirPath); + const projectSourceWithTests: ProjectSource = await getProjectSource(projectRoot); // Read tests const testsDir = path.join(projectRoot, 'tests'); @@ -445,36 +438,6 @@ async function filterTestGenResponse(resp: Response): Promise { - if (dirPath === null) { - return null; - } - - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - return null; - } - - // Check if the directory is within any of the workspace folders - const workspaceFolder = workspaceFolders.find(folder => dirPath.startsWith(folder.uri.fsPath)); - if (!workspaceFolder) { - return null; - } - - let currentDir = dirPath; - - while (currentDir.startsWith(workspaceFolder.uri.fsPath)) { - const ballerinaTomlPath = path.join(currentDir, 'Ballerina.toml'); - if (fs.existsSync(ballerinaTomlPath)) { - return currentDir; - } - currentDir = path.dirname(currentDir); - } - - return null; -} - function isErrorCode(error: any): boolean { return error.hasOwnProperty("code") && error.hasOwnProperty("message"); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts index a855f5a330b..51336418baa 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/ai/utils.ts @@ -26,19 +26,30 @@ import { AIStateMachine } from '../../../src/views/ai-panel/aiMachine'; import { AIMachineEventType } from '@wso2/ballerina-core/lib/state-machine-types'; import { CONFIG_FILE_NAME, ERROR_NO_BALLERINA_SOURCES, PROGRESS_BAR_MESSAGE_FROM_WSO2_DEFAULT_MODEL } from './constants'; import { getCurrentBallerinaProjectFromContext } from '../config-generator/configGenerator'; -import { BallerinaProject } from '@wso2/ballerina-core'; +import { BallerinaProject, LoginMethod } from '@wso2/ballerina-core'; import { BallerinaExtension } from 'src/core'; +import { getAuthCredentials } from '../../utils/ai/auth'; const config = workspace.getConfiguration('ballerina'); const isDevantDev = process.env.CLOUD_ENV === "dev"; -export const BACKEND_URL: string = config.get('rootUrl') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_ROOT_URL : process.env.BALLERINA_DEFAULT_COPLIOT_ROOT_URL; -export const AUTH_ORG: string = config.get('authOrg') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_ORG : process.env.BALLERINA_DEFAULT_COPLIOT_AUTH_ORG; -export const AUTH_CLIENT_ID: string = config.get('authClientID') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID : process.env.BALLERINA_DEFAULT_COPLIOT_AUTH_CLIENT_ID; -export const AUTH_REDIRECT_URL: string = config.get('authRedirectURL') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL : process.env.BALLERINA_DEFAULT_COPLIOT_AUTH_REDIRECT_URL; +export const BACKEND_URL: string = config.get('rootUrl') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_ROOT_URL : process.env.BALLERINA_ROOT_URL; +export const AUTH_ORG: string = config.get('authOrg') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_ORG : process.env.BALLERINA_AUTH_ORG; +export const AUTH_CLIENT_ID: string = config.get('authClientID') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_CLIENT_ID : process.env.BALLERINA_AUTH_CLIENT_ID; +export const AUTH_REDIRECT_URL: string = config.get('authRedirectURL') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_AUTH_REDIRECT_URL : process.env.BALLERINA_AUTH_REDIRECT_URL; -export const DEVANT_API_KEY: string = config.get('devantApiKey') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_CODE_API_KEY : process.env.BALLERINA_DEFAULT_COPLIOT_CODE_API_KEY; -export const DEVANT_API_KEY_FOR_ASK: string = config.get('devantApiKeyForAsk') || isDevantDev ? process.env.BALLERINA_DEV_COPLIOT_ASK_API_KEY : process.env.BALLERINA_DEFAULT_COPLIOT_ASK_API_KEY; -export const DEVANT_STS_TOKEN_CONFIG: string = config.get('cloudStsToken'); +export const DEVANT_STS_TOKEN_CONFIG: string = config.get('cloudStsToken') || process.env.CLOUD_STS_TOKEN; + +//TODO: Move to configs after custom URL approved +const DEVANT_DEV_EXCHANGE_URL = 'https://e95488c8-8511-4882-967f-ec3ae2a0f86f-dev.e1-us-east-azure.choreoapis.dev/ballerina-copilot/devant-token-exchange-ser/v1.0/exchange'; +const DEVANT_PROD_EXCHANGE_URL = 'https://e95488c8-8511-4882-967f-ec3ae2a0f86f-prod.e1-us-east-azure.choreoapis.dev/ballerina-copilot/devant-token-exchange-ser/v1.0/exchange'; + +export function getDevantExchangeUrl(): string { + if (isDevantDev) { + return DEVANT_DEV_EXCHANGE_URL; + } else { + return DEVANT_PROD_EXCHANGE_URL; + } +} // This refers to old backend before FE Migration. We need to eventually remove this. export const OLD_BACKEND_URL: string = BACKEND_URL + "/v2.0"; @@ -135,8 +146,26 @@ export async function getConfigFilePath(ballerinaExtInstance: BallerinaExtension export async function getTokenForDefaultModel() { try { - const token = await getRefreshedAccessToken(); - return token; + const credentials = await getAuthCredentials(); + + if (!credentials) { + throw new Error('No authentication credentials found.'); + } + + // Check login method and handle accordingly + if (credentials.loginMethod === LoginMethod.BI_INTEL) { + // Keep existing behavior for BI Intel - refresh token + const token = await getRefreshedAccessToken(); + return token; + } else if (credentials.loginMethod === LoginMethod.DEVANT_ENV) { + // For Devant, return stored access token + return credentials.secrets.accessToken; + } else { + // For anything else, show error + const errorMessage = 'This feature is only available for BI Intelligence users.'; + vscode.window.showErrorMessage(errorMessage); + throw new Error(errorMessage); + } } catch (error) { throw error; } @@ -284,53 +313,18 @@ async function showNoBallerinaSourceWarningMessage() { import { ProjectSource, ProjectModule, OpenAPISpec } from '@wso2/ballerina-core'; import { langClient } from './activator'; -/** - * Finds the root directory of a Ballerina project by searching for Ballerina.toml - */ -export async function findBallerinaProjectRoot(dirPath: string): Promise { - if (dirPath === null) { - return null; - } - - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - return null; - } - - // Check if the directory is within any of the workspace folders - const workspaceFolder = workspaceFolders.find(folder => dirPath.startsWith(folder.uri.fsPath)); - if (!workspaceFolder) { - return null; - } - - let currentDir = dirPath; - - while (currentDir.startsWith(workspaceFolder.uri.fsPath)) { - const ballerinaTomlPath = path.join(currentDir, 'Ballerina.toml'); - if (fs.existsSync(ballerinaTomlPath)) { - return currentDir; - } - currentDir = path.dirname(currentDir); - } - - return null; -} - /** * Gets the project source including all .bal files and modules */ -export async function getProjectSource(dirPath: string): Promise { - const projectRoot = await findBallerinaProjectRoot(dirPath); - - if (!projectRoot) { - return null; - } +export async function getProjectSource(projectRoot: string): Promise { const projectSource: ProjectSource = { sourceFiles: [], projectTests: [], projectModules: [], - projectName: "" + projectName: "", + packagePath: projectRoot, + isActive: true }; // Read root-level .bal files @@ -375,14 +369,9 @@ export async function getProjectSource(dirPath: string): Promise { - const projectRoot = await findBallerinaProjectRoot(dirPath); - - if (!projectRoot) { - return null; - } +export async function getProjectSourceWithTests(projectRoot: string): Promise { - const projectSourceWithTests: ProjectSource = await getProjectSource(dirPath); + const projectSourceWithTests: ProjectSource = await getProjectSource(projectRoot); // Read tests const testsDir = path.join(projectRoot, 'tests'); diff --git a/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts index cc2561641cf..30cd723aabd 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/bi/activator.ts @@ -15,7 +15,7 @@ * specific language governing permissions and limitations * under the License. */ -import { commands, Uri, workspace, window, ConfigurationTarget } from "vscode"; +import { commands, Uri, workspace, window, ConfigurationTarget, TreeItem } from "vscode"; import { BI_COMMANDS, BIDeleteByComponentInfoRequest, @@ -23,8 +23,8 @@ import { DIRECTORY_MAP, EVENT_TYPE, FlowNode, - FOCUS_FLOW_DIAGRAM_VIEW, - MACHINE_VIEW + MACHINE_VIEW, + ProjectInfo } from "@wso2/ballerina-core"; import { BallerinaExtension } from "../../core"; import { openView } from "../../stateMachine"; @@ -36,86 +36,195 @@ import { readFileSync, readdirSync, statSync } from "fs"; import path from "path"; import { isPositionEqual, isPositionWithinDeletedComponent } from "../../utils/history/util"; import { startDebugging } from "../editor-support/activator"; +import { createBIProjectFromMigration, createBIProjectPure } from "../../utils/bi"; +import { createVersionNumber, findBallerinaPackageRoot, isSupportedSLVersion } from ".././../utils"; +import { extension } from "../../BalExtensionContext"; +import { VisualizerWebview } from "../../views/visualizer/webview"; +import { getCurrentProjectRoot, tryGetCurrentBallerinaFile } from "../../utils/project-utils"; +import { needsProjectDiscovery, promptPackageSelection, requiresPackageSelection } from "../../utils/command-utils"; +import { findWorkspaceTypeFromWorkspaceFolders } from "../../rpc-managers/common/utils"; +import { MESSAGES } from "../project"; const FOCUS_DEBUG_CONSOLE_COMMAND = 'workbench.debug.action.focusRepl'; const TRACE_SERVER_OFF = "off"; const TRACE_SERVER_VERBOSE = "verbose"; +/** + * Helper function to handle command invocation with proper context resolution. + * Supports both tree view clicks and command palette invocation. + * + * @param item - The tree item (undefined when invoked from command palette) + * @param view - The view to open + * @param additionalViewParams - Additional parameters to pass to the view + */ +async function handleCommandWithContext( + item: TreeItem | undefined, + view: MACHINE_VIEW, + additionalViewParams: Record = {} +): Promise { + const { projectInfo, projectPath, view: currentView, workspacePath } = StateMachine.context(); + const isWebviewOpen = VisualizerWebview.currentPanel !== undefined; + const hasActiveTextEditor = !!window.activeTextEditor; + + const currentBallerinaFile = tryGetCurrentBallerinaFile(); + const projectRoot = await findBallerinaPackageRoot(currentBallerinaFile); + + // Scenario 1: Multi-package workspace invoked from command palette + if (!item) { + if (requiresPackageSelection(workspacePath, currentView, projectPath, isWebviewOpen, hasActiveTextEditor)) { + await handleCommandWithPackageSelection(projectInfo, view, additionalViewParams); + return; + } + + if (needsProjectDiscovery(projectInfo, projectRoot, projectPath)) { + try { + const success = await tryHandleCommandWithDiscoveredProject(view, additionalViewParams); + if (!success) { + window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + } + } catch { + window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + } + return; + } + + openView(EVENT_TYPE.OPEN_VIEW, { + view, + projectPath, + ...additionalViewParams + }); + } + // Scenario 2: Invoked from tree view with item context + else if (item?.resourceUri) { + const projectPath = item.resourceUri.fsPath; + openView(EVENT_TYPE.OPEN_VIEW, { + view, + projectPath, + ...additionalViewParams + }); + } + // Scenario 3: Default - no specific context + else { + openView(EVENT_TYPE.OPEN_VIEW, { view, ...additionalViewParams }); + } +} + export function activate(context: BallerinaExtension) { + const isWorkspaceSupported = isSupportedSLVersion(extension.ballerinaExtInstance, createVersionNumber(2201, 13, 0)); + + // Set context for command visibility + commands.executeCommand('setContext', 'ballerina.bi.workspaceSupported', isWorkspaceSupported); + commands.registerCommand(BI_COMMANDS.BI_RUN_PROJECT, () => { - prepareAndGenerateConfig(context, StateMachine.context().projectUri, false, true); + const stateMachineContext = StateMachine.context(); + const { workspacePath, view, projectPath, projectInfo } = stateMachineContext; + const isWebviewOpen = VisualizerWebview.currentPanel !== undefined; + const hasActiveTextEditor = !!window.activeTextEditor; + + const needsPackageSelection = requiresPackageSelection( + workspacePath, view, projectPath, isWebviewOpen, hasActiveTextEditor + ); + + if (needsPackageSelection && projectInfo?.children.length === 0) { + window.showErrorMessage("No packages found in the workspace."); + return; + } + prepareAndGenerateConfig(context, projectPath, false, true, true, needsPackageSelection); }); commands.registerCommand(BI_COMMANDS.BI_DEBUG_PROJECT, () => { commands.executeCommand(FOCUS_DEBUG_CONSOLE_COMMAND); - startDebugging(Uri.file(StateMachine.context().projectUri), false, true); + startDebugging(Uri.file(StateMachine.context().projectPath), false, true); }); - commands.registerCommand(BI_COMMANDS.ADD_CONNECTIONS, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.AddConnectionWizard }); + commands.registerCommand(BI_COMMANDS.ADD_CONNECTIONS, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.AddConnectionWizard); }); - commands.registerCommand(BI_COMMANDS.ADD_CUSTOM_CONNECTOR, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.AddCustomConnector }); + commands.registerCommand(BI_COMMANDS.ADD_CUSTOM_CONNECTOR, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.AddCustomConnector); }); - commands.registerCommand(BI_COMMANDS.ADD_ENTRY_POINT, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIComponentView }); + commands.registerCommand(BI_COMMANDS.ADD_ENTRY_POINT, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.BIComponentView); }); - commands.registerCommand(BI_COMMANDS.ADD_TYPE, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.TypeDiagram, addType: true }); + commands.registerCommand(BI_COMMANDS.ADD_TYPE, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.TypeDiagram, { addType: true }); }); - commands.registerCommand(BI_COMMANDS.VIEW_TYPE_DIAGRAM, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.TypeDiagram, rootDiagramId: `type-diagram-${Date.now()}` }); + commands.registerCommand(BI_COMMANDS.VIEW_TYPE_DIAGRAM, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.TypeDiagram, { rootDiagramId: `type-diagram-${Date.now()}` }); }); - commands.registerCommand(BI_COMMANDS.ADD_FUNCTION, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIFunctionForm }); + commands.registerCommand(BI_COMMANDS.ADD_FUNCTION, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.BIFunctionForm); }); - commands.registerCommand(BI_COMMANDS.ADD_CONFIGURATION, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.AddConfigVariables }); + commands.registerCommand(BI_COMMANDS.ADD_CONFIGURATION, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.AddConfigVariables); }); - commands.registerCommand(BI_COMMANDS.VIEW_CONFIGURATION, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.ViewConfigVariables }); + commands.registerCommand(BI_COMMANDS.VIEW_CONFIGURATION, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.ViewConfigVariables); }); commands.registerCommand(BI_COMMANDS.SHOW_OVERVIEW, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.Overview }); + const isBallerinaWorkspace = !!StateMachine.context().workspacePath; + if (isBallerinaWorkspace) { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.WorkspaceOverview }); + } else { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.PackageOverview }); + } }); - commands.registerCommand(BI_COMMANDS.ADD_PROJECT, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIComponentView }); - }); + commands.registerCommand(BI_COMMANDS.ADD_PROJECT, async () => { + if (!isWorkspaceSupported) { + window.showErrorMessage('This command requires Ballerina version 2201.13.0 or higher. '); + return; + } - commands.registerCommand(BI_COMMANDS.ADD_DATA_MAPPER, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIDataMapperForm }); + const projectPath = StateMachine.context().projectPath || StateMachine.context().workspacePath; + if (projectPath) { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIAddProjectForm }); + } else { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIProjectForm }); + } }); - commands.registerCommand(BI_COMMANDS.ADD_NATURAL_FUNCTION, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BINPFunctionForm }); + commands.registerCommand(BI_COMMANDS.ADD_DATA_MAPPER, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.BIDataMapperForm); }); - commands.registerCommand(BI_COMMANDS.SWITCH_PROJECT, async () => { - // Hack to switch the project. This will reload the window and prompt the user to select the project. - // This is a temporary solution until we provide the support for multi root workspaces. - StateMachine.sendEvent("SWITCH_PROJECT" as any); + commands.registerCommand(BI_COMMANDS.ADD_NATURAL_FUNCTION, async (item?: TreeItem) => { + await handleCommandWithContext(item, MACHINE_VIEW.BINPFunctionForm); }); commands.registerCommand(BI_COMMANDS.TOGGLE_TRACE_LOGS, toggleTraceLogs); - commands.registerCommand(BI_COMMANDS.DELETE_COMPONENT, async (item: any) => { + commands.registerCommand(BI_COMMANDS.CREATE_BI_PROJECT, (params) => { + return createBIProjectPure(params); + }); + + commands.registerCommand(BI_COMMANDS.CREATE_BI_MIGRATION_PROJECT, (params) => { + return createBIProjectFromMigration(params); + }); + + commands.registerCommand(BI_COMMANDS.DELETE_COMPONENT, async (item?: TreeItem & { info?: string }) => { + // Guard: DELETE requires a tree item context + if (!item) { + window.showErrorMessage('This command must be invoked from the project explorer.'); + return; + } + console.log(">>> delete component", item); if (item.contextValue === DIRECTORY_MAP.CONNECTION) { - await handleConnectionDeletion(item.label, item.info); + await handleConnectionDeletion(item.label as string, item.info); } else if (item.contextValue === DIRECTORY_MAP.LOCAL_CONNECTORS) { - await handleLocalModuleDeletion(item.label, item.info); + await handleLocalModuleDeletion(item.label as string, item.info); } else { - await handleComponentDeletion(item.contextValue, item.label, item.info); + await handleComponentDeletion(item.contextValue as string, item.label as string, item.info); } }); @@ -125,8 +234,11 @@ export function activate(context: BallerinaExtension) { function openBallerinaTomlFile(context: BallerinaExtension) { - const projectRoot = StateMachine.context().projectUri; - const ballerinaTomlFile = path.join(projectRoot, "Ballerina.toml"); + const projectPath = StateMachine.context().projectPath || StateMachine.context().workspacePath; + if (!projectPath) { + return; + } + const ballerinaTomlFile = path.join(projectPath, "Ballerina.toml"); try { const content = readFileSync(ballerinaTomlFile, "utf8"); if (content) { @@ -148,12 +260,12 @@ function openBallerinaTomlFile(context: BallerinaExtension) { } function openAllBallerinaFiles(context: BallerinaExtension) { - const projectRoot = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; - if (context.langClient && projectRoot) { + if (context.langClient && projectPath) { try { // Find all Ballerina files in the project - const ballerinaFiles = findBallerinaFiles(projectRoot); + const ballerinaFiles = findBallerinaFiles(projectPath); console.log(`>>> Found ${ballerinaFiles.length} Ballerina files in the project`); // Open each Ballerina file @@ -205,7 +317,10 @@ const findBallerinaFiles = (dir: string, fileList: string[] = []): string[] => { const handleComponentDeletion = async (componentType: string, itemLabel: string, filePath: string) => { const rpcClient = new BiDiagramRpcManager(); - const componentCategory = StateMachine.context().projectStructure.directoryMap[componentType]; + const projectPath = StateMachine.context().projectPath; + const projectStructure = await rpcClient.getProjectStructure(); + const project = projectStructure.projects.find(project => project.projectPath === projectPath); + const componentCategory = project?.directoryMap[componentType]; if (!componentCategory) { console.error(`Component type ${componentType} not found in project structure`); @@ -254,7 +369,7 @@ const handleConnectionDeletion = async (itemLabel: string, filePath: string) => console.log(">>> Updated source code after delete", response); if (response.artifacts) { if (hasNoComponentsOpenInDiagram() || isFlowNodeOpenInDiagram(connector)) { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.Overview }); + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.PackageOverview }); } } else { console.error(">>> Error updating source code", response); @@ -277,7 +392,7 @@ async function deleteComponent(component: ComponentInfo, rpcClient: BiDiagramRpc await rpcClient.deleteByComponentInfo(req); if (hasNoComponentsOpenInDiagram() || isComponentOpenInDiagram(component)) { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.Overview }); + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.PackageOverview }); } } @@ -315,7 +430,7 @@ function isFlowNodeOpenInDiagram(connector: FlowNode) { endLine: connector.codedata.lineRange.endLine.line, endColumn: connector.codedata.lineRange.endLine.offset }; - const flowNodeFilePath = path.join(StateMachine.context().projectUri, connector.codedata.lineRange.fileName); + const flowNodeFilePath = path.join(StateMachine.context().projectPath, connector.codedata.lineRange.fileName); return isFilePathsEqual(openedComponentFilePath, flowNodeFilePath) && isPositionEqual(openedCompoentPosition, flowNodePosition); @@ -350,3 +465,63 @@ function toggleTraceLogs() { window.showInformationMessage('BI extension trace logs enabled'); } } + +async function handleCommandWithPackageSelection( + projectInfo: ProjectInfo, + view: MACHINE_VIEW, + additionalViewParams: Record = {} +): Promise { + const availablePackages = projectInfo?.children.map((child: any) => child.projectPath) ?? []; + + if (availablePackages.length === 0) { + window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return false; + } + + const selectedPackage = await promptPackageSelection(availablePackages); + + if (!selectedPackage) { + return false; // User cancelled + } + + openView(EVENT_TYPE.OPEN_VIEW, { + view, + projectPath: selectedPackage, + ...additionalViewParams + }); + return true; +} + +async function tryHandleCommandWithDiscoveredProject( + view: MACHINE_VIEW, + additionalViewParams: Record = {} +): Promise { + const workspaceType = await findWorkspaceTypeFromWorkspaceFolders(); + const packageRoot = await getCurrentProjectRoot(); + + if (!packageRoot) { + return false; + } + + if (workspaceType.type === "MULTIPLE_PROJECTS") { + const projectInfo = await StateMachine.langClient().getProjectInfo({ projectPath: packageRoot }); + await StateMachine.updateProjectRootAndInfo(packageRoot, projectInfo); + openView(EVENT_TYPE.OPEN_VIEW, { + view, + projectPath: packageRoot, + ...additionalViewParams + }); + return true; + } + + if (workspaceType.type === "BALLERINA_WORKSPACE") { + openView(EVENT_TYPE.OPEN_VIEW, { + view, + projectPath: packageRoot, + ...additionalViewParams + }); + return true; + } + + return false; +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts b/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts index 5c437fd2363..4a21bf27d09 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/config-generator/configGenerator.ts @@ -18,10 +18,9 @@ import { window, Uri, commands } from "vscode"; import { existsSync, readFileSync, writeFile } from "fs"; -import { BAL_CONFIG_FILE, PALETTE_COMMANDS, clearTerminal } from "../project"; +import { BAL_CONFIG_FILE, MESSAGES, PALETTE_COMMANDS, clearTerminal } from "../project"; import { BallerinaExtension, ExtendedLangClient } from "../../core"; -import { extension } from "../../BalExtensionContext"; -import { getCurrentBallerinaProject } from "../../utils/project-utils"; +import { getCurrentBallerinaProject, getCurrentProjectRoot } from "../../utils/project-utils"; import { typeOfComment } from "./utils"; import { ConfigProperty, ConfigTypes, Constants, Property } from "./model"; import { BallerinaProject, ConfigVariableResponse, EVENT_TYPE, MACHINE_VIEW, PackageConfigSchema, ProjectDiagnosticsResponse, SyntaxTree } from "@wso2/ballerina-core"; @@ -29,38 +28,107 @@ import { TextDocumentEdit } from "vscode-languageserver-types"; import { modifyFileContent } from "../../utils/modification"; import { fileURLToPath } from "url"; import { startDebugging } from "../editor-support/activator"; -import { openView } from "../../stateMachine"; +import { openView, StateMachine } from "../../stateMachine"; import * as path from "path"; +import { TracerMachine } from "../tracing"; +import { VisualizerWebview } from "../../views/visualizer/webview"; +import { promptPackageSelection } from "../../utils/command-utils"; const UNUSED_IMPORT_ERR_CODE = "BCE2002"; -export async function prepareAndGenerateConfig(ballerinaExtInstance: BallerinaExtension, filePath: string, isCommand?: boolean, isBi?: boolean, executeRun: boolean = true, includeOptional: boolean = false): Promise { - const currentProject: BallerinaProject | undefined = await getCurrentBIProject(filePath); - const ignoreFile = path.join(currentProject.path, ".gitignore"); - const configFile = path.join(currentProject.path, BAL_CONFIG_FILE); +export async function prepareAndGenerateConfig( + ballerinaExtInstance: BallerinaExtension, + projectPath: string, + isCommand?: boolean, + isBi?: boolean, + executeRun: boolean = true, + needsPackageSelection: boolean = false +): Promise { + + let packagePath: string; + let packageName: string; + + if (needsPackageSelection) { + try { + const packages = StateMachine.context().projectInfo?.children; + const packageList = packages?.map((child) => child.projectPath) ?? []; + + const selectedPackage = await promptPackageSelection(packageList, "Select a package to run"); + + // User cancelled selection + if (!selectedPackage) { + return; + } + + const selectedPackageInfo = packages?.find((child) => child.projectPath === selectedPackage); + + if (!selectedPackageInfo) { + throw new Error("Failed to find selected package information."); + } + + packagePath = selectedPackageInfo.projectPath; + packageName = selectedPackageInfo.name; + + if (isBi) { + openView( + EVENT_TYPE.OPEN_VIEW, + { view: MACHINE_VIEW.PackageOverview, projectPath: selectedPackage }, + true + ); + } + } catch (error) { + console.error("Error selecting package:", error); + return; + } + } else { + const currentProject: BallerinaProject | undefined = await getCurrentBIProject(projectPath); + + if (!currentProject) { + window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return; + } + + packagePath = currentProject.path; + packageName = currentProject.packageName; + + const isWebviewOpen = VisualizerWebview.currentPanel !== undefined; + if (isBi && !isWebviewOpen) { + openView( + EVENT_TYPE.OPEN_VIEW, + { view: MACHINE_VIEW.PackageOverview, projectPath: packagePath }, + true + ); + } + } + + const ignoreFile = path.join(packagePath, ".gitignore"); + const configFile = path.join(packagePath, BAL_CONFIG_FILE); const hasWarnings = ( await checkConfigUpdateRequired( ballerinaExtInstance, - filePath + packagePath )).hasWarnings; if (!hasWarnings) { if (!isCommand && executeRun) { - executeRunCommand(ballerinaExtInstance, filePath, isBi); + executeRunCommand(ballerinaExtInstance, packagePath, isBi); } return; } - await handleOnUnSetValues(currentProject.packageName, configFile, ignoreFile, ballerinaExtInstance, isCommand, isBi); + await handleOnUnSetValues(packageName, configFile, ignoreFile, ballerinaExtInstance, isCommand, isBi); } -export async function checkConfigUpdateRequired(ballerinaExtInstance: BallerinaExtension, filePath: string): Promise<{ hasWarnings: boolean }> { +export async function checkConfigUpdateRequired( + ballerinaExtInstance: BallerinaExtension, + projectPath: string +): Promise<{ hasWarnings: boolean }> { try { const showLibraryConfigVariables = ballerinaExtInstance.showLibraryConfigVariables(); const response = await ballerinaExtInstance.langClient?.getConfigVariablesV2({ - projectPath: filePath, + projectPath, includeLibraries: showLibraryConfigVariables !== false }) as ConfigVariableResponse; @@ -140,9 +208,8 @@ export async function getCurrentBallerinaProjectFromContext(ballerinaExtInstance } export async function getCurrentBIProject(projectPath: string): Promise { - let currentProject: BallerinaProject = {}; - currentProject = await getCurrentBallerinaProject(projectPath); - return currentProject; + const projectRoot = await getCurrentProjectRoot(); + return await getCurrentBallerinaProject(projectRoot || projectPath); } export async function handleOnUnSetValues(packageName: string, configFile: string, ignoreFile: string, ballerinaExtInstance: BallerinaExtension, isCommand: boolean, isBi: boolean): Promise { @@ -212,6 +279,7 @@ export async function handleOnUnSetValues(packageName: string, configFile: strin async function executeRunCommand(ballerinaExtInstance: BallerinaExtension, filePath: string, isBi?: boolean) { + TracerMachine.startServer(); if (ballerinaExtInstance.enabledRunFast() || isBi) { filePath = (await getCurrentBallerinaProject(filePath)).path; const projectHasErrors = await cleanAndValidateProject(ballerinaExtInstance.langClient, filePath); @@ -222,7 +290,7 @@ async function executeRunCommand(ballerinaExtInstance: BallerinaExtension, fileP await startDebugging(Uri.file(filePath), false, true, true); } } else { - commands.executeCommand(PALETTE_COMMANDS.RUN_CMD); + commands.executeCommand(PALETTE_COMMANDS.RUN_CMD, filePath); } } diff --git a/workspaces/ballerina/ballerina-extension/src/features/config-generator/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/config-generator/utils.ts index c5dd385cd0c..a91436e6909 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/config-generator/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/config-generator/utils.ts @@ -17,7 +17,7 @@ */ import { debug } from "../../utils/logger"; -import toml from "toml"; +import { parse } from "@iarna/toml"; import { CompletionItem, CompletionItemKind, Position, TextDocument, Uri } from "vscode"; import { BallerinaExtension } from "../../core"; import { findPropertyValues, getConfigValue, getCurrentBallerinaProjectFromContext } from "./configGenerator"; @@ -33,7 +33,7 @@ export const typeOfComment = 'Type of'; */ export function parseTomlToConfig(tomlContent: string): object { try { - return toml.parse(tomlContent); + return parse(tomlContent); } catch (error) { debug("Error while parsing the Config.toml file content: " + error); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts b/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts index dfc152e73c4..18b6c9890b4 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/debugger/config-provider.ts @@ -27,7 +27,7 @@ import { DebugAdapterTrackerFactory, DebugAdapterTracker, ViewColumn, - TabInputText + TaskScope } from 'vscode'; import * as child_process from "child_process"; import { getPortPromise } from 'portfinder'; @@ -36,24 +36,29 @@ import { BallerinaExtension, LANGUAGE, OLD_BALLERINA_VERSION_DEBUGGER_RUNINTERMINAL, UNSUPPORTED_DEBUGGER_RUNINTERMINAL_KIND, INVALID_DEBUGGER_RUNINTERMINAL_KIND } from '../../core'; -import { ExtendedLangClient } from '../../core/extended-language-client'; import { TM_EVENT_START_DEBUG_SESSION, CMP_DEBUGGER, sendTelemetryEvent, sendTelemetryException, CMP_NOTEBOOK, TM_EVENT_START_NOTEBOOK_DEBUG } from '../telemetry'; -import { log, debug as debugLog, isSupportedSLVersion, isWindows } from "../../utils"; +import { + log, + debug as debugLog, + isSupportedSLVersion, + isWindows, + createVersionNumber +} from "../../utils"; +import { getProjectWorkingDirectory } from "../../utils/file-utils"; import { decimal, ExecutableOptions } from 'vscode-languageclient/node'; import { BAL_NOTEBOOK, getTempFile, NOTEBOOK_CELL_SCHEME } from '../../views/notebook'; import fileUriToPath from 'file-uri-to-path'; -import { existsSync, readFileSync } from 'fs'; -import { dirname, join, sep } from 'path'; -import { parseTomlToConfig } from '../config-generator/utils'; +import { existsSync } from 'fs'; +import { join } from 'path'; import { LoggingDebugSession, OutputEvent, TerminatedEvent } from 'vscode-debugadapter'; import { DebugProtocol } from 'vscode-debugprotocol'; -import { PALETTE_COMMANDS, PROJECT_TYPE } from '../project/cmds/cmd-runner'; +import { PALETTE_COMMANDS } from '../project/cmds/cmd-runner'; import { Disposable } from 'monaco-languageclient'; -import { getCurrentBallerinaFile, getCurrentBallerinaProject } from '../../utils/project-utils'; -import { BallerinaProject, BallerinaProjectComponents, BIGetEnclosedFunctionRequest, EVENT_TYPE, MainFunctionParamsResponse } from '@wso2/ballerina-core'; +import { getCurrentProjectRoot, selectBallerinaProjectForDebugging } from '../../utils/project-utils'; +import { BallerinaProjectComponents, BIGetEnclosedFunctionRequest, EVENT_TYPE, MainFunctionParamsResponse } from '@wso2/ballerina-core'; import { openView, StateMachine } from '../../stateMachine'; import { waitForBallerinaService } from '../tryit/utils'; import { BreakpointManager } from './breakpoint-manager'; @@ -67,9 +72,6 @@ import { findHighestVersionJdk } from '../../utils/server/server'; const BALLERINA_COMMAND = "ballerina.command"; const EXTENDED_CLIENT_CAPABILITIES = "capabilities"; -const BALLERINA_TOML_REGEX = `**${sep}Ballerina.toml`; -const BALLERINA_FILE_REGEX = `**${sep}*.bal`; -const BALLERINA_TOML = `Ballerina.toml`; export enum DEBUG_REQUEST { LAUNCH = 'launch' @@ -80,17 +82,6 @@ export enum DEBUG_CONFIG { TEST_DEBUG_NAME = 'Ballerina Test' } -export interface BALLERINA_TOML { - package: PACKAGE; - "build-options": any; -} - -export interface PACKAGE { - org: string; - name: string; - version: string; - distribution: string; -} class DebugConfigProvider implements DebugConfigurationProvider { async resolveDebugConfiguration(_folder: WorkspaceFolder, config: DebugConfiguration) @@ -114,7 +105,7 @@ function getValueFromProgramArgs(programArgs: string[], idx: number) { async function handleMainFunctionParams(config: DebugConfiguration) { const res = await extension.ballerinaExtInstance.langClient?.getMainFunctionParams({ projectRootIdentifier: { - uri: "file://" + StateMachine.context().projectUri + uri: Uri.file(StateMachine.context().projectPath).toString() } }) as MainFunctionParamsResponse; if (res.hasMain) { @@ -253,6 +244,12 @@ async function getModifiedConfigs(workspaceFolder: WorkspaceFolder, config: Debu config.noDebug = Boolean(config.noDebug); + // Notify debug server that the debug session is started in low-code mode + const isWebviewPresent = isVisualizerWebviewActive(); + if (isWebviewPresent && StateMachine.context().isBI) { + config.lowCodeMode = true; + } + const activeTextEditor = window.activeTextEditor; if (activeTextEditor && activeTextEditor.document.fileName.endsWith(BAL_NOTEBOOK)) { @@ -267,52 +264,11 @@ async function getModifiedConfigs(workspaceFolder: WorkspaceFolder, config: Debu } if (!config.script) { - const tomls = await workspace.findFiles(workspaceFolder ? new RelativePattern(workspaceFolder, BALLERINA_TOML_REGEX) : BALLERINA_TOML_REGEX); - const projects: { project: BallerinaProject; balFile: Uri; relativePath: string }[] = []; - for (const toml of tomls) { - const projectRoot = dirname(toml.fsPath); - const balFiles = await workspace.findFiles(new RelativePattern(projectRoot, BALLERINA_FILE_REGEX), undefined, 1); - if (balFiles.length > 0) { - - const tomlContent: string = readFileSync(toml.fsPath, 'utf8'); - const tomlObj: BALLERINA_TOML = parseTomlToConfig(tomlContent) as BALLERINA_TOML; - const relativePath = workspace.asRelativePath(projectRoot); - projects.push({ project: { packageName: tomlObj.package.name }, balFile: balFiles[0], relativePath }); - } - } - - if (projects.length > 0) { - if (projects.length === 1) { - config.script = projects[0].balFile.fsPath; - } else { - const selectedProject = await window.showQuickPick(projects.map((project) => { - return { - label: project.project.packageName, - description: project.relativePath - }; - }), { placeHolder: "Select a Ballerina project to debug", canPickMany: false }); - if (selectedProject) { - config.script = projects[projects.indexOf(projects.find((project) => { - return project.project.packageName === selectedProject.label; - }))].balFile.fsPath; - } else { - return Promise.reject(); - } - } + // If webview is present and in BI mode, use the project path from the state machine (focused project in BI) + if (StateMachine.context().isBI && isWebviewPresent && StateMachine.context().projectPath) { + config.script = StateMachine.context().projectPath; } else { - extension.ballerinaExtInstance.showMessageInvalidProject(); - return Promise.reject(); - } - - let langClient = extension.ballerinaExtInstance.langClient; - if (langClient.initializeResult) { - const { experimental } = langClient.initializeResult!.capabilities; - if (experimental && experimental.introspection && experimental.introspection.port > 0) { - config.networkLogsPort = experimental.introspection.port; - if (config.networkLogs === undefined) { - config.networkLogs = false; - } - } + config.script = await selectBallerinaProjectForDebugging(workspaceFolder); } } @@ -338,14 +294,13 @@ async function getModifiedConfigs(workspaceFolder: WorkspaceFolder, config: Debu config.debugServer = debugServerPort.toString(); } - // Notify debug server that the debug session is started in low-code mode - const isWebviewPresent = VisualizerWebview.currentPanel !== undefined; - if (isWebviewPresent && StateMachine.context().isBI) { - config.lowCodeMode = true; - } return config; } +function isVisualizerWebviewActive() { + return VisualizerWebview.currentPanel !== undefined; +} + export async function constructDebugConfig(uri: Uri, testDebug: boolean, args?: any): Promise { const launchConfig: WorkspaceConfiguration = workspace.getConfiguration('launch').length > 0 ? workspace.getConfiguration('launch') : @@ -467,7 +422,7 @@ class BallerinaDebugAdapterTrackerFactory implements DebugAdapterTrackerFactory BreakpointManager.getInstance().setActiveBreakpoint(clientBreakpoint); if (isWebviewPresent) { - await handleBreakpointVisualization(uri, clientBreakpoint); + await handleDebugHitVisualization(uri, clientBreakpoint); } } else if (msg.command === "continue" || msg.command === "next" || msg.command === "stepIn" || msg.command === "stepOut") { // clear the active breakpoint @@ -484,7 +439,7 @@ class BallerinaDebugAdapterTrackerFactory implements DebugAdapterTrackerFactory notifyBreakpointChange(); // restart the fast-run - getCurrentRoot().then(async (root) => { + getCurrentProjectRoot().then(async (root) => { const didStop = await stopRunFast(root); if (didStop) { runFast(root, msg.body); @@ -516,13 +471,13 @@ class BallerinaDebugAdapterTrackerFactory implements DebugAdapterTrackerFactory } } -async function handleBreakpointVisualization(uri: Uri, clientBreakpoint: DebugProtocol.StackFrame) { +async function handleDebugHitVisualization(uri: Uri, clientBreakpoint: DebugProtocol.StackFrame) { const newContext = StateMachine.context(); - // Check if breakpoint is in a different project - if (!uri.fsPath.startsWith(newContext.projectUri)) { - console.log("Breakpoint is in a different project"); - window.showInformationMessage("Cannot visualize breakpoint since it belongs to a different project"); + // Check if breakpoint is in a different package + if (!uri.fsPath.startsWith(newContext.projectPath)) { + console.log("Debug hit in a different package"); + window.showInformationMessage("Cannot visualize debug hit since it belongs to a different integration"); openView(EVENT_TYPE.OPEN_VIEW, newContext); notifyBreakpointChange(); return; @@ -540,7 +495,7 @@ async function handleBreakpointVisualization(uri: Uri, clientBreakpoint: DebugPr const res = await StateMachine.langClient().getEnclosedFunctionDef(req); if (!res?.startLine || !res?.endLine) { - window.showInformationMessage("Failed to open the respective view for the breakpoint. Please manually navigate to the respective view."); + window.showInformationMessage("Failed to open the respective view for the debug hit. Please manually navigate to the respective view."); notifyBreakpointChange(); return; } @@ -570,7 +525,7 @@ class BallerinaDebugAdapterDescriptorFactory implements DebugAdapterDescriptorFa async createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable | undefined): Promise { // Check if the project contains errors(and fix the possible ones) before starting the debug session const langClient = extension.ballerinaExtInstance.langClient; - const projectRoot = await getCurrentRoot(); + const projectRoot = await getCurrentProjectRoot(); await cleanAndValidateProject(langClient, projectRoot); // Check if config generation is required before starting the debug session @@ -582,7 +537,7 @@ class BallerinaDebugAdapterDescriptorFactory implements DebugAdapterDescriptorFa }); } - if (session.configuration.noDebug && StateMachine.context().isBI) { + if (session.configuration.noDebug) { return new Promise((resolve) => { resolve(new DebugAdapterInlineImplementation(new BIRunAdapter())); }); @@ -665,7 +620,7 @@ class FastRunDebugAdapter extends LoggingDebugSession { }); this.notificationHandler = notificationHandler; this.programArgs = (args as any).programArgs; - getCurrentRoot().then((root) => { + getCurrentProjectRoot().then((root) => { this.root = root; runFast(root, { programArgs: this.programArgs }).then((didRan) => { response.success = didRan; @@ -692,48 +647,73 @@ class BIRunAdapter extends LoggingDebugSession { taskTerminationListener: Disposable | null = null; protected launchRequest(response: DebugProtocol.LaunchResponse, args: DebugProtocol.LaunchRequestArguments, request?: DebugProtocol.Request): void { - const taskDefinition: TaskDefinition = { - type: 'shell', - task: 'run' - }; + getCurrentProjectRoot().then((projectRoot) => { + const taskDefinition: TaskDefinition = { + type: 'shell', + task: 'run' + }; - let runCommand: string = `${extension.ballerinaExtInstance.getBallerinaCmd()} run`; + let runCommand: string = `${extension.ballerinaExtInstance.getBallerinaCmd()} run`; - const programArgs = (args as any).programArgs; - if (programArgs && programArgs.length > 0) { - runCommand = `${runCommand} -- ${programArgs.join(' ')}`; - } + const programArgs = (args as any).programArgs; + if (programArgs && programArgs.length > 0) { + runCommand = `${runCommand} -- ${programArgs.join(' ')}`; + } - if (isSupportedSLVersion(extension.ballerinaExtInstance, 2201130) && extension.ballerinaExtInstance.enabledExperimentalFeatures()) { - runCommand = `${runCommand} --experimental`; - } + if (isSupportedSLVersion(extension.ballerinaExtInstance, createVersionNumber(2201, 13, 0)) && extension.ballerinaExtInstance.enabledExperimentalFeatures()) { + runCommand = `${runCommand} --experimental`; + } - const execution = new ShellExecution(runCommand); - const task = new Task( - taskDefinition, - workspace.workspaceFolders![0], // Assumes at least one workspace folder is open - 'Ballerina Run', - 'ballerina', - execution - ); + // Use the current process environment which should have the updated PATH + const env = process.env; + debugLog(`[BIRunAdapter] Creating shell execution with env. PATH length: ${env.PATH?.length || 0}`); + + // Determine the correct working directory for the task + let cwd: string; + try { + cwd = getProjectWorkingDirectory(projectRoot); + debugLog(`[BIRunAdapter] Setting cwd to project root: ${cwd}`); + } catch (error) { + window.showErrorMessage(`Failed to determine working directory`); + response.success = false; + this.sendResponse(response); + throw error; + } - try { - tasks.executeTask(task).then((taskExecution) => { - this.task = taskExecution; + const execution = new ShellExecution(runCommand, { + env: env as { [key: string]: string }, + cwd: cwd + }); + const task = new Task( + taskDefinition, + TaskScope.Workspace, + 'Ballerina Run', + 'ballerina', + execution + ); + + try { + tasks.executeTask(task).then((taskExecution) => { + this.task = taskExecution; + + // Add task termination listener + this.taskTerminationListener = tasks.onDidEndTaskProcess(e => { + if (e.execution === this.task) { + this.sendEvent(new TerminatedEvent()); + } + }); - // Add task termination listener - this.taskTerminationListener = tasks.onDidEndTaskProcess(e => { - if (e.execution === this.task) { - this.sendEvent(new TerminatedEvent()); - } + response.success = true; + this.sendResponse(response); }); - - response.success = true; - this.sendResponse(response); - }); - } catch (error) { - window.showErrorMessage(`Failed to run Ballerina package: ${error}`); - } + } catch (error) { + window.showErrorMessage(`Failed to run Ballerina package: ${error}`); + } + }).catch((error) => { + window.showErrorMessage(`Failed to determine project root: ${error}`); + response.success = false; + this.sendResponse(response); + }); } protected disconnectRequest(response: DebugProtocol.DisconnectResponse, args: DebugProtocol.DisconnectArguments, request?: DebugProtocol.Request): void { @@ -790,29 +770,6 @@ async function stopRunFast(root: string): Promise { }); } -async function getCurrentRoot(): Promise { - let file: string | undefined; - try { - file = getCurrentBallerinaFile(); - } catch (error) { - // ignore - } - - // If no Ballerina files are open, safe to assume that the workspace root is same as the package root in BI mode. - if (!file) { - const workspaceRoot = getWorkspaceRoot(); - if (!workspaceRoot && StateMachine.context().isBI) { - throw new Error("Unable to determine the current workspace root."); - } - if (isBallerinaProject(workspaceRoot)) { - return workspaceRoot; - } - } - - const currentProject = await getCurrentBallerinaProject(file); - return (currentProject.kind !== PROJECT_TYPE.SINGLE_FILE) ? currentProject.path! : file; -} - function getJavaCommand(): string { const ballerinaHome = isWindows() ? fs.realpathSync.native(extension.ballerinaExtInstance.getBallerinaHome()) : extension.ballerinaExtInstance.getBallerinaHome(); // Get the base ballerina home by removing the distribution part @@ -839,10 +796,6 @@ function getJavaCommand(): string { return cmd; } -function getWorkspaceRoot(): string | undefined { - return workspace.workspaceFolders?.[0]?.uri.fsPath; -} - function findFreePort(): Promise { return getPortPromise({ port: 5010, stopPort: 20000 }); } @@ -851,8 +804,3 @@ function isFastRunEnabled(): boolean { const config = workspace.getConfiguration('ballerina'); return config.get('enableRunFast'); } - -function isBallerinaProject(projectPath: string): boolean { - const ballerinaToml = path.join(projectPath, BALLERINA_TOML); - return existsSync(ballerinaToml); -} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts index 8aa3c529bd6..29450ad8354 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/devant/activator.ts @@ -41,7 +41,7 @@ export function activateDevantFeatures(_ballerinaExtInstance: BallerinaExtension } const handleComponentPushToDevant = async () => { - const projectRoot = StateMachine.context().projectUri; + const projectRoot = StateMachine.context().projectPath; if (!projectRoot) { return; } @@ -75,10 +75,14 @@ const handleComponentPushToDevant = async () => { if (!StateMachine.context().projectStructure) { return; } - - const services = StateMachine.context().projectStructure.directoryMap[DIRECTORY_MAP.SERVICE]; - const automation = StateMachine.context().projectStructure.directoryMap[DIRECTORY_MAP.AUTOMATION]; - + const projectStructure = StateMachine.context().projectStructure.projects.find( + (proj) => proj.projectPath === projectRoot + ); + if (!projectStructure) { + return; + } + const services = projectStructure?.directoryMap[DIRECTORY_MAP.SERVICE]; + const automation = projectStructure?.directoryMap[DIRECTORY_MAP.AUTOMATION]; const scopeSet = new Set(); if (services) { @@ -120,7 +124,7 @@ const handleComponentPushToDevant = async () => { const deployementParams: ICreateComponentCmdParams = { integrationType: integrationType as any, buildPackLang: "ballerina", - componentDir: StateMachine.context().projectUri, + componentDir: StateMachine.context().projectPath, extName: "Devant", }; commands.executeCommand(PlatformCommandIds.CreateNewComponent, deployementParams); diff --git a/workspaces/ballerina/ballerina-extension/src/features/natural-programming/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/natural-programming/activator.ts index a1aecbde09f..2c8397cc9ef 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/natural-programming/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/natural-programming/activator.ts @@ -28,11 +28,11 @@ import { MONITERED_EXTENSIONS, COMMAND_SHOW_TEXT } from './constants'; -import { isSupportedSLVersion } from "../../utils"; +import { isSupportedSLVersion, createVersionNumber } from "../../utils"; import { CustomDiagnostic } from './custom-diagnostics'; let diagnosticCollection: vscode.DiagnosticCollection; -const BALLERINA_UPDATE_13 = 2201130; +const BALLERINA_UPDATE_13 = createVersionNumber(2201, 13, 0); // Version 2201.13.0 export function activate(ballerinaExtInstance: BallerinaExtension) { const backgroundDriftCheckConfig = vscode.workspace.getConfiguration().get(ENABLE_BACKGROUND_DRIFT_CHECK); @@ -41,7 +41,7 @@ export function activate(ballerinaExtInstance: BallerinaExtension) { diagnosticCollection = vscode.languages.createDiagnosticCollection('ballerina'); ballerinaExtInstance.context.subscriptions.push(diagnosticCollection); - const projectPath = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; if (backgroundDriftCheckConfig) { if (!ballerinaExtInstance.context || projectPath == null || projectPath == "") { return; diff --git a/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts index 71c8ff9e862..49847d9fb9d 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/natural-programming/utils.ts @@ -39,8 +39,8 @@ import { } from "./constants"; import { isError, isNumber } from 'lodash'; import { HttpStatusCode } from 'axios'; -import { OLD_BACKEND_URL } from '../ai/utils'; import { AIMachineEventType, BallerinaProject, BIIntelSecrets, LoginMethod } from '@wso2/ballerina-core'; +import { isBallerinaProjectAsync, OLD_BACKEND_URL } from '../ai/utils'; import { getCurrentBallerinaProjectFromContext } from '../config-generator/configGenerator'; import { BallerinaExtension } from 'src/core'; import { getAccessToken as getAccesstokenFromUtils, getLoginMethod, getRefreshedAccessToken, REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE, TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL } from '../../../src/utils/ai/auth'; @@ -49,11 +49,11 @@ import { fetchWithAuth } from '../ai/service/connection'; let controller = new AbortController(); -export async function getLLMDiagnostics(projectUri: string, diagnosticCollection +export async function getLLMDiagnostics(projectPath: string, diagnosticCollection : vscode.DiagnosticCollection): Promise { - const ballerinaProjectSource: BallerinaSource = await getBallerinaProjectSourceFiles(projectUri); + const ballerinaProjectSource: BallerinaSource = await getBallerinaProjectSourceFiles(projectPath); const sourcesOfNonDefaultModulesWithReadme: BallerinaSource[] - = getSourcesOfNonDefaultModulesWithReadme(path.join(projectUri, "modules")); + = getSourcesOfNonDefaultModulesWithReadme(path.join(projectPath, "modules")); const sources: BallerinaSource[] = [ballerinaProjectSource, ...sourcesOfNonDefaultModulesWithReadme]; const backendurl = await getBackendURL(); @@ -69,7 +69,7 @@ export async function getLLMDiagnostics(projectUri: string, diagnosticCollection return responses; } - await createDiagnosticCollection(responses, projectUri, diagnosticCollection); + await createDiagnosticCollection(responses, projectPath, diagnosticCollection); } async function getLLMResponses(sources: BallerinaSource[], token: string, backendurl: string) @@ -143,12 +143,15 @@ async function getLLMResponses(sources: BallerinaSource[], token: string, backen return extractedResponses; } -async function createDiagnosticCollection(responses: any[], projectUri: string, - diagnosticCollection: vscode.DiagnosticCollection) { +async function createDiagnosticCollection( + responses: any[], + projectPath: string, + diagnosticCollection: vscode.DiagnosticCollection +) { let diagnosticsMap = new Map(); for (const response of responses) { - diagnosticsMap = await createDiagnosticsResponse(response, projectUri, diagnosticsMap); + diagnosticsMap = await createDiagnosticsResponse(response, projectPath, diagnosticsMap); } // Set diagnostics in VS Code @@ -261,10 +264,10 @@ async function createDiagnostic(result: ResultItem, uri: Uri): Promise { - const ballerinaProjectSource: BallerinaSource = await getBallerinaProjectSourceFiles(projectUri); +export async function getLLMDiagnosticArrayAsString(projectPath: string): Promise { + const ballerinaProjectSource: BallerinaSource = await getBallerinaProjectSourceFiles(projectPath); const sourcesOfNonDefaultModulesWithReadme: BallerinaSource[] - = getSourcesOfNonDefaultModulesWithReadme(path.join(projectUri, "modules")); + = getSourcesOfNonDefaultModulesWithReadme(path.join(projectPath, "modules")); const sources: BallerinaSource[] = [ballerinaProjectSource, ...sourcesOfNonDefaultModulesWithReadme]; const backendurl = await getBackendURL(); @@ -280,7 +283,7 @@ export async function getLLMDiagnosticArrayAsString(projectUri: string): Promise return responses; } - let diagnosticArray = (await createDiagnosticArray(responses, projectUri)).map(diagnostic => { + let diagnosticArray = (await createDiagnosticArray(responses, projectPath)).map(diagnostic => { return `${diagnostic.message}`; }) .join("\n\n"); @@ -288,11 +291,11 @@ export async function getLLMDiagnosticArrayAsString(projectUri: string): Promise return diagnosticArray; } -async function createDiagnosticArray(responses: any[], projectUri: string): Promise { +async function createDiagnosticArray(responses: any[], projectPath: string): Promise { const diagnostics = []; for (const response of responses) { - await createDiagnosticList(response, projectUri, diagnostics); + await createDiagnosticList(response, projectPath, diagnostics); } function filterUniqueDiagnostics(diagnostics: vscode.Diagnostic[]): vscode.Diagnostic[] { @@ -722,20 +725,3 @@ export async function addConfigFile(configPath: string, isNaturalFunctionsAvaila } ); } - -async function isBallerinaProjectAsync(rootPath: string): Promise { - try { - if (!fs.existsSync(rootPath)) { - return false; - } - - const files = fs.readdirSync(rootPath); - return files.some(file => - file.toLowerCase() === 'ballerina.toml' || - file.toLowerCase().endsWith('.bal') - ); - } catch (error) { - console.error(`Error checking Ballerina project: ${error}`); - return false; - } -} diff --git a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/build.ts b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/build.ts index 50eb77e5998..cd53e73e5eb 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/build.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/build.ts @@ -16,17 +16,31 @@ * under the License. */ +import { MACHINE_VIEW } from "@wso2/ballerina-core"; import { LANGUAGE } from "../../../core"; import { extension } from "../../../BalExtensionContext"; import { commands, window } from "vscode"; import { - TM_EVENT_PROJECT_BUILD, CMP_PROJECT_BUILD, sendTelemetryEvent, sendTelemetryException + TM_EVENT_PROJECT_BUILD, + CMP_PROJECT_BUILD, + sendTelemetryEvent, + sendTelemetryException } from "../../telemetry"; -import { runCommand, BALLERINA_COMMANDS, PROJECT_TYPE, PALETTE_COMMANDS, MESSAGES } - from "./cmd-runner"; -import { getCurrentBallerinaProject, getCurrenDirectoryPath, getCurrentBallerinaFile } - from "../../../utils/project-utils"; -import { isSupportedSLVersion } from "../../../utils"; +import { + runCommand, + BALLERINA_COMMANDS, + PROJECT_TYPE, + PALETTE_COMMANDS, + MESSAGES +} from "./cmd-runner"; +import { + getCurrentBallerinaProject, + getCurrenDirectoryPath, + getCurrentBallerinaFile, + getCurrentProjectRoot +} from "../../../utils/project-utils"; +import { isSupportedSLVersion, createVersionNumber } from "../../../utils"; +import { StateMachine } from "../../../stateMachine"; export function activateBuildCommand() { // register run project build handler @@ -39,13 +53,32 @@ export function activateBuildCommand() { return; } - const currentProject = extension.ballerinaExtInstance.getDocumentContext().isActiveDiagram() ? await - getCurrentBallerinaProject(extension.ballerinaExtInstance.getDocumentContext().getLatestDocument()?.toString()) - : await getCurrentBallerinaProject(); + const context = StateMachine.context(); + const { workspacePath, view: webviewType, projectPath } = context; + + let targetPath = projectPath ?? ""; + if (workspacePath && webviewType === MACHINE_VIEW.WorkspaceOverview) { + targetPath = workspacePath; + } else if (workspacePath && !projectPath) { + try { + targetPath = await getCurrentProjectRoot(); + } catch (error) { + targetPath = workspacePath; + } + } else { + targetPath = await getCurrentProjectRoot(); + } + + if (!targetPath) { + window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return; + } + + const currentProject = await getCurrentBallerinaProject(targetPath); let balCommand = BALLERINA_COMMANDS.BUILD; - if (isSupportedSLVersion(extension.ballerinaExtInstance, 2201130) && extension.ballerinaExtInstance.enabledExperimentalFeatures()) { + if (isSupportedSLVersion(extension.ballerinaExtInstance, createVersionNumber(2201, 13, 0)) && extension.ballerinaExtInstance.enabledExperimentalFeatures()) { balCommand = BALLERINA_COMMANDS.BUILD_WITH_EXPERIMENTAL; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts index 8dcdc8a3c69..8d498a2c258 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/cmd-runner.ts @@ -18,8 +18,9 @@ import { BallerinaProject } from "@wso2/ballerina-core"; import { Terminal, window, workspace } from "vscode"; -import { isSupportedSLVersion, isWindows } from "../../../utils"; +import { isSupportedSLVersion, isWindows, createVersionNumber } from "../../../utils"; import { extension } from "../../../BalExtensionContext"; +import { TracerMachine } from "../../../features/tracing"; export const PALETTE_COMMANDS = { @@ -49,7 +50,6 @@ export const PALETTE_COMMANDS = { SHOW_DIAGRAM: 'ballerina.show.diagram', SHOW_SOURCE: 'ballerina.show.source', SHOW_ARCHITECTURE_VIEW: 'ballerina.view.architectureView', - SHOW_EXAMPLES: 'ballerina.showExamples', REFRESH_SHOW_ARCHITECTURE_VIEW: "ballerina.view.architectureView.refresh", RUN_CONFIG: 'ballerina.project.run.config', CONFIG_CREATE_COMMAND: 'ballerina.project.config.create', @@ -70,7 +70,10 @@ export enum BALLERINA_COMMANDS { } export enum PROJECT_TYPE { - SINGLE_FILE = "SINGLE_FILE_PROJECT", BUILD_PROJECT = "BUILD_PROJECT", BALR_PROJECT = "BALR_PROJECT" + SINGLE_FILE = "SINGLE_FILE_PROJECT", + BUILD_PROJECT = "BUILD_PROJECT", + BALR_PROJECT = "BALR_PROJECT", + WORKSPACE = "WORKSPACE_PROJECT" } export enum COMMAND_OPTIONS { @@ -81,16 +84,16 @@ export enum MESSAGES { NOT_SUPPORT = "Ballerina version is not supported by the VSCode plugin.", MODULE_NAME = "Enter module name.", SELECT_OPTION = "Select a build option.", - NOT_IN_PROJECT = "Current file does not belong to a ballerina project.", + NOT_IN_PROJECT = "Current file does not belong to a Ballerina project.", INVALID_PACK = "Only a Ballerina package can be packed.", INVALID_JSON = "Invalid JSON String", INVALID_JSON_RESPONSE = "JSON response is invalid.", INVALID_XML = "Invalid XML String", - INVALID_XML_RESPONSE = "XML response is invalid." + INVALID_XML_RESPONSE = "XML response is invalid.", + NO_PROJECT_FOUND = "No Ballerina project found." } export const BAL_CONFIG_FILE = 'Config.toml'; -export const BAL_TOML = "Ballerina.toml"; const TERMINAL_NAME = 'Terminal'; const BAL_CONFIG_FILES = 'BAL_CONFIG_FILES'; @@ -98,11 +101,13 @@ let terminal: Terminal; export function runCommand(file: BallerinaProject | string, executor: string, cmd: BALLERINA_COMMANDS, ...args: string[]) { + TracerMachine.startServer(); runCommandWithConf(file, executor, cmd, '', ...args); } export function runCommandWithConf(file: BallerinaProject | string, executor: string, cmd: BALLERINA_COMMANDS, confPath: string, ...args: string[]) { + TracerMachine.startServer(); if (terminal) { terminal.dispose(); } @@ -195,7 +200,7 @@ export function createTerminal(path: string, env?: { [key: string]: string }): v } export function getRunCommand(): BALLERINA_COMMANDS { - if (isSupportedSLVersion(extension.ballerinaExtInstance, 2201130) && extension.ballerinaExtInstance.enabledExperimentalFeatures()) { + if (isSupportedSLVersion(extension.ballerinaExtInstance, createVersionNumber(2201, 13, 0)) && extension.ballerinaExtInstance.enabledExperimentalFeatures()) { return BALLERINA_COMMANDS.RUN_WITH_EXPERIMENTAL; } else if (extension.ballerinaExtInstance.enabledLiveReload()) { return BALLERINA_COMMANDS.RUN_WITH_WATCH; diff --git a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/run.ts b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/run.ts index 36c5d7e3ccb..33743a3444b 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/run.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/run.ts @@ -21,10 +21,13 @@ import { commands, Uri, window } from "vscode"; import { TM_EVENT_PROJECT_RUN, CMP_PROJECT_RUN, sendTelemetryEvent, sendTelemetryException } from "../../telemetry"; -import { runCommand, BALLERINA_COMMANDS, PROJECT_TYPE, PALETTE_COMMANDS, runCommandWithConf, MESSAGES, getRunCommand } from "./cmd-runner"; +import { runCommand, PROJECT_TYPE, PALETTE_COMMANDS, runCommandWithConf, MESSAGES, getRunCommand } from "./cmd-runner"; import { getCurrentBallerinaProject, getCurrentBallerinaFile, getCurrenDirectoryPath } from "../../../utils/project-utils"; import { prepareAndGenerateConfig } from '../../config-generator/configGenerator'; import { LANGUAGE } from "../../../core"; +import { StateMachine } from "../../../stateMachine"; +import { VisualizerWebview } from "../../../views/visualizer/webview"; +import { requiresPackageSelection } from "../../../utils/command-utils"; function activateRunCmdCommand() { @@ -35,16 +38,42 @@ function activateRunCmdCommand() { } else if (filePath instanceof Uri) { actualFilePath = filePath.fsPath; } - prepareAndGenerateConfig(extension.ballerinaExtInstance, actualFilePath); + + let needsPackageSelection = false; + const isActiveTextEditor = window.activeTextEditor; + + if (!actualFilePath && !isActiveTextEditor) { + + const context = StateMachine.context(); + const { workspacePath, view, projectPath, projectInfo } = context; + const isWebviewOpen = VisualizerWebview.currentPanel !== undefined; + + needsPackageSelection = requiresPackageSelection( + workspacePath, view, projectPath, isWebviewOpen, !!isActiveTextEditor + ); + + if (needsPackageSelection && projectInfo?.children.length === 0) { + window.showErrorMessage("No packages found in the workspace."); + return; + } else if (!needsPackageSelection && !projectPath) { + window.showErrorMessage("No project found."); + return; + } + + actualFilePath = needsPackageSelection ? workspacePath : projectPath; + } + + prepareAndGenerateConfig(extension.ballerinaExtInstance, actualFilePath, false, false, true, needsPackageSelection); }); // register ballerina run handler - commands.registerCommand(PALETTE_COMMANDS.RUN_CMD, async (...args: any[]) => { - await run(args); + commands.registerCommand(PALETTE_COMMANDS.RUN_CMD, async (filePath: string) => { + await run(filePath); }); - async function run(args: any[]) { + async function run(filePath: string) { try { + sendTelemetryEvent(extension.ballerinaExtInstance, TM_EVENT_PROJECT_RUN, CMP_PROJECT_RUN); if (window.activeTextEditor && window.activeTextEditor.document.isDirty) { await commands.executeCommand(PALETTE_COMMANDS.SAVE_ALL); @@ -56,7 +85,7 @@ function activateRunCmdCommand() { window.showErrorMessage(MESSAGES.NOT_IN_PROJECT); return; } - currentProject = await getCurrentBallerinaProject(); + currentProject = await getCurrentBallerinaProject(filePath); } else { const document = extension.ballerinaExtInstance.getDocumentContext().getLatestDocument(); if (document) { @@ -69,6 +98,9 @@ function activateRunCmdCommand() { } } } + if (!currentProject) { + currentProject = await getCurrentBallerinaProject(filePath); + } } if (!currentProject) { @@ -111,7 +143,8 @@ function activateRunCmdCommand() { extension.ballerinaExtInstance.setBallerinaConfigPath(''); runCommandWithConf(currentProject, extension.ballerinaExtInstance.getBallerinaCmd(), getRunCommand(), - configPath, currentProject.path!, ...args); + configPath, currentProject.path! + ); } else { runCurrentFile(); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/xml-to-record.ts b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/xml-to-record.ts index 294569cef24..4b3801cf125 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/project/cmds/xml-to-record.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/project/cmds/xml-to-record.ts @@ -22,7 +22,7 @@ import { import { commands, window, env } from "vscode"; import { extension } from "../../../BalExtensionContext"; import { PALETTE_COMMANDS, MESSAGES } from "./cmd-runner"; -import { isSupportedSLVersion } from "../../../utils"; +import { isSupportedSLVersion, createVersionNumber } from "../../../utils"; import { DIAGNOSTIC_SEVERITY, XMLToRecord } from "@wso2/ballerina-core"; const MSG_NOT_SUPPORT = "Paste XML as a Ballerina record feature is not supported"; @@ -34,8 +34,8 @@ export function activatePasteXMLAsRecord() { } commands.registerCommand(PALETTE_COMMANDS.PASTE_XML_AS_RECORD, () => { - // This command is only available since Swan Lake Update 7 patch 2 - if (!isSupportedSLVersion(extension.ballerinaExtInstance, 220172)) { + // This command is only available since Swan Lake Update 7 patch 2 (2201.7.2) + if (!isSupportedSLVersion(extension.ballerinaExtInstance, createVersionNumber(2201, 7, 2))) { window.showErrorMessage(`${MSG_NOT_SUPPORT} in ${extension.ballerinaExtInstance.ballerinaVersion}`); return; } diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts index 96d792c193b..ce5727aed37 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/activator.ts @@ -17,17 +17,35 @@ * under the License. */ -import { tests, workspace, TestRunProfileKind, TestController } from "vscode"; +import { tests, workspace, TestRunProfileKind, TestController, Uri } from "vscode"; import { BallerinaExtension } from "../../core"; import { runHandler } from "./runner"; import { activateEditBiTest } from "./commands"; import { discoverTestFunctionsInProject, handleFileChange as handleTestFileUpdate, handleFileDelete as handleTestFileDelete } from "./discover"; +import { getCurrentBallerinaProject, getWorkspaceRoot } from "../../utils/project-utils"; +import { checkIsBallerinaPackage, checkIsBallerinaWorkspace } from "../../utils"; +import { PROJECT_TYPE } from "../project"; export let testController: TestController; export async function activate(ballerinaExtInstance: BallerinaExtension) { testController = tests.createTestController('ballerina-integrator-tests', 'WSO2 Integrator: BI Tests'); + const workspaceRoot = getWorkspaceRoot(); + + if (!workspaceRoot) { + return; + } + + const isBallerinaWorkspace = await checkIsBallerinaWorkspace(Uri.file(workspaceRoot)); + const isBallerinaProject = !isBallerinaWorkspace && await checkIsBallerinaPackage(Uri.file(workspaceRoot)); + const currentProject = !isBallerinaWorkspace && !isBallerinaProject && await getCurrentBallerinaProject(); + const isSingleFile = currentProject && currentProject.kind === PROJECT_TYPE.SINGLE_FILE; + + if (!isBallerinaWorkspace && !isBallerinaProject && !isSingleFile) { + return; + } + // Create test profiles to display. testController.createRunProfile('Run Tests', TestRunProfileKind.Run, runHandler, true); testController.createRunProfile('Debug Tests', TestRunProfileKind.Debug, runHandler, true); diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts index 756d1d23afe..81a1cf1eefa 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/commands.ts @@ -32,7 +32,7 @@ export function activateEditBiTest() { } const fileName = entry.id.split(":")[1]; - const fileUri = path.resolve(StateMachine.context().projectUri, `tests`, fileName); + const fileUri = path.resolve(StateMachine.context().projectPath, `tests`, fileName); if (fileUri) { const range = entry.range; openView(EVENT_TYPE.OPEN_VIEW, { documentUri: fileUri, @@ -43,7 +43,7 @@ export function activateEditBiTest() { }); commands.registerCommand(BI_COMMANDS.BI_ADD_TEST_FUNCTION, () => { - const fileUri = path.resolve(StateMachine.context().projectUri, `tests`, `tests.bal`); + const fileUri = path.resolve(StateMachine.context().projectPath, `tests`, `tests.bal`); ensureFileExists(fileUri); openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BITestFunctionForm, documentUri: fileUri, identifier: '', serviceType: 'ADD_NEW_TEST' }); @@ -55,7 +55,7 @@ export function activateEditBiTest() { } const fileName = entry.id.split(":")[1]; - const fileUri = path.resolve(StateMachine.context().projectUri, `tests`, fileName); + const fileUri = path.resolve(StateMachine.context().projectPath, `tests`, fileName); if (fileUri) { openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BITestFunctionForm, documentUri: fileUri, identifier: entry.label, serviceType: 'UPDATE_TEST' }); diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts index cc31b0a2d61..e618da6e936 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/discover.ts @@ -22,78 +22,155 @@ import { StateMachine } from "../../stateMachine"; import { TestsDiscoveryRequest, TestsDiscoveryResponse, FunctionTreeNode } from "@wso2/ballerina-core"; import { BallerinaExtension } from "../../core"; import { Position, Range, TestController, Uri, TestItem, commands } from "vscode"; +import { getWorkspaceRoot, getCurrentProjectRoot } from "../../utils/project-utils"; let groups: string[] = []; export async function discoverTestFunctionsInProject(ballerinaExtInstance: BallerinaExtension, testController: TestController) { groups.push(testController.id); - const filePath: string = path.join(StateMachine.context().projectUri); - const request: TestsDiscoveryRequest = { - filePath - }; + + const workspaceRoot = getWorkspaceRoot(); + const projectInfo = await ballerinaExtInstance.langClient?.getProjectInfo({ projectPath: workspaceRoot }); + + // Handle workspace with multiple child projects + if (projectInfo?.children?.length > 0) { + await discoverTestsInWorkspace(projectInfo.children, ballerinaExtInstance, testController); + return; + } + + // Handle single project + await discoverTestsInSingleProject(ballerinaExtInstance, testController); +} + +async function discoverTestsInWorkspace( + children: any[], + ballerinaExtInstance: BallerinaExtension, + testController: TestController +) { + // Iterate over project children sequentially to allow awaiting each request + for (const child of children) { + if (!child?.projectPath) { + continue; + } + + const response: TestsDiscoveryResponse = await ballerinaExtInstance.langClient?.getProjectTestFunctions({ + projectPath: child.projectPath + }); + + if (response) { + createTests(response, testController, child.projectPath); + setGroupsContext(); + } + } +} + +async function discoverTestsInSingleProject( + ballerinaExtInstance: BallerinaExtension, + testController: TestController, +) { + const projectPath = await getCurrentProjectRoot(); + + if (!projectPath) { + console.warn('No project root found for test discovery'); + return; + } + + const request: TestsDiscoveryRequest = { projectPath }; const response: TestsDiscoveryResponse = await ballerinaExtInstance.langClient?.getProjectTestFunctions(request); + if (response) { createTests(response, testController); setGroupsContext(); } } -function createTests(response: TestsDiscoveryResponse, testController: TestController) { - if (response.result) { - const projectDir = path.join(StateMachine.context().projectUri); +function createTests(response: TestsDiscoveryResponse, testController: TestController, projectPath?: string) { + if (!response.result) { + return; + } - // Check if the result is a Map or a plain object - const isMap = response.result instanceof Map; + // Check if the result is a Map or a plain object + const isMap = response.result instanceof Map; - // Convert the result to an iterable format - const entries = isMap - ? Array.from(response.result.entries()) // If it's a Map, convert to an array of entries - : Object.entries(response.result); // If it's a plain object, use Object.entries + // Convert the result to an iterable format + const entries = isMap + ? Array.from(response.result.entries()) // If it's a Map, convert to an array of entries + : Object.entries(response.result); // If it's a plain object, use Object.entries - // Iterate over the result map - for (const [group, testFunctions] of entries) { - // Create a test item for the group - const groupId = `group:${group}`; - let groupItem: TestItem = testController.items.get(groupId); + // Determine if we're in a workspace context (multiple projects) + const isWorkspaceContext = projectPath !== undefined; + + // Get or create the project-level group for workspace scenarios + let projectGroupItem: TestItem | undefined; + if (isWorkspaceContext) { + const projectName = path.basename(projectPath); + const projectGroupId = `project:${projectName}`; + + projectGroupItem = testController.items.get(projectGroupId); + if (!projectGroupItem) { + projectGroupItem = testController.createTestItem(projectGroupId, projectName); + testController.items.add(projectGroupItem); + groups.push(projectGroupId); + } + } + + // Iterate over the result map (test groups) + for (const [group, testFunctions] of entries) { + let groupItem: TestItem | undefined; + // For workspace context with DEFAULT_GROUP, skip the group level and add tests directly to project + if (isWorkspaceContext && group === 'DEFAULT_GROUP' && projectGroupItem) { + groupItem = projectGroupItem; + } else if (isWorkspaceContext && projectGroupItem) { + // For workspace context with named groups, create test group under project + const groupId = `group:${path.basename(projectPath)}:${group}`; + groupItem = projectGroupItem.children.get(groupId); + if (!groupItem) { + groupItem = testController.createTestItem(groupId, group); + projectGroupItem.children.add(groupItem); + groups.push(groupId); + } + } else { + // Single project - create group at root level (including DEFAULT_GROUP) + const groupId = `group:${group}`; + groupItem = testController.items.get(groupId); if (!groupItem) { - // If the group doesn't exist, create it groupItem = testController.createTestItem(groupId, group); testController.items.add(groupItem); groups.push(groupId); } + } - // Ensure testFunctions is iterable (convert to an array if necessary) - const testFunctionsArray = Array.isArray(testFunctions) - ? testFunctions // If it's already an array, use it directly - : Object.values(testFunctions); // If it's an object, convert to an array - - // Iterate over the test functions in the group - for (const tf of testFunctionsArray) { - const testFunc: FunctionTreeNode = tf as FunctionTreeNode; - // Generate a unique ID for the test item using the function name - const fileName: string = testFunc.lineRange.fileName; - const fileUri = Uri.file(path.join(projectDir, fileName)); - const testId = `test:${path.basename(fileUri.path)}:${testFunc.functionName}`; - - // Create a test item for the test function - const testItem = testController.createTestItem(testId, testFunc.functionName); - - // Set the range for the test (optional, for navigation) - const startPosition = new Position( - testFunc.lineRange.startLine.line, // Convert to 0-based line number - testFunc.lineRange.startLine.offset - ); - const endPosition = new Position( - testFunc.lineRange.endLine.line, // Convert to 0-based line number - testFunc.lineRange.endLine.offset - ); - testItem.range = new Range(startPosition, endPosition); - - // Add the test item to the group - groupItem.children.add(testItem); - } + // Ensure testFunctions is iterable (convert to an array if necessary) + const testFunctionsArray = Array.isArray(testFunctions) + ? testFunctions // If it's already an array, use it directly + : Object.values(testFunctions); // If it's an object, convert to an array + + // Iterate over the test functions in the group + for (const tf of testFunctionsArray) { + const testFunc: FunctionTreeNode = tf as FunctionTreeNode; + // Generate a unique ID for the test item using the function name + const fileName: string = testFunc.lineRange.fileName; + const resolvedProjectPath = projectPath || StateMachine.context().projectPath; + const fileUri = Uri.file(path.join(resolvedProjectPath, fileName)); + const testId = `test:${resolvedProjectPath}:${path.basename(fileUri.path)}:${testFunc.functionName}`; + + // Create a test item for the test function + const testItem = testController.createTestItem(testId, testFunc.functionName, fileUri); + + // Set the range for the test (optional, for navigation) + const startPosition = new Position( + testFunc.lineRange.startLine.line, // Convert to 0-based line number + testFunc.lineRange.startLine.offset + ); + const endPosition = new Position( + testFunc.lineRange.endLine.line, // Convert to 0-based line number + testFunc.lineRange.endLine.offset + ); + testItem.range = new Range(startPosition, endPosition); + + groupItem.children.add(testItem); } } } @@ -101,48 +178,148 @@ function createTests(response: TestsDiscoveryResponse, testController: TestContr export async function handleFileChange(ballerinaExtInstance: BallerinaExtension, uri: Uri, testController: TestController) { + // Determine which project this file belongs to + const projectInfo = StateMachine.context().projectInfo; + let targetProjectPath: string | undefined; + const isWorkspace = projectInfo?.children?.length > 0; + + // Check if this file belongs to a child project in a workspace + if (isWorkspace) { + for (const child of projectInfo.children) { + if (uri.path.startsWith(child.projectPath)) { + targetProjectPath = child.projectPath; + break; + } + } + } + + // If not found in children, use the main project path + if (!targetProjectPath) { + targetProjectPath = await getCurrentProjectRoot(); + } + + if (!targetProjectPath) { + console.warn('Could not determine project path for file change:', uri.path); + return; + } + const request: TestsDiscoveryRequest = { - filePath: uri.path + projectPath: uri.path }; const response: TestsDiscoveryResponse = await ballerinaExtInstance.langClient?.getFileTestFunctions(request); if (!response || !response.result) { return; } - handleFileDelete(uri, testController); - createTests(response, testController); + await handleFileDelete(uri, testController); + createTests(response, testController, isWorkspace ? targetProjectPath : undefined); setGroupsContext(); } export async function handleFileDelete(uri: Uri, testController: TestController) { - const filePath = path.basename(uri.path); + // Determine which project this file belongs to + const projectInfo = StateMachine.context().projectInfo; + let targetProjectPath: string | undefined; + + // Check if this file belongs to a child project in a workspace + if (projectInfo?.children?.length > 0) { + for (const child of projectInfo.children) { + if (uri.path.startsWith(child.projectPath)) { + targetProjectPath = child.projectPath; + break; + } + } + } + + // If not found in children, use the main project path + if (!targetProjectPath) { + targetProjectPath = await getCurrentProjectRoot(); + } + + if (!targetProjectPath) { + console.warn('Could not determine project path for file deletion:', uri.path); + return; + } + + const fileName = path.basename(uri.path); + + // Helper function to check if a test belongs to the specific file in the specific project + const belongsToFile = (testItem: TestItem): boolean => { + // Test ID format: test:${projectPath}:${fileName}:${functionName} + // We need to match both the project path and the filename + return testItem.id.startsWith(`test:${targetProjectPath}:${fileName}:`); + }; + + // Helper function to delete tests from a test group item + const deleteTestsFromGroup = (groupItem: TestItem) => { + const childrenToDelete: TestItem[] = []; + groupItem.children.forEach((child) => { + if (belongsToFile(child)) { + childrenToDelete.push(child); + } + }); + + // Remove the matching test function items + childrenToDelete.forEach((child) => { + groupItem.children.delete(child.id); + }); + + return groupItem.children.size === 0; + }; // Iterate over all root-level items in the Test Explorer testController.items.forEach((item) => { - if (isTestFunctionItem(item)) { - // If the item is a test function, check if it belongs to the deleted file - if (item.id.startsWith(`test:${filePath}:`)) { - testController.items.delete(item.id); + if (isProjectGroupItem(item)) { + // Only process this project group if it matches our target project + const projectName = path.basename(targetProjectPath); + if (item.id !== `project:${projectName}`) { + return; // Skip this project, it's not the one we're looking for } - } else if (isTestGroupItem(item)) { - // If the item is a test group, iterate over its children - const childrenToDelete: TestItem[] = []; + + // Project group can contain either test groups or tests directly (when DEFAULT_GROUP is skipped) + const groupsToDelete: TestItem[] = []; + const testsToDelete: TestItem[] = []; + item.children.forEach((child) => { - if (child.id.startsWith(`test:${filePath}:`)) { - childrenToDelete.push(child); + if (isTestFunctionItem(child)) { + // Test added directly to project (DEFAULT_GROUP was skipped) + if (belongsToFile(child)) { + testsToDelete.push(child); + } + } else if (isTestGroupItem(child)) { + // Test group - check if it becomes empty after deletion + const isEmpty = deleteTestsFromGroup(child); + if (isEmpty) { + groupsToDelete.push(child); + } } }); - // Remove the matching test function items - childrenToDelete.forEach((child) => { - item.children.delete(child.id); + // Remove tests that belong to the file + testsToDelete.forEach((test) => { + item.children.delete(test.id); }); - // If the group is empty after deletion, remove it + // Remove empty test groups + groupsToDelete.forEach((groupItem) => { + item.children.delete(groupItem.id); + groups = groups.filter((group) => group !== groupItem.id); + }); + + // If the project group is empty after deletion, remove it if (item.children.size === 0) { testController.items.delete(item.id); groups = groups.filter((group) => group !== item.id); } + } else if (isTestGroupItem(item)) { + // Single project scenario - test group at root level + const isEmpty = deleteTestsFromGroup(item); + + // If the group is empty after deletion, remove it + if (isEmpty) { + testController.items.delete(item.id); + groups = groups.filter((group) => group !== item.id); + } } }); } @@ -157,6 +334,11 @@ export function isTestGroupItem(item: TestItem): boolean { return item.id.startsWith('group:'); } +export function isProjectGroupItem(item: TestItem): boolean { + // Project group items have IDs starting with "project:" + return item.id.startsWith('project:'); +} + function setGroupsContext() { commands.executeCommand('setContext', 'testGroups', groups); } diff --git a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts index e6c03cd9b4e..c1d6aafd496 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/test-explorer/runner.ts @@ -21,12 +21,69 @@ import { exec } from 'child_process'; import { CancellationToken, TestRunRequest, TestMessage, TestRun, TestItem, debug, Uri, WorkspaceFolder, DebugConfiguration, workspace, TestRunProfileKind } from 'vscode'; import { testController } from './activator'; import { StateMachine } from "../../stateMachine"; -import { isTestFunctionItem, isTestGroupItem } from './discover'; +import { isTestFunctionItem, isTestGroupItem, isProjectGroupItem } from './discover'; import { extension } from '../../BalExtensionContext'; import { constructDebugConfig } from "../debugger"; const fs = require('fs'); import path from 'path'; +/** + * Extract project path from a test item + * Test IDs have the format: test:${projectPath}:${fileName}:${functionName} + */ +function getProjectPathFromTestItem(test: TestItem): string | undefined { + if (isTestFunctionItem(test)) { + // Extract from test ID: test:${projectPath}:${fileName}:${functionName} + const parts = test.id.split(':'); + if (parts.length >= 2 && parts[0] === 'test') { + return parts[1]; + } + } else if (isProjectGroupItem(test)) { + // For project groups, we need to get a child test to extract the path + let projectPath: string | undefined; + test.children.forEach((child) => { + if (!projectPath) { + projectPath = getProjectPathFromTestItem(child); + } + }); + return projectPath; + } else if (isTestGroupItem(test)) { + // For test groups, check if they have a parent project or extract from children + if (test.parent && isProjectGroupItem(test.parent)) { + return getProjectPathFromTestItem(test.parent); + } + // Otherwise extract from children + let projectPath: string | undefined; + test.children.forEach((child) => { + if (!projectPath) { + projectPath = getProjectPathFromTestItem(child); + } + }); + return projectPath; + } + return StateMachine.context().projectPath; +} + +/** + * Check if we're in a workspace context (multiple projects) + * Returns the project name if in workspace, undefined otherwise + */ +function getProjectNameIfWorkspace(projectPath: string): string | undefined { + const projectInfo = StateMachine.context().projectInfo; + + // Check if this is a workspace with multiple child projects + if (projectInfo?.children?.length > 0) { + // Find the matching child project + for (const child of projectInfo.children) { + if (child.projectPath === projectPath) { + return path.basename(projectPath); + } + } + } + + return undefined; +} + export async function runHandler(request: TestRunRequest, token: CancellationToken) { if (!request.include) { return; @@ -57,11 +114,82 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok run.started(test); + // Get the project path for this test + const projectPath = getProjectPathFromTestItem(test); + if (!projectPath) { + run.failed(test, new TestMessage('Could not determine project path for test')); + run.end(); + return; + } + + // Check if we're in a workspace with multiple projects + const projectName = getProjectNameIfWorkspace(projectPath); + let command: string; const executor = extension.ballerinaExtInstance.getBallerinaCmd(); - if (isTestGroupItem(test)) { + + // Handle running all tests in a project group + if (isProjectGroupItem(test)) { + let testCaseNames: string[] = []; + let testItems: TestItem[] = []; + + // Collect all test functions from the project + // Children can be either test groups or test functions directly (when DEFAULT_GROUP is skipped) + test.children.forEach((child) => { + if (isTestFunctionItem(child)) { + // Test added directly to project (DEFAULT_GROUP was skipped) + testCaseNames.push(child.label); + testItems.push(child); + run.started(child); + } else if (isTestGroupItem(child)) { + // Test group - iterate through its children + child.children.forEach((testFunc) => { + if (isTestFunctionItem(testFunc)) { + testCaseNames.push(testFunc.label); + testItems.push(testFunc); + run.started(testFunc); + } + }); + } + }); + + if (projectName) { + // Workspace context - include project name in command + command = testCaseNames.length > 0 + ? `${executor} test --code-coverage --tests ${testCaseNames.join(',')} ${projectName}` + : `${executor} test --code-coverage ${projectName}`; + } else { + // Single project context + command = testCaseNames.length > 0 + ? `${executor} test --code-coverage --tests ${testCaseNames.join(',')}` + : `${executor} test --code-coverage`; + } + + const startTime = Date.now(); + // For workspace, run from workspace root; for single project, run from project path + const workingDirectory = projectName ? StateMachine.context().workspacePath || projectPath : projectPath; + runCommand(command, workingDirectory).then(() => { + const endTime = Date.now(); + const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); + + reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { + endGroup(test, true, run); + }).catch(() => { + endGroup(test, false, run); + }); + }).catch(() => { + const endTime = Date.now(); + const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); + + reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { + endGroup(test, true, run); + }).catch(() => { + endGroup(test, false, run); + }); + }); + } else if (isTestGroupItem(test)) { let testCaseNames: string[] = []; - let testItems : TestItem[] = []; + let testItems: TestItem[] = []; test.children.forEach((child) => { const functionName = child.label; testCaseNames.push(functionName); @@ -69,30 +197,44 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok run.started(child); }); - command = `bal test --tests ${testCaseNames.join(',')} --code-coverage`; + if (projectName) { + // Workspace context - include project name in command + command = `${executor} test --code-coverage --tests ${testCaseNames.join(',')} ${projectName}`; + } else { + // Single project context + command = `${executor} test --code-coverage --tests ${testCaseNames.join(',')}`; + } const startTime = Date.now(); - runCommand(command).then(() => { - const EndTime = Date.now(); - const timeElapsed = (EndTime - startTime) / testItems.length; + // For workspace, run from workspace root; for single project, run from project path + const workingDirectory = projectName ? StateMachine.context().workspacePath || projectPath : projectPath; + runCommand(command, workingDirectory).then(() => { + const endTime = Date.now(); + const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); }); }).catch(() => { - const EndTime = Date.now(); - const timeElapsed = (EndTime - startTime) / testItems.length; + const endTime = Date.now(); + const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath).then(() => { endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); }); }); } else if (isTestFunctionItem(test)) { - command = `${executor} test --tests ${test.label} --code-coverage`; + if (projectName) { + // Workspace context - include project name in command + command = `${executor} test --code-coverage --tests ${test.label} ${projectName}`; + } else { + // Single project context + command = `${executor} test --code-coverage --tests ${test.label}`; + } const parentGroup = test.parent; let testItems: TestItem[] = []; @@ -105,30 +247,43 @@ export async function runHandler(request: TestRunRequest, token: CancellationTok } const startTime = Date.now(); - runCommand(command).then(() => { - const EndTime = Date.now(); - const timeElapsed = (EndTime - startTime) / testItems.length; + // For workspace, run from workspace root; for single project, run from project path + const workingDirectory = projectName ? StateMachine.context().workspacePath || projectPath : projectPath; + runCommand(command, workingDirectory).then(() => { + const endTime = Date.now(); + const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, true).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath, true).then(() => { endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); }); }).catch(() => { - const EndTime = Date.now(); - const timeElapsed = (EndTime - startTime) / testItems.length; + const endTime = Date.now(); + const timeElapsed = calculateTimeElapsed(startTime, endTime, testItems); - reportTestResults(run, testItems, timeElapsed, true).then(() => { + reportTestResults(run, testItems, timeElapsed, projectPath, true).then(() => { endGroup(test, true, run); }).catch(() => { endGroup(test, false, run); }); - }).finally(() => { + }).finally(() => { run.end(); }); } }); } +/** + * Calculate time elapsed per test item + * @param startTime - Start time in milliseconds + * @param endTime - End time in milliseconds + * @param testItems - Array of test items + * @returns Time elapsed per test item in milliseconds + */ +function calculateTimeElapsed(startTime: number, endTime: number, testItems: TestItem[]): number { + return testItems.length > 0 ? (endTime - startTime) / testItems.length : (endTime - startTime); +} + const TEST_RESULTS_PATH = path.join("target", "report", "test_results.json").toString(); enum TEST_STATUS { @@ -137,12 +292,23 @@ enum TEST_STATUS { SKIPPED = 'SKIPPED', } -async function reportTestResults(run: TestRun, testItems: TestItem[], timeElapsed: number, individualTest: boolean = false) { - const projectRoot = StateMachine.context().projectUri; - +async function reportTestResults(run: TestRun, testItems: TestItem[], timeElapsed: number, projectPath: string, individualTest: boolean = false) { // reading test results + // For workspace projects, results are in workspace/target, not project/target + const projectInfo = StateMachine.context().projectInfo; + const workspacePath = StateMachine.context().workspacePath; + + let testResultsPath: string; + if (projectInfo?.children?.length > 0 && workspacePath) { + // Workspace with multiple projects - results are at workspace root + testResultsPath = path.join(workspacePath, TEST_RESULTS_PATH); + } else { + // Single project - results are in project directory + testResultsPath = path.join(projectPath, TEST_RESULTS_PATH); + } + let testsJson: JSON | undefined = undefined; - testsJson = await readTestJson(path.join(projectRoot!, TEST_RESULTS_PATH).toString()); + testsJson = await readTestJson(testResultsPath); if (!testsJson) { for (const test of testItems) { const testMessage: TestMessage = new TestMessage("Command failed"); @@ -151,7 +317,33 @@ async function reportTestResults(run: TestRun, testItems: TestItem[], timeElapse return; } - const moduleStatus = testsJson["moduleStatus"]; + // For workspace projects, test results are nested under packages[].moduleStatus + // For single projects, they're directly at moduleStatus + let moduleStatus; + if (testsJson["packages"]) { + // Workspace structure - find the matching package + const projectName = path.basename(projectPath); + const packages = testsJson["packages"]; + const matchingPackage = packages.find(pkg => pkg["projectName"] === projectName); + + if (matchingPackage) { + moduleStatus = matchingPackage["moduleStatus"]; + } else { + // If we can't find the specific package, try the first one + moduleStatus = packages[0]?.["moduleStatus"]; + } + } else { + // Single project structure + moduleStatus = testsJson["moduleStatus"]; + } + + if (!moduleStatus) { + for (const test of testItems) { + const testMessage: TestMessage = new TestMessage("No test results found"); + run.failed(test, testMessage, timeElapsed); + } + return; + } for (const test of testItems) { let found = false; @@ -211,9 +403,9 @@ function endGroup(test: TestItem, allPassed: boolean, run: TestRun) { run.end(); } -async function runCommand(command: string): Promise { +async function runCommand(command: string, projectPath: string): Promise { return new Promise((resolve, reject) => { - exec(command, { cwd: StateMachine.context().projectUri }, (error, stdout, stderr) => { + exec(command, { cwd: projectPath }, (error, stdout, stderr) => { if (error) { // Report test failure reject(new Error(stderr || 'Test failed!')); @@ -229,7 +421,7 @@ async function runCommand(command: string): Promise { */ export async function startDebugging(testDebug: boolean, args: any[]) : Promise { - const uri: Uri = Uri.parse(StateMachine.context().projectUri); + const uri: Uri = Uri.parse(StateMachine.context().projectPath); const workspaceFolder: WorkspaceFolder | undefined = workspace.getWorkspaceFolder(uri); const debugConfig: DebugConfiguration = await constructDebugConfig(uri, testDebug, args); diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/activate.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/activate.ts new file mode 100644 index 00000000000..32b21e20a77 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/activate.ts @@ -0,0 +1,169 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import { BallerinaExtension } from '../../core'; +import { TracerMachine } from './tracer-machine'; +import { TraceTreeDataProvider } from './trace-tree-view'; +import { TraceServer, Trace } from './trace-server'; +import { TraceDetailsWebview } from './trace-details-webview'; + +export const TRACE_WINDOW_COMMAND = 'ballerina.showTraceWindow'; +export const ENABLE_TRACING_COMMAND = 'ballerina.enableTracing'; +export const DISABLE_TRACING_COMMAND = 'ballerina.disableTracing'; +export const CLEAR_TRACES_COMMAND = 'ballerina.clearTraces'; +export const SHOW_TRACE_DETAILS_COMMAND = 'ballerina.showTraceDetails'; +export const TRACE_VIEW_ID = 'ballerina-traceView'; + +let treeDataProvider: TraceTreeDataProvider | undefined; +let treeView: vscode.TreeView | undefined; + +export function activateTracing(ballerinaExtInstance: BallerinaExtension) { + const workspaceDirs: string[] = []; + try { + const folders = vscode.workspace.workspaceFolders; + if (folders && folders.length > 0) { + workspaceDirs.push(...folders.map(folder => folder.uri.fsPath)); + } + } catch (_) { + // ignore + } + + // Initialize TracerMachine + TracerMachine.initialize(workspaceDirs.length > 0 ? workspaceDirs : undefined); + + // Create TreeDataProvider + treeDataProvider = new TraceTreeDataProvider(); + + // Create and register TreeView in bottom panel (debug container) + treeView = vscode.window.createTreeView(TRACE_VIEW_ID, { + treeDataProvider: treeDataProvider, + showCollapseAll: true + }); + + // Subscribe to TracerMachine state changes to update VS Code context + TracerMachine.onUpdate(async (state: any) => { + await updateContextFromState(state); + }); + + // Set initial context based on current state + const initialState = TracerMachine.getState(); + updateContextFromState(initialState); + + // Register commands + const showTraceWindowCommand = vscode.commands.registerCommand(TRACE_WINDOW_COMMAND, async () => { + await showTraceWindow(); + }); + + const enableTracingCommand = vscode.commands.registerCommand(ENABLE_TRACING_COMMAND, () => { + TracerMachine.enable(); + // Focus the VS Code panel section + vscode.commands.executeCommand('workbench.action.focusPanel'); + // Reveal/focus the ballerina-traceView (shows trace panel in panel) + vscode.commands.executeCommand('workbench.view.extension.ballerina-traceView'); + }); + + const disableTracingCommand = vscode.commands.registerCommand(DISABLE_TRACING_COMMAND, () => { + TracerMachine.disable(); + }); + + const clearTracesCommand = vscode.commands.registerCommand(CLEAR_TRACES_COMMAND, () => { + // Clear traces from the server + TraceServer.clearTraces(); + + // The TraceServer.onTracesCleared callback will update the context and refresh the tree + }); + + const showTraceDetailsCommand = vscode.commands.registerCommand( + SHOW_TRACE_DETAILS_COMMAND, + (trace: Trace) => { + showTraceDetails(trace); + } + ); + + // Add all subscriptions + ballerinaExtInstance.context.subscriptions.push( + treeView, + showTraceWindowCommand, + enableTracingCommand, + disableTracingCommand, + clearTracesCommand, + showTraceDetailsCommand, + treeDataProvider + ); +} + +/** + * Update VS Code context based on TracerMachine state + */ +async function updateContextFromState(state: any): Promise { + const isEnabled = typeof state === 'string' + ? state === 'enabled' + : (typeof state === 'object' && state !== null && 'enabled' in state); + + await vscode.commands.executeCommand('setContext', 'ballerina.tracingEnabled', isEnabled); + + if (isEnabled) { + // Check if traces exist + const traces = TraceServer.getTraces(); + await vscode.commands.executeCommand('setContext', 'ballerina.tracesEmpty', traces.length === 0); + } +} + +/** + * Show/reveal the trace window + */ +async function showTraceWindow(): Promise { + if (!treeView) { + return; + } + + try { + // Show the view by executing the show command for the debug container + // The trace view is in the debug container (bottom panel) + await vscode.commands.executeCommand('workbench.view.debug'); + + // Small delay to ensure the view is ready + await new Promise(resolve => setTimeout(resolve, 100)); + + // If there are traces, try to reveal the first one + const traces = TraceServer.getTraces(); + if (traces.length > 0 && treeDataProvider) { + const children = await treeDataProvider.getChildren(); + if (children && children.length > 0 && children[0]) { + // Reveal the first trace node + await treeView.reveal(children[0], { focus: true, select: false }); + } + } + } catch (error) { + // If reveal fails, at least ensure the view is visible + // The error might be due to getParent, but the view should still be shown + console.error('Error revealing trace window:', error); + } +} + +/** + * Show trace details in a webview + */ +function showTraceDetails(trace: Trace): void { + try { + TraceDetailsWebview.show(trace); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to show trace details: ${message}`); + } +} diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/constants.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/constants.ts new file mode 100644 index 00000000000..e5709325eb3 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/constants.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export const OTLP_PORT = 59500; // Custom OTLP/HTTP port \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/index.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/index.ts new file mode 100644 index 00000000000..4ca3b150623 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/index.ts @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { activateTracing, TRACE_WINDOW_COMMAND, ENABLE_TRACING_COMMAND, TRACE_VIEW_ID } from './activate'; +export { TracerMachine } from './tracer-machine'; +export { TraceServer } from './trace-server'; diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-details-webview.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-details-webview.ts new file mode 100644 index 00000000000..4d80bdb88fd --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-details-webview.ts @@ -0,0 +1,265 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import * as path from 'path'; +import { Uri, ViewColumn, Webview } from 'vscode'; +import { extension } from '../../BalExtensionContext'; +import { Trace } from './trace-server'; +import { getLibraryWebViewContent, getComposerWebViewOptions, WebViewOptions } from '../../utils/webview-utils'; + +// TraceData interface matching the trace-visualizer component +interface TraceData { + traceId: string; + spans: SpanData[]; + resource: ResourceData; + scope: ScopeData; + firstSeen: string; + lastSeen: string; +} + +interface SpanData { + spanId: string; + traceId: string; + parentSpanId: string; + name: string; + kind: string | number; + startTime?: string; + endTime?: string; + attributes?: AttributeData[]; +} + +interface ResourceData { + name: string; + attributes: AttributeData[]; +} + +interface ScopeData { + name: string; + version?: string; + attributes?: AttributeData[]; +} + +interface AttributeData { + key: string; + value: string; +} + +export class TraceDetailsWebview { + private static instance: TraceDetailsWebview | undefined; + private _panel: vscode.WebviewPanel | undefined; + private _disposables: vscode.Disposable[] = []; + private _trace: Trace | undefined; + private _isAgentChat: boolean = false; + + private constructor() { + this._panel = TraceDetailsWebview.createWebview(); + this._panel.onDidDispose(() => this.dispose(), null, this._disposables); + this.setupMessageHandler(); + } + + private setupMessageHandler(): void { + if (!this._panel) { + return; + } + + this._panel.webview.onDidReceiveMessage( + (message) => { + switch (message.command) { + case 'requestTraceData': + if (this._trace) { + const traceData = this.convertTraceToTraceData(this._trace); + this._panel!.webview.postMessage({ + command: 'traceData', + data: traceData, + isAgentChat: this._isAgentChat, + }); + } + break; + } + }, + null, + this._disposables + ); + } + + private static createWebview(): vscode.WebviewPanel { + const panel = vscode.window.createWebviewPanel( + 'ballerina.trace-details', + 'Trace Details', + ViewColumn.Active, + { + enableScripts: true, + localResourceRoots: [ + Uri.file(path.join(extension.context.extensionPath, 'resources', 'jslibs')), + Uri.file(path.join(extension.context.extensionPath, 'resources')), + ], + retainContextWhenHidden: true, + } + ); + panel.iconPath = { + light: Uri.file(path.join(extension.context.extensionPath, 'resources', 'images', 'icons', 'ballerina.svg')), + dark: Uri.file(path.join(extension.context.extensionPath, 'resources', 'images', 'icons', 'ballerina-inverse.svg')) + }; + return panel; + } + + public static show(trace: Trace, isAgentChat: boolean = false): void { + if (!TraceDetailsWebview.instance || !TraceDetailsWebview.instance._panel) { + // Create new instance if it doesn't exist or was disposed + TraceDetailsWebview.instance = new TraceDetailsWebview(); + } + + // Update the trace and reveal the panel + const instance = TraceDetailsWebview.instance; + instance._trace = trace; + instance._isAgentChat = isAgentChat; + + // Update title based on isAgentChat flag + if (instance._panel) { + instance._panel.title = isAgentChat ? 'Agent Chat Logs' : 'Trace Details'; + } + + instance._panel!.reveal(); + instance.updateWebview(); + } + + private updateWebview(): void { + if (!this._panel || !this._trace) { + return; + } + + this._panel.webview.html = this.getWebviewContent(this._trace, this._panel.webview); + + // Send trace data immediately after updating HTML (in case webview is already loaded) + // The webview will also request it if needed + const traceData = this.convertTraceToTraceData(this._trace); + this._panel.webview.postMessage({ + command: 'traceData', + data: traceData, + isAgentChat: this._isAgentChat, + }); + } + + private convertTraceToTraceData(trace: Trace): TraceData { + return { + traceId: trace.traceId, + spans: trace.spans.map(span => ({ + spanId: span.spanId, + traceId: span.traceId, + parentSpanId: span.parentSpanId, + name: span.name, + kind: span.kind, + startTime: span.startTime, + endTime: span.endTime, + attributes: span.attributes || [], + })), + resource: { + name: trace.resource.name, + attributes: trace.resource.attributes || [], + }, + scope: { + name: trace.scope.name, + version: trace.scope.version, + attributes: trace.scope.attributes || [], + }, + firstSeen: trace.firstSeen.toISOString(), + lastSeen: trace.lastSeen.toISOString(), + }; + } + + private getWebviewContent(trace: Trace, webView: Webview): string { + const body = `
`; + const bodyCss = ``; + const styles = ` + .container { + background-color: var(--vscode-editor-background); + height: 100vh; + width: 100%; + } + `; + const scripts = ` + const vscode = acquireVsCodeApi(); + let traceData = null; + let isAgentChat = false; + + function renderTraceDetails() { + if (window.traceVisualizer && window.traceVisualizer.renderWebview && traceData) { + const container = document.getElementById("webview-container"); + if (container) { + window.traceVisualizer.renderWebview(traceData, isAgentChat, container); + } + } else if (!traceData) { + // Request trace data from extension + vscode.postMessage({ command: 'requestTraceData' }); + } else { + console.error("TraceVisualizer not loaded"); + setTimeout(renderTraceDetails, 100); + } + } + + // Listen for messages from the extension + window.addEventListener('message', event => { + const message = event.data; + switch (message.command) { + case 'traceData': + traceData = message.data; + isAgentChat = message.isAgentChat || false; + renderTraceDetails(); + break; + } + }); + + function loadedScript() { + // Request trace data when script is loaded + vscode.postMessage({ command: 'requestTraceData' }); + } + `; + const options = process.env.TRACE_WEB_VIEW_DEV_HOST ? { devHost: process.env.TRACE_WEB_VIEW_DEV_HOST } : {}; + const webViewOptions: WebViewOptions = { + ...getComposerWebViewOptions("TraceVisualizer", webView, options), + body, + scripts, + styles, + bodyCss, + }; + + return getLibraryWebViewContent(webViewOptions, webView); + } + + + public dispose(): void { + this._panel?.dispose(); + + while (this._disposables.length) { + const disposable = this._disposables.pop(); + if (disposable) { + disposable.dispose(); + } + } + + this._panel = undefined; + this._trace = undefined; + + // Clear the static instance when disposed + if (TraceDetailsWebview.instance === this) { + TraceDetailsWebview.instance = undefined; + } + } +} + diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server-task.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server-task.ts new file mode 100644 index 00000000000..1e1bcf33e4f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server-task.ts @@ -0,0 +1,158 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import { TraceServer } from './trace-server'; +import { OTLP_PORT } from './constants'; + + +/** + * Creates a VS Code task that starts the trace server Express application + * Uses CustomExecution to run the server inside the extension host + * @returns A VS Code Task that starts the trace server + */ +export function createTraceServerTask(): vscode.Task { + const taskDefinition: vscode.TaskDefinition = { + type: 'custom', + task: 'start-trace-server' + }; + + // Create CustomExecution that runs the server in the extension host + const execution = new vscode.CustomExecution(async (): Promise => { + return new TraceServerPseudoterminal(); + }); + + const task = new vscode.Task( + taskDefinition, + vscode.TaskScope.Workspace, + 'Start Trace Server', + 'ballerina-tracing', + execution + ); + + // Configure task presentation + task.presentationOptions = { + reveal: vscode.TaskRevealKind.Always, + panel: vscode.TaskPanelKind.New, + showReuseMessage: false, + clear: false, + echo: true, + focus: false + }; + + // Set task as a background task (keeps running) + task.isBackground = true; + task.problemMatchers = []; + + return task; +} + +/** + * Pseudoterminal implementation for the trace server task + * This runs the Express server inside the extension host + */ +class TraceServerPseudoterminal implements vscode.Pseudoterminal { + private writeEmitter = new vscode.EventEmitter(); + private closeEmitter = new vscode.EventEmitter(); + private serverStarted = false; + + readonly onDidWrite: vscode.Event = this.writeEmitter.event; + readonly onDidClose: vscode.Event = this.closeEmitter.event; + + open(initialDimensions: vscode.TerminalDimensions | undefined): void { + this.writeLine('šŸš€ Starting Trace Server...'); + this.writeLine(''); + + // Start the trace server + TraceServer.start(OTLP_PORT) + .then(() => { + this.serverStarted = true; + this.writeLine(`šŸ“” OTLP Tracing server started successfully on port ${OTLP_PORT}`); + this.writeLine('Do not close this terminal window. It will be used to receive OTLP traces.'); + }) + .catch((error) => { + const message = error instanceof Error ? error.message : String(error); + this.writeLine(`āŒ Failed to start trace server: ${message}`); + + // Check if port is already in use + if (message.includes('EADDRINUSE') || message.includes('address already in use')) { + this.writeLine(''); + this.writeLine(`āš ļø Port ${OTLP_PORT} is already in use.`); + this.writeLine(' The server may already be running.'); + if (TraceServer.isRunning()) { + this.writeLine(' Server is already running in this extension.'); + } + } + + this.writeLine(''); + // Close with error code + setTimeout(() => { + this.closeEmitter.fire(1); + }, 1000); + }); + } + + close(): void { + if (this.serverStarted) { + this.writeLine(''); + this.writeLine('šŸ‘‹ Shutting down trace server...'); + + TraceServer.stop() + .then(() => { + this.writeLine('āœ… Trace server stopped'); + this.closeEmitter.fire(0); + }) + .catch((error) => { + const message = error instanceof Error ? error.message : String(error); + this.writeLine(`āš ļø Error stopping server: ${message}`); + this.closeEmitter.fire(1); + }); + } else { + this.closeEmitter.fire(0); + } + } + + handleInput(data: string): void { + // Handle Ctrl+C (EOF) to close the terminal + if (data === '\x03') { // Ctrl+C + this.close(); + } + } + + private writeLine(text: string): void { + this.writeEmitter.fire(text + '\r\n'); + } +} + +/** + * Executes the trace server task + * @param workspaceFolder Optional workspace folder + * @returns Promise that resolves when the task is executed + */ +export async function executeTraceServerTask(): Promise { + const task = createTraceServerTask(); + try { + const taskExecution = await vscode.tasks.executeTask(task); + console.log('Trace server task executed'); + return; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + vscode.window.showErrorMessage(`Failed to execute trace server task: ${message}`); + throw error; + } +} + diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server.ts new file mode 100644 index 00000000000..d29a8fb1f8f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-server.ts @@ -0,0 +1,526 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import express from 'express'; +import { EventEmitter } from 'events'; + + +export interface Trace { + traceId: string; + spans: Span[]; + resource: Resource; + scope: Scope; + firstSeen: Date; + lastSeen: Date; +} + +export interface Span { + spanId: string; + traceId: string; + parentSpanId: string; + name: string; + kind: string; + startTime?: string; + endTime?: string; + attributes?: Attribute[]; +} + +export interface Resource { + name: string; + attributes: Attribute[]; +} + +export interface Scope { + name: string; + version?: string; + attributes?: Attribute[]; +} + +export interface Attribute { + key: string; + value: string; +} + +export interface TraceServer { + start(port: number): Promise; + stop(): Promise; + isRunning(): boolean; + getTraces(): Trace[]; + clearTraces(): void; + getTrace(traceId: string): Trace; + getTraceBySpanId(spanId: string): Trace; + getTraceByResource(resource: string): Trace; + getTraceByScope(scope: string): Trace; + getTraceByFirstSeen(firstSeen: Date): Trace; + getTraceByLastSeen(lastSeen: Date): Trace; + onTracesUpdated(callback: () => void): () => void; + onTracesCleared(callback: () => void): () => void; +} + + +const app = express(); +let server: ReturnType | undefined; + +// Parse both JSON and Protobuf +app.use(express.json()); +app.use(express.raw({ type: 'application/x-protobuf', limit: '10mb' })); + +// In-memory trace storage with LRU eviction +const MAX_TRACES = 100; +const traceStore = new Map(); // Map + +// Event emitter for trace updates +const traceEvents = new EventEmitter(); + +// Enforce trace limit with LRU eviction +function enforceTraceLimit(): void { + if (traceStore.size > MAX_TRACES) { + // Convert to array and sort by lastSeen (oldest first) + const traces = Array.from(traceStore.entries()).sort((a, b) => + a[1].lastSeen.getTime() - b[1].lastSeen.getTime() + ); + + // Remove oldest traces until we're at the limit + const numToRemove = traceStore.size - MAX_TRACES; + for (let i = 0; i < numToRemove; i++) { + traceStore.delete(traces[i][0]); + } + } +} + +// Color codes for better readability +const colors = { + reset: '\x1b[0m', + bright: '\x1b[1m', + cyan: '\x1b[36m', + green: '\x1b[32m', + yellow: '\x1b[33m', + red: '\x1b[31m', + magenta: '\x1b[35m', + blue: '\x1b[34m' +}; + +function bytesToHex(bytes) { + if (!bytes) { return 'N/A'; } + if (typeof bytes === 'string') { return bytes; } + return Buffer.from(bytes).toString('hex'); +} + +// REST API endpoint to get traces as JSON +app.get('/api/traces', (req, res) => { + const traces = Array.from(traceStore.values()).sort((a, b) => b.lastSeen - a.lastSeen); + + // Convert to JSON-friendly format with hex IDs + const tracesData = traces.map(trace => ({ + traceId: trace.traceId, + spans: trace.spans.map(span => ({ + ...span, + traceId: bytesToHex(span.traceId), + spanId: bytesToHex(span.spanId), + parentSpanId: bytesToHex(span.parentSpanId) + })), + resource: trace.resource, + scope: trace.scope, + firstSeen: trace.firstSeen, + lastSeen: trace.lastSeen + })); + + res.json({ traces: tracesData }); +}); + +// OTLP/HTTP endpoint for traces +app.post('/v1/traces', async (req, res) => { + const contentType = req.headers['content-type'] || ''; + + try { + let resourceSpans; + + // Handle Protobuf format (default from Java SDK) + if (contentType.includes('application/x-protobuf') || Buffer.isBuffer(req.body)) { + + // The @opentelemetry/otlp-transformer can decode protobuf + // But it's complex, so let's use a simpler approach with protobufjs + const { default: protobuf } = await import('protobufjs'); + + // Define the complete OTLP protobuf schema inline + const root = protobuf.Root.fromJSON({ + nested: { + opentelemetry: { + nested: { + proto: { + nested: { + trace: { + nested: { + v1: { + nested: { + TracesData: { + fields: { + resourceSpans: { + rule: 'repeated', + type: 'ResourceSpans', + id: 1 + } + } + }, + ResourceSpans: { + fields: { + resource: { type: 'Resource', id: 1 }, + scopeSpans: { rule: 'repeated', type: 'ScopeSpans', id: 2 }, + schemaUrl: { type: 'string', id: 3 } + } + }, + Resource: { + fields: { + attributes: { rule: 'repeated', type: 'KeyValue', id: 1 }, + droppedAttributesCount: { type: 'uint32', id: 2 } + } + }, + ScopeSpans: { + fields: { + scope: { type: 'InstrumentationScope', id: 1 }, + spans: { rule: 'repeated', type: 'Span', id: 2 }, + schemaUrl: { type: 'string', id: 3 } + } + }, + InstrumentationScope: { + fields: { + name: { type: 'string', id: 1 }, + version: { type: 'string', id: 2 }, + attributes: { rule: 'repeated', type: 'KeyValue', id: 3 }, + droppedAttributesCount: { type: 'uint32', id: 4 } + } + }, + Span: { + fields: { + traceId: { type: 'bytes', id: 1 }, + spanId: { type: 'bytes', id: 2 }, + traceState: { type: 'string', id: 3 }, + parentSpanId: { type: 'bytes', id: 4 }, + name: { type: 'string', id: 5 }, + kind: { type: 'SpanKind', id: 6 }, + startTimeUnixNano: { type: 'fixed64', id: 7 }, + endTimeUnixNano: { type: 'fixed64', id: 8 }, + attributes: { rule: 'repeated', type: 'KeyValue', id: 9 }, + droppedAttributesCount: { type: 'uint32', id: 10 }, + events: { rule: 'repeated', type: 'Event', id: 11 }, + droppedEventsCount: { type: 'uint32', id: 12 }, + links: { rule: 'repeated', type: 'Link', id: 13 }, + droppedLinksCount: { type: 'uint32', id: 14 }, + status: { type: 'Status', id: 15 }, + flags: { type: 'uint32', id: 16 } + } + }, + Event: { + fields: { + timeUnixNano: { type: 'fixed64', id: 1 }, + name: { type: 'string', id: 2 }, + attributes: { rule: 'repeated', type: 'KeyValue', id: 3 }, + droppedAttributesCount: { type: 'uint32', id: 4 } + } + }, + Link: { + fields: { + traceId: { type: 'bytes', id: 1 }, + spanId: { type: 'bytes', id: 2 }, + traceState: { type: 'string', id: 3 }, + attributes: { rule: 'repeated', type: 'KeyValue', id: 4 }, + droppedAttributesCount: { type: 'uint32', id: 5 }, + flags: { type: 'uint32', id: 6 } + } + }, + KeyValue: { + fields: { + key: { type: 'string', id: 1 }, + value: { type: 'AnyValue', id: 2 } + } + }, + AnyValue: { + fields: { + stringValue: { type: 'string', id: 1 }, + boolValue: { type: 'bool', id: 2 }, + intValue: { type: 'int64', id: 3 }, + doubleValue: { type: 'double', id: 4 }, + arrayValue: { type: 'ArrayValue', id: 5 }, + kvlistValue: { type: 'KeyValueList', id: 6 }, + bytesValue: { type: 'bytes', id: 7 } + } + }, + ArrayValue: { + fields: { + values: { rule: 'repeated', type: 'AnyValue', id: 1 } + } + }, + KeyValueList: { + fields: { + values: { rule: 'repeated', type: 'KeyValue', id: 1 } + } + }, + Status: { + fields: { + message: { type: 'string', id: 2 }, + code: { type: 'StatusCode', id: 3 } + } + }, + SpanKind: { + values: { + SPAN_KIND_UNSPECIFIED: 0, + SPAN_KIND_INTERNAL: 1, + SPAN_KIND_SERVER: 2, + SPAN_KIND_CLIENT: 3, + SPAN_KIND_PRODUCER: 4, + SPAN_KIND_CONSUMER: 5 + } + }, + StatusCode: { + values: { + STATUS_CODE_UNSET: 0, + STATUS_CODE_OK: 1, + STATUS_CODE_ERROR: 2 + } + } + } + } + } + } + } + } + } + } + } + }); + + const TracesData = root.lookupType('opentelemetry.proto.trace.v1.TracesData'); + const decoded = TracesData.decode(req.body); + const traceData = TracesData.toObject(decoded, { + longs: String, + bytes: Array + }); + + resourceSpans = traceData.resourceSpans; + } + // Handle JSON format + else { + resourceSpans = req.body.resourceSpans; + } + + if (resourceSpans && Array.isArray(resourceSpans)) { + // Group spans by traceId to show trace structure + const traceMap = new Map(); + let totalSpans = 0; + const now = new Date(); + + // Helper function to extract string value from OTLP AnyValue + const extractValue = (anyValue: any): string => { + if (!anyValue) { return ''; } + if (typeof anyValue === 'string') { return anyValue; } + if (anyValue.stringValue !== undefined) { return String(anyValue.stringValue); } + if (anyValue.intValue !== undefined) { return String(anyValue.intValue); } + if (anyValue.doubleValue !== undefined) { return String(anyValue.doubleValue); } + if (anyValue.boolValue !== undefined) { return String(anyValue.boolValue); } + return ''; + }; + + // Helper function to extract resource name from attributes + const extractResourceName = (resource: any): string => { + if (resource.name) { return resource.name; } + if (resource.attributes) { + const serviceNameAttr = resource.attributes.find((attr: any) => + attr.key === 'service.name' || attr.key === 'service_name' + ); + if (serviceNameAttr) { + return extractValue(serviceNameAttr.value); + } + } + return 'Unknown Resource'; + }; + + // Helper function to process resource attributes + const processAttributes = (attributes: any[]): Array<{key: string; value: string}> => { + if (!attributes || !Array.isArray(attributes)) { return []; } + return attributes.map((attr: any) => ({ + key: attr.key || '', + value: extractValue(attr.value) + })); + }; + + // Collect all spans and group by traceId + resourceSpans.forEach(resourceSpan => { + if (resourceSpan.scopeSpans) { + resourceSpan.scopeSpans.forEach(scopeSpan => { + if (scopeSpan.spans) { + scopeSpan.spans.forEach(span => { + const traceId = bytesToHex(span.traceId); + if (!traceMap.has(traceId)) { + // Process resource and scope + const resourceName = extractResourceName(resourceSpan.resource); + const scopeName = scopeSpan.scope?.name || 'Unknown Scope'; + + traceMap.set(traceId, { + spans: [], + resource: { + name: resourceName, + attributes: processAttributes(resourceSpan.resource?.attributes) + }, + scope: { + name: scopeName, + version: scopeSpan.scope?.version, + attributes: processAttributes(scopeSpan.scope?.attributes) + } + }); + } + // Convert span IDs to hex strings to match interface + // Convert timestamps from nanoseconds to ISO strings + const startTime = span.startTimeUnixNano + ? new Date(Number(span.startTimeUnixNano) / 1_000_000).toISOString() + : undefined; + const endTime = span.endTimeUnixNano + ? new Date(Number(span.endTimeUnixNano) / 1_000_000).toISOString() + : undefined; + + const processedSpan = { + ...span, + spanId: bytesToHex(span.spanId), + traceId: traceId, + parentSpanId: bytesToHex(span.parentSpanId || ''), + startTime, + endTime, + attributes: processAttributes(span.attributes) + }; + traceMap.get(traceId).spans.push(processedSpan); + totalSpans++; + }); + } + }); + } + }); + + // Store traces in memory + traceMap.forEach((traceData, traceId) => { + if (traceStore.has(traceId)) { + // Update existing trace + const existing = traceStore.get(traceId); + existing.spans.push(...traceData.spans); + existing.lastSeen = now; + } else { + // Add new trace + traceStore.set(traceId, { + traceId, + spans: traceData.spans, + resource: traceData.resource, + scope: traceData.scope, + firstSeen: now, + lastSeen: now + }); + } + }); + + // Enforce LRU eviction if we exceed the limit + enforceTraceLimit(); + + // Emit event for trace updates + traceEvents.emit('tracesUpdated'); + + // Simple logging - just show received data + console.log(`${colors.cyan}šŸ“Ø Received ${totalSpans} span(s) across ${traceMap.size} trace(s) | Total stored: ${traceStore.size} trace(s)${colors.reset}`); + } else { + console.log(`${colors.red}āš ļø Invalid OTLP payload - no resourceSpans found${colors.reset}`); + } + + res.status(200).json({ partialSuccess: {} }); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + const stack = error instanceof Error ? error.stack : undefined; + console.error(`${colors.red}Error processing traces:${colors.reset}`, message); + if (stack) { console.error(stack); } + res.status(500).json({ error: message }); + } +}); + +app.get('/health', (req, res) => { + res.status(200).json({ status: 'healthy', service: 'devtrace-otlp-server' }); +}); + + + + +export const TraceServer: TraceServer = { + start: (port: number) => new Promise((resolve, reject) => { + if (server) { + // Server already running + resolve(); + return; + } + + server = app.listen(port, () => { + resolve(); + }); + server.on('error', (error) => { + reject(error); + }); + }), + stop: () => new Promise((resolve, reject) => { + if (!server) { + resolve(); + return; + } + server.close((error) => { + if (error) { + reject(error); + } else { + server = undefined; + resolve(); + } + }); + }), + isRunning: () => { + return server?.listening ?? false; + }, + getTraces: () => { + return Array.from(traceStore.values()); + }, + clearTraces: () => { + traceStore.clear(); + traceEvents.emit('tracesCleared'); + }, + getTrace: (traceId: string) => { + return traceStore.get(traceId); + }, + getTraceBySpanId: (spanId: string) => { + return Array.from(traceStore.values()).find(trace => trace.spans.some(span => span.spanId === spanId)); + }, + getTraceByResource: (resource: string) => { + return Array.from(traceStore.values()).find(trace => trace.resource.name === resource); + }, + getTraceByScope: (scope: string) => { + return Array.from(traceStore.values()).find(trace => trace.scope.name === scope); + }, + getTraceByFirstSeen: (firstSeen: Date) => { + return Array.from(traceStore.values()).find(trace => trace.firstSeen === firstSeen); + }, + getTraceByLastSeen: (lastSeen: Date) => { + return Array.from(traceStore.values()).find(trace => trace.lastSeen === lastSeen); + }, + onTracesUpdated: (callback: () => void) => { + traceEvents.on('tracesUpdated', callback); + return () => traceEvents.off('tracesUpdated', callback); + }, + onTracesCleared: (callback: () => void) => { + traceEvents.on('tracesCleared', callback); + return () => traceEvents.off('tracesCleared', callback); + } +}; \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-tree-view.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-tree-view.ts new file mode 100644 index 00000000000..aa2bee9098f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/trace-tree-view.ts @@ -0,0 +1,455 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import { Trace, Span } from './trace-server'; +import { TraceServer } from './trace-server'; +import { TracerMachine } from './tracer-machine'; + +/** + * Represents a trace node in the tree view + */ +class TraceNode { + constructor( + public readonly trace: Trace, + public readonly label: string + ) {} +} + +/** + * Represents a span node in the tree view + */ +class SpanNode { + constructor( + public readonly span: Span, + public readonly traceId: string, + public readonly label: string, + public readonly children: SpanNode[] + ) {} +} + +/** + * TreeDataProvider for displaying traces and spans + */ +export class TraceTreeDataProvider implements vscode.TreeDataProvider { + private _onDidChangeTreeData: vscode.EventEmitter = + new vscode.EventEmitter(); + readonly onDidChangeTreeData: vscode.Event = + this._onDidChangeTreeData.event; + + private traceServerUnsubscribeUpdated?: () => void; + private traceServerUnsubscribeCleared?: () => void; + + constructor() { + // Subscribe to TracerMachine state changes + // Note: TracerMachine.onUpdate doesn't return unsubscribe function + TracerMachine.onUpdate((state: any) => { + this.refresh(); + }); + + // Subscribe to TraceServer updates + this.traceServerUnsubscribeUpdated = TraceServer.onTracesUpdated(async () => { + const traces = TraceServer.getTraces(); + if (traces.length > 0) { + // Update context when first trace arrives + await vscode.commands.executeCommand('setContext', 'ballerina.tracesEmpty', false); + } + this.refresh(); + }); + + this.traceServerUnsubscribeCleared = TraceServer.onTracesCleared(async () => { + await vscode.commands.executeCommand('setContext', 'ballerina.tracesEmpty', true); + this.refresh(); + }); + } + + refresh(): void { + this._onDidChangeTreeData.fire(); + } + + getTreeItem(element: TraceNode | SpanNode): vscode.TreeItem { + if (element instanceof TraceNode) { + const item = new vscode.TreeItem( + element.label, + vscode.TreeItemCollapsibleState.Collapsed + ); + item.tooltip = `Trace ID: ${element.trace.traceId}\n` + + `Resource: ${element.trace.resource.name}\n` + + `Scope: ${element.trace.scope.name}\n` + + `First Seen: ${element.trace.firstSeen.toLocaleString()}\n` + + `Last Seen: ${element.trace.lastSeen.toLocaleString()}\n` + + `Spans: ${element.trace.spans.length}`; + item.iconPath = new vscode.ThemeIcon('search'); + item.contextValue = 'trace'; + // Add command to open trace details when clicked + item.command = { + command: 'ballerina.showTraceDetails', + title: 'Show Trace Details', + arguments: [element.trace] + }; + return item; + } else { + // SpanNode + const hasChildren = element.children.length > 0; + const item = new vscode.TreeItem( + element.label, + hasChildren ? vscode.TreeItemCollapsibleState.Collapsed : vscode.TreeItemCollapsibleState.None + ); + + // Build tooltip with span details + const spanKind = this.getSpanKindLabel(element.span.kind); + item.tooltip = `Span: ${element.span.name}\n` + + `Kind: ${spanKind}\n` + + `Trace ID: ${element.traceId}\n` + + `Span ID: ${element.span.spanId}\n` + + (element.span.parentSpanId && element.span.parentSpanId !== '0000000000000000' ? `Parent Span ID: ${element.span.parentSpanId}` : 'Root Span'); + + item.iconPath = new vscode.ThemeIcon('package'); + item.contextValue = 'span'; + return item; + } + } + + async getChildren(element?: TraceNode | SpanNode): Promise<(TraceNode | SpanNode)[]> { + // Check if tracing is enabled + const isEnabled = TracerMachine.isEnabled(); + + if (!isEnabled) { + // Return empty array - VS Code will show placeholder from viewsWelcome + return []; + } + + // Get traces from TraceServer + const traces = TraceServer.getTraces(); + + if (traces.length === 0) { + // Return empty array - VS Code will show empty state placeholder + // Make sure ballerina.tracesEmpty context is set to true + await vscode.commands.executeCommand('setContext', 'ballerina.tracesEmpty', true); + return []; + } + + // Update context - traces exist now + await vscode.commands.executeCommand('setContext', 'ballerina.tracesEmpty', false); + + // Return trace nodes or span nodes based on element + if (!element) { + // Root level - return all traces + return traces.map(trace => new TraceNode( + trace, + `Trace: ${this.truncateId(trace.traceId)}` + )); + } else if (element instanceof TraceNode) { + // Trace node - return child spans (organized hierarchically) + return this.getSpansForTrace(element.trace); + } else if (element instanceof SpanNode) { + // Span node - return child spans if any + return element.children; + } + + return []; + } + + getParent(element: TraceNode | SpanNode): vscode.ProviderResult { + // Root elements (TraceNodes) have no parent + if (element instanceof TraceNode) { + return undefined; + } + + // For SpanNodes, find the parent based on parentSpanId + if (element instanceof SpanNode) { + const parentSpanId = element.span.parentSpanId; + + // If no parent span ID or it's the root span marker, parent is the TraceNode + if (!parentSpanId || + parentSpanId === '0000000000000000' || + parentSpanId === '') { + // Return the parent TraceNode + const traces = TraceServer.getTraces(); + const trace = traces.find(t => t.traceId === element.traceId); + if (trace) { + return new TraceNode(trace, `Trace: ${this.truncateId(trace.traceId)}`); + } + return undefined; + } + + // Find the parent span in the same trace + const traces = TraceServer.getTraces(); + const trace = traces.find(t => t.traceId === element.traceId); + if (trace) { + // Find the parent span by parentSpanId + const parentSpan = trace.spans.find(s => s.spanId === parentSpanId); + if (parentSpan) { + // Build the hierarchy and find the parent SpanNode + const spanNodes = this.getSpansForTrace(trace); + const parentNode = this.findSpanNodeById(parentSpanId, spanNodes); + if (parentNode) { + return parentNode; + } + + // If not found in hierarchy (shouldn't happen), create one + // This is a fallback for edge cases + const label = this.formatSpanLabel(parentSpan); + return new SpanNode(parentSpan, element.traceId, label, []); + } + } + } + + return undefined; + } + + /** + * Recursively find a span node by span ID + */ + private findSpanNodeById(spanId: string, spanNodes: SpanNode[]): SpanNode | null { + for (const spanNode of spanNodes) { + if (spanNode.span.spanId === spanId) { + return spanNode; + } + + // Recursively search in children + const found = this.findSpanNodeById(spanId, spanNode.children); + if (found) { + return found; + } + } + + return null; + } + + /** + * Get spans for a trace, organized in a hierarchical structure + */ + private getSpansForTrace(trace: Trace): SpanNode[] { + const spanMap = new Map(); + const rootSpans: SpanNode[] = []; + + // First pass: create all span nodes + trace.spans.forEach(span => { + // spanId is already a hex string from trace-server + const spanIdHex = span.spanId || ''; + const label = this.formatSpanLabel(span); + + spanMap.set(spanIdHex, new SpanNode( + span, + trace.traceId, + label, + [] // Children will be set in second pass + )); + }); + + // Second pass: build parent-child relationships + trace.spans.forEach(span => { + const spanIdHex = span.spanId || ''; + const parentSpanIdHex = span.parentSpanId || ''; + const spanNode = spanMap.get(spanIdHex); + + if (!spanNode) { + return; + } + + // Root span: empty or all zeros parentSpanId, or parent not found + if (!parentSpanIdHex || + parentSpanIdHex === '0000000000000000' || + parentSpanIdHex === '' || + !spanMap.has(parentSpanIdHex)) { + rootSpans.push(spanNode); + } else { + // Child span - add to parent's children + const parentNode = spanMap.get(parentSpanIdHex); + if (parentNode) { + parentNode.children.push(spanNode); + } + } + }); + + // Sort root spans by span name for consistency + rootSpans.sort((a, b) => a.span.name.localeCompare(b.span.name)); + + return rootSpans; + } + + /** + * Format span label with name and kind + */ + private formatSpanLabel(span: Span): string { + const spanKind = this.getSpanKindLabel(span.kind); + return `${span.name} (${spanKind})`; + } + + /** + * Get human-readable span kind label + */ + private getSpanKindLabel(kind: string | number): string { + if (typeof kind === 'string') { + return kind; + } + const kindMap: { [key: number]: string } = { + 0: 'UNSPECIFIED', + 1: 'INTERNAL', + 2: 'SERVER', + 3: 'CLIENT', + 4: 'PRODUCER', + 5: 'CONSUMER' + }; + return kindMap[kind] || `UNKNOWN(${kind})`; + } + + /** + * Truncate trace ID for display + */ + private truncateId(id: string, length: number = 8): string { + if (id.length <= length) { + return id; + } + return `${id.substring(0, length)}...`; + } + + /** + * Format trace details as text for display in editor + */ + static formatTraceDetails(trace: Trace): string { + const lines: string[] = []; + + // Header + lines.push('='.repeat(80)); + lines.push('TRACE DETAILS'); + lines.push('='.repeat(80)); + lines.push(''); + + // Trace Information + lines.push('Trace ID:'); + lines.push(` ${trace.traceId}`); + lines.push(''); + + lines.push('Resource:'); + lines.push(` Name: ${trace.resource.name}`); + if (trace.resource.attributes && trace.resource.attributes.length > 0) { + lines.push(' Attributes:'); + trace.resource.attributes.forEach(attr => { + lines.push(` ${attr.key}: ${attr.value}`); + }); + } + lines.push(''); + + lines.push('Instrumentation Scope:'); + lines.push(` Name: ${trace.scope.name}`); + if (trace.scope.version) { + lines.push(` Version: ${trace.scope.version}`); + } + if (trace.scope.attributes && trace.scope.attributes.length > 0) { + lines.push(' Attributes:'); + trace.scope.attributes.forEach(attr => { + lines.push(` ${attr.key}: ${attr.value}`); + }); + } + lines.push(''); + + lines.push('Timestamps:'); + lines.push(` First Seen: ${trace.firstSeen.toLocaleString()}`); + lines.push(` Last Seen: ${trace.lastSeen.toLocaleString()}`); + const duration = trace.lastSeen.getTime() - trace.firstSeen.getTime(); + lines.push(` Duration: ${duration}ms`); + lines.push(''); + + // Spans + lines.push('='.repeat(80)); + lines.push(`SPANS (${trace.spans.length} total)`); + lines.push('='.repeat(80)); + lines.push(''); + + // Build span hierarchy + const spanMap = new Map(); + const rootSpans: Span[] = []; + + trace.spans.forEach(span => { + spanMap.set(span.spanId, span); + }); + + trace.spans.forEach(span => { + const parentSpanId = span.parentSpanId || ''; + if (!parentSpanId || + parentSpanId === '0000000000000000' || + parentSpanId === '' || + !spanMap.has(parentSpanId)) { + rootSpans.push(span); + } + }); + + // Format spans recursively + const formatSpan = (span: Span, indent: number = 0): void => { + const indentStr = ' '.repeat(indent); + const spanKind = this.getSpanKindLabelStatic(span.kind); + + lines.push(`${indentStr}${'─'.repeat(60 - indent * 2)}`); + lines.push(`${indentStr}Span: ${span.name}`); + lines.push(`${indentStr} ID: ${span.spanId}`); + lines.push(`${indentStr} Kind: ${spanKind}`); + if (span.parentSpanId && span.parentSpanId !== '0000000000000000') { + lines.push(`${indentStr} Parent Span ID: ${span.parentSpanId}`); + } else { + lines.push(`${indentStr} Parent: Root Span`); + } + lines.push(`${indentStr} Trace ID: ${span.traceId}`); + + // Find child spans + const childSpans = trace.spans.filter(s => s.parentSpanId === span.spanId); + if (childSpans.length > 0) { + lines.push(`${indentStr} Child Spans: ${childSpans.length}`); + childSpans.forEach(childSpan => { + formatSpan(childSpan, indent + 1); + }); + } + lines.push(''); + }; + + // Format all root spans + rootSpans.forEach(span => { + formatSpan(span, 0); + }); + + return lines.join('\n'); + } + + /** + * Get human-readable span kind label (static version) + */ + private static getSpanKindLabelStatic(kind: string | number): string { + if (typeof kind === 'string') { + return kind; + } + const kindMap: { [key: number]: string } = { + 0: 'UNSPECIFIED', + 1: 'INTERNAL', + 2: 'SERVER', + 3: 'CLIENT', + 4: 'PRODUCER', + 5: 'CONSUMER' + }; + return kindMap[kind] || `UNKNOWN(${kind})`; + } + + /** + * Dispose resources + */ + dispose(): void { + this.traceServerUnsubscribeUpdated?.(); + this.traceServerUnsubscribeCleared?.(); + this._onDidChangeTreeData.dispose(); + } +} + diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/tracer-machine.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/tracer-machine.ts new file mode 100644 index 00000000000..db7143831e9 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/tracer-machine.ts @@ -0,0 +1,539 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { createMachine, assign, interpret } from 'xstate'; +import type { Interpreter } from 'xstate'; +import { TraceServer } from './trace-server'; +import * as path from 'path'; +import * as fs from 'fs'; +import { createTraceServerTask } from './trace-server-task'; +import * as vscode from 'vscode'; +import { setTracingConfig, removeTracingConfig } from './utils'; +import { OTLP_PORT } from './constants'; + + + +/** + * State machine flow + * + * If the tracing is enabled in the project, the state machine will transition to the enabled state. + * If the tracing is not enabled in the project, the state machine will transition to the disabled state. + * + * User can manually enable/disable tracing via UI + * Then trace machine will update all the projects with relevent imports + * + * When user runs the program when state machine is enabled + * it will start the tracing server and it will be on for rest of the program execution. + * + * If user disable tracing via UI + * it will stop the tracing server and it will be off for rest of the program execution. + * + * We will only capture trace logs if the window is opened + * + */ + +/** + * Context for the tracing server state machine + */ +export interface TracerMachineContext { + serverPort?: number; + serverPid?: number; + error?: string; + startFailureReason?: string; + workspaceDirs?: string[]; + isDisabling?: boolean; + traceServer?: TraceServer; + taskExecution?: vscode.TaskExecution; + taskTerminationListener?: vscode.Disposable; +} + +/** + * Check if tracing is enabled in the current project + */ +function isTraceEnabledInProject(context: TracerMachineContext): Promise<{ isTraceEnabledInProject: boolean }> { + return new Promise((resolve) => { + // Check if a file called trace_enabled.bal exists in any workspace dir + const traceEnabled = context.workspaceDirs?.some((workspaceDir) => { + return fs.existsSync(path.join(workspaceDir, 'trace_enabled.bal')); + }) ?? false; + + resolve({ isTraceEnabledInProject: traceEnabled }); + }); +} + +function enableTracingInProject(context: TracerMachineContext, event?: any): void { + console.log('enableTracingInProject called with context:', { + workspaceDirs: context.workspaceDirs, + hasWorkspaceDirs: !!context.workspaceDirs, + workspaceDirsLength: context.workspaceDirs?.length || 0 + }); + + if (!context.workspaceDirs || context.workspaceDirs.length === 0) { + console.error('enableTracingInProject: No workspace directories provided'); + return; + } + + context.workspaceDirs.forEach((workspaceDir) => { + try { + const traceFilePath = path.join(workspaceDir, 'trace_enabled.bal'); + fs.writeFileSync(traceFilePath, 'import ballerinax/idetraceprovider as _;'); + + setTracingConfig(workspaceDir); + } catch (error) { + console.error(`Failed to write trace_enabled.bal to ${workspaceDir}:`, error); + } + }); +} + +function disableTracingInProject(context: TracerMachineContext, event?: any): void { + console.log('disableTracingInProject called with context:', { + workspaceDirs: context.workspaceDirs, + hasWorkspaceDirs: !!context.workspaceDirs, + workspaceDirsLength: context.workspaceDirs?.length || 0 + }); + + if (!context.workspaceDirs || context.workspaceDirs.length === 0) { + console.error('disableTracingInProject: No workspace directories provided'); + return; + } + + context.workspaceDirs.forEach((workspaceDir) => { + try { + const traceFilePath = path.join(workspaceDir, 'trace_enabled.bal'); + if (fs.existsSync(traceFilePath)) { + fs.unlinkSync(traceFilePath); + } + removeTracingConfig(workspaceDir); + } catch (error) { + console.error(`Failed to disable tracing in ${workspaceDir}:`, error); + } + }); +} + +function startServer(context: TracerMachineContext, event?: any): Thenable { + const task = createTraceServerTask(); + return vscode.tasks.executeTask(task); +} + +function stopServer(context: TracerMachineContext, event?: any): Promise { + return TraceServer.stop(); +} + + +/** + * Creates a state machine for managing the tracing server lifecycle + */ +function createTracerMachine(workspaceDirs?: string[]) { + return createMachine( + { + /** @xstate-layout N4IgpgJg5mDOIC5QBcBOBDAxmVBZLAFgJYB2YAxAIIAi1A+gOoDyASgNIDKACpQMICiHANoAGALqJQABwD2sIsiIySkkAA9EARgBM2gMwA6TQBYRANgCsAdgAcFm2e0mANCACeWkVYMBOC3s1NHxsREWMLYzM9AF9o1zQsHHxMYjJyFn5cJgA1fkZWTh4BYXFVWXlFZVUNBB0vAz1g4z0RPWMrYzszVw9a7Vj4jGw8QlIwA1IFcghlcdIANxkAa3GE4eTUuZIFBAWZTHRKklExE7K5BSUVJHVEC00bIwe-MzNNKzM7HsROiwMOqx6SzaGwfXRAgYgNZJUZkCbbZDTWbwxYrAzQkYpMbwnZ7A5HE5CTQSG7lS5VG41d7GAxOczWETaaz+XTfBBmYw+AzWHyaBkWMJ8qyQjEbbGTRE4VAyVAGKQAG0OADMZQBbdFDGFYuES3YkRb4q6E0qki5HapaHyGUG6bQ+XT+EQCvRskIiXyRNpeKyhEQ+MwizWYzYGMAkdAAI3lkHI1AAkhxKAAhAAy-DOpoqVwtCCsugMZh9Zh8rXMVl5xjZmg5ZiMIk0jT8rRemkDiWD2LDkejEHS-AAYhkOAAJDPSM3ZymIWzeHxWyyhPS2dqV9yIRruvkmJdBV5LtvrWHjLtRyAGWA4eY4DjIGRSKQxjgAFUoLCfdA4-BYuRYY5AZPNKdcwsbQCyZUsHEZECbCrRlNAMYxdBsFc-TncIDy1EMTx7c9L2vZB0FQRQSCgJEdX1ZZViDMU4Wws8L1QK9UBvQjiKgPUDUOI1xD-ADJ1AKk-VAwFjFE6xAm0esXTXWpWm8d4QR9RDATMJ0MI7Wjw1PCBcMY-DWNIUipRlOVFWQFVUHVUUj1DLScIYpiWKIwyOP2LjlGNElxyzCkBM8e1-jaMSrAkqTXRCgt-QCRpNHrGd1Jo487PovDUH7dAiB7J8ZCcxEMifFgAE1eInXzblqKJDHLT5nV5VoHDZEt5LzBwrFsBslxsBKbLonSHJwdLMsgbLcr7AriuJc4fOuPyKr0Kr-TsZtYr0BqZK6AsWs5f1PidHxuu1JLuxSvTmIIojHyfJguA-L8fxK6ac0k7RawsecojeyxAhgmT7W8RCQTeCwgbUuIoWonrkr61KbzvKRDLIrZUSo9tEts47odO2H7xcvF3OOHiTW88kZvK57XvevRPvuB42UBf6kPaOSWneA6sKh3THNvHGSPIYzZQVZU1Q1VHIYxzn8Lh3GKMNDzCa8-9StJmpntnJdlOUgVbFdNoEOLDpC0ZODWzB6zDoMCAiFgDHyH4AA5ZM0wekmc2sKs2tAmw7X0HRAjeTo2exS3re0vtB0EUcicVx6gIbeCQrCN4Pdeawft6BsSwMGwSy9v1OmQ4xYjBkgZAgOBVDNzYppdoCAFpNDZFpQK+4xqxBCxgb+wPyIUavANm9o2Vb0CFJsea5zebQPm7o7tL7-jyv8bx-B0K1fSCPk2Q7917RBPwfDa4J+lNiHzd6iWzrhyB57Kmp7D+Fe7RaUIN4sRqve5cxdwCUwQv2k-RZnw5v1M6BkSI32Voge0jxCwbytNWSwwRGrBAQkhJ0QQC5WAsDPdG2kL6DSyjlc6yAIE5m3H8dqLQsHZycFPV0xZfBITHlTSSXscHnxAbla+mYa6zQeI4MCApORMlWiFNOiBQTwVHn4NoNhYp2nYcAmG3N4bgJ4f3MmQIuQcidP4FkIkdZ-G-sCcI5YAg4ODhjUhQFn4GFaHUVuC5VrIXdkELO2d5FWnuH4Iu0QgA */ + id: 'tracerMachine', + initial: 'init', + context: { + serverPort: OTLP_PORT, + serverPid: undefined, + error: undefined, + startFailureReason: undefined, + workspaceDirs: workspaceDirs || [], + isDisabling: false, + taskExecution: undefined, + taskTerminationListener: undefined + }, + on: { + ADD_WORKSPACES: { + actions: assign({ + workspaceDirs: (context, event) => [...context.workspaceDirs, (event as any).workspaceDir], + }), + }, + REMOVE_WORKSPACES: { + actions: assign({ + workspaceDirs: (context, event) => context.workspaceDirs.filter((dir) => dir !== (event as any).workspaceDir), + }), + }, + }, + states: { + /** + * Initial state when the tracer machine is first created + */ + init: { + entry: () => { + console.log('Tracer state: init'); + }, + + invoke: { + src: 'initializeTracer', + onDone: [ + { + target: 'enabled', + cond: (context, event) => { + const traceEnabled = (event as any).data?.isTraceEnabledInProject; + return traceEnabled === true; + } + }, + { + target: 'disabled' + } + ], + onError: { + target: 'disabled', + actions: assign({ + startFailureReason: (context, event) => (event as any).data?.error || context.error, + error: (context, event) => (event as any).data?.error || context.error, + }), + }, + } + }, + + /** + * Tracer is enabled and ready to start the server + * Contains nested states for server lifecycle management + */ + enabled: { + initial: 'serverStopped', + entry: [ + () => { + console.log('Tracer state: enabled'); + }, + assign({ + error: undefined, + }), + () => { + // TODO: Implement enable logic (register handlers, etc.) + }, + ], + on: { + DISABLE: [ + { + target: 'enabled.serverStopping', + cond: () => { + // If server is running, stop it first before disabling + return TraceServer.isRunning(); + }, + actions: [ + assign({ + isDisabling: true, + }), + ], + }, + { + target: 'disabled', + actions: [ + disableTracingInProject, + ], + }, + ], + + REFRESH: { + target: 'init', + actions: assign({ + error: undefined, + startFailureReason: undefined, + serverPort: undefined, + serverPid: undefined, + isDisabling: false, + }), + } + }, + states: { + /** + * Server is stopped (initial state when enabled) + */ + serverStopped: { + entry: () => { + console.log('Tracer state: enabled.serverStopped'); + }, + + on: { + START_SERVER: { + target: "serverStarting" + } + } + }, + + serverStarting: { + invoke: { + src: startServer, + onDone: { + target: "serverStarted", + actions: assign({ + error: undefined, + taskExecution: (context, event) => (event as any).data, + }), + }, + onError: { + target: "serverFailedToStart", + actions: assign({ + error: (context, event) => { + const err = (event as any).data; + return err instanceof Error ? err.message : String(err); + } + }) + } + } + }, + /** + * Server start failed + */ + serverFailedToStart: { + entry: () => { + console.log('Tracer state: enabled.serverFailedToStart'); + }, + + on: { + RETRY: [{ + target: "serverStarted", + cond: "New guard" + }, "serverStarted"] + } + }, + + /** + * Server is started and running + */ + serverStarted: { + entry: [ + () => { + console.log('Tracer state: enabled.serverStarted'); + }, + assign({ + error: undefined, + }), + ], + invoke: { + id: 'taskTerminationListener', + src: (context, event) => (callback, onReceive) => { + // Capture taskExecution reference at setup time + const taskExecution = context.taskExecution; + + // Set up task termination listener + const disposable = vscode.tasks.onDidEndTask((taskEvent) => { + // Check if the ended task matches our task execution + if (taskExecution && taskEvent.execution === taskExecution) { + console.log('Trace server task terminated'); + callback({ type: 'TASK_TERMINATED' }); + } + }); + + // Return cleanup function + return () => { + disposable.dispose(); + }; + }, + }, + on: { + STOP_SERVER: { + target: "serverStopping" + }, + TASK_TERMINATED: { + target: "serverStopped", + actions: [ + assign({ + taskExecution: undefined, + }), + ], + } + } + }, + + serverStopping: { + invoke: { + src: stopServer, + onDone: [ + { + target: "#tracerMachine.disabled", + cond: (context) => context.isDisabling === true, + actions: [ + disableTracingInProject, + assign({ + isDisabling: false, + }), + ], + }, + { + target: "serverStopped", + }, + ], + onError: { + target: "serverStarted", + actions: [ + assign({ + error: (context, event) => { + const err = (event as any).data; + return err instanceof Error ? err.message : String(err); + }, + isDisabling: false, + }), + ], + } + }, + on: { + DISABLE: { + actions: [ + assign({ + isDisabling: true, + }), + ], + }, + }, + } + }, + }, + + /** + * Tracer is disabled (server cannot be started) + */ + disabled: { + entry: [ + () => { + console.log('Tracer state: disabled'); + }, + assign({ + isDisabling: false, + }), + ], + on: { + ENABLE: { + target: 'enabled', + actions: enableTracingInProject, + }, + REFRESH: { + target: 'init', + actions: assign({ + error: undefined, + startFailureReason: undefined, + serverPort: undefined, + serverPid: undefined, + isDisabling: false, + }), + } + }, + } + }, + }, + { + services: { + // Initialize the tracer + initializeTracer: isTraceEnabledInProject + }, + }); +} + +// Service instance (created on initialization) +let tracerService: ReturnType | undefined; + +/** + * Ensures the tracer service is initialized and returns it + * @throws {Error} If the tracer service is not initialized + */ +function ensureInitialized(): ReturnType { + if (!tracerService) { + throw new Error('TracerMachine not initialized. Call initialize() first.'); + } + return tracerService; +} + +/** + * Singleton object providing access to the tracer state machine + */ +export const TracerMachine = { + /** + * Create and start the tracer machine with workspace directories + */ + initialize: (workspaceDirs?: string[]) => { + const machine = createTracerMachine(workspaceDirs); + tracerService = interpret(machine) as ReturnType; + tracerService.start(); + }, + + addWorkspace: (workspaceDir: string) => { + ensureInitialized().send({ type: 'ADD_WORKSPACES' }, { workspaceDir }); + }, + + removeWorkspace: (workspaceDir: string) => { + ensureInitialized().send({ type: 'REMOVE_WORKSPACES' }, { workspaceDir }); + }, + + + isEnabled: () => { + const value = ensureInitialized().getSnapshot().value; + if (typeof value === 'string') { + return value === 'enabled'; + } + if (typeof value === 'object' && value !== null) { + return value.hasOwnProperty('enabled'); + } + return false; + }, + + isServerStarted: () => { + const snapshot = ensureInitialized().getSnapshot(); + const value = snapshot.value; + if (typeof value === 'string') { + return value === 'enabled.serverStarted'; + } + if (typeof value === 'object' && value !== null) { + const obj = value as Record; + return obj.enabled === 'serverStarted'; + } + return false; + }, + + /** + * Get the current state value (for testing) + */ + getState: () => { + return ensureInitialized().getSnapshot().value; + }, + + startServer: () => { + ensureInitialized().send({ type: 'START_SERVER' }); + }, + + stopServer: () => { + ensureInitialized().send({ type: 'STOP_SERVER' }); + }, + + enable: () => { + ensureInitialized().send({ type: 'ENABLE' }); + }, + + disable: () => { + ensureInitialized().send({ type: 'DISABLE' }); + }, + + refresh: (workspaceDirs?: string[]) => { + const snapshot = ensureInitialized().getSnapshot(); + const context = snapshot.context as TracerMachineContext; + const currentWorkspaceDirs = context.workspaceDirs || []; + const updatedWorkspaceDirs = workspaceDirs || currentWorkspaceDirs; + const machine = createTracerMachine(updatedWorkspaceDirs); + tracerService = interpret(machine) as ReturnType; + tracerService.start(); + }, + + onUpdate: (callback: (state: any) => void) => { + ensureInitialized().subscribe((state) => { + callback(state.value); + }); + }, + + getTraceServer: () => { + return TraceServer; + }, +}; + diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/utils.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/utils.ts new file mode 100644 index 00000000000..cb97e79655d --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/utils.ts @@ -0,0 +1,425 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as fs from 'fs'; +import * as path from 'path'; +import { parse, stringify } from '@iarna/toml'; +import { OTLP_PORT } from './constants'; + +/** + * Sets tracing configuration in Config.toml and Ballerina.toml files + * + * This function will: + * - Read existing Config.toml if it exists + * - Update or add [ballerina.observe] section with tracingEnabled = true and tracingProvider = "idetraceprovider" + * - Update or add [ballerinax.idetraceprovider] section with endpoint = "http://localhost:/v1/traces" + * - Read existing Ballerina.toml if it exists + * - Update or add [build-options] section with observabilityIncluded = true + * - Preserve all other existing configuration + * + * @param workspaceDir The workspace directory where Config.toml and Ballerina.toml should be created/updated + * @returns Promise Resolves when configuration is successfully written + * @throws Error if file operations fail + */ +export async function setTracingConfig(workspaceDir: string): Promise { + // Update Config.toml + const configFilePath = path.join(workspaceDir, 'Config.toml'); + + // Read existing Config.toml content if it exists + let existingContent = ''; + let parsedConfig: any = {}; + + if (fs.existsSync(configFilePath)) { + try { + existingContent = fs.readFileSync(configFilePath, 'utf-8'); + parsedConfig = parse(existingContent); + } catch (error) { + console.error('Failed to parse existing Config.toml:', error); + // Continue with empty config if parsing fails + } + } + + // Update the parsed config object + if (!parsedConfig['ballerina']) { + parsedConfig['ballerina'] = {}; + } + if (!parsedConfig['ballerina']['observe']) { + parsedConfig['ballerina']['observe'] = {}; + } + + parsedConfig['ballerina']['observe']['tracingEnabled'] = true; + parsedConfig['ballerina']['observe']['tracingProvider'] = 'idetraceprovider'; + + // Convert the updated config object back to TOML string + const updatedContent = convertObjectToToml(parsedConfig, existingContent); + + // Write the updated content to Config.toml + fs.writeFileSync(configFilePath, updatedContent, 'utf-8'); + + // Update Ballerina.toml + const ballerinaTomlPath = path.join(workspaceDir, 'Ballerina.toml'); + + // Read existing Ballerina.toml content if it exists + let ballerinaTomlContent = ''; + if (fs.existsSync(ballerinaTomlPath)) { + try { + ballerinaTomlContent = fs.readFileSync(ballerinaTomlPath, 'utf-8'); + } catch (error) { + console.error('Failed to read existing Ballerina.toml:', error); + // Continue with empty content if reading fails + } + } + + // Update or add [build-options] section with observabilityIncluded = true + ballerinaTomlContent = updateOrAddSection( + ballerinaTomlContent, + 'build-options', + { + observabilityIncluded: true + } + ); + + // Ensure file ends with newline + if (!ballerinaTomlContent.endsWith('\n')) { + ballerinaTomlContent += '\n'; + } + + // Write the updated content to Ballerina.toml + fs.writeFileSync(ballerinaTomlPath, ballerinaTomlContent, 'utf-8'); +} + +/** + * Converts a JavaScript object to TOML format string + * Uses a simpler approach: updates existing sections or appends new ones + * + * @param config The parsed config object + * @param originalContent Original TOML content for reference + * @returns TOML formatted string + */ +function convertObjectToToml(config: any, originalContent: string): string { + let updatedContent = originalContent || ''; + + // Update or add [ballerina.observe] section + updatedContent = updateOrAddSection( + updatedContent, + 'ballerina.observe', + { + tracingEnabled: config.ballerina?.observe?.tracingEnabled ?? true, + tracingProvider: config.ballerina?.observe?.tracingProvider ?? 'idetraceprovider' + } + ); + + // Ensure file ends with newline + if (!updatedContent.endsWith('\n')) { + updatedContent += '\n'; + } + + return updatedContent; +} + +/** + * Updates an existing TOML section or adds it if it doesn't exist + * + * @param content Original TOML content + * @param sectionName Section name (e.g., 'ballerina.observe') + * @param values Object with key-value pairs to set in the section + * @returns Updated TOML content + */ +function updateOrAddSection(content: string, sectionName: string, values: Record): string { + const sectionHeader = `[${sectionName}]`; + + // Build the new section content + let sectionLines: string[] = [sectionHeader]; + for (const [key, value] of Object.entries(values)) { + const formattedValue = stringify.value(value); + sectionLines.push(`${key} = ${formattedValue}`); + } + const sectionContent = sectionLines.join('\n'); + + // Check if section exists + const lines = content.split('\n'); + const sectionStartIndex = lines.findIndex(line => line.trim() === sectionHeader); + + if (sectionStartIndex !== -1) { + // Section exists - find where it ends + let sectionEndIndex = lines.length; + for (let i = sectionStartIndex + 1; i < lines.length; i++) { + const trimmedLine = lines[i].trim(); + // Check if this is the start of a new section + if (trimmedLine.startsWith('[') && trimmedLine.endsWith(']')) { + sectionEndIndex = i; + break; + } + } + + // Replace the section + const beforeSection = lines.slice(0, sectionStartIndex); + const afterSection = lines.slice(sectionEndIndex); + + // Combine: before + new section + after + const resultLines: string[] = []; + if (beforeSection.length > 0) { + resultLines.push(...beforeSection); + } + resultLines.push(...sectionLines); + if (afterSection.length > 0) { + resultLines.push(...afterSection); + } + + return resultLines.join('\n'); + } + + // Section doesn't exist - append it + const trimmedLines = lines.filter((line, index) => { + // Remove trailing empty lines + if (index >= lines.length - 1 && line.trim() === '') { + return false; + } + return true; + }); + + // Add the new section + if (trimmedLines.length > 0 && trimmedLines[trimmedLines.length - 1].trim() !== '') { + trimmedLines.push(''); + } + trimmedLines.push(...sectionLines); + + return trimmedLines.join('\n'); +} + +/** + * Removes tracing configuration from Config.toml and Ballerina.toml files + * + * This function will: + * - Read existing Config.toml if it exists + * - Remove tracingEnabled and tracingProvider from [ballerina.observe] section + * (removes the entire section if it becomes empty) + * - Remove the entire [ballerinax.idetraceprovider] section + * - Read existing Ballerina.toml if it exists + * - Remove observabilityIncluded from [build-options] section + * (removes the entire section if it becomes empty) + * - Preserve all other existing configuration + * + * @param workspaceDir The workspace directory where Config.toml and Ballerina.toml should be updated + * @returns Promise Resolves when configuration is successfully written + * @throws Error if file operations fail + */ +export async function removeTracingConfig(workspaceDir: string): Promise { + // Remove from Config.toml + const configFilePath = path.join(workspaceDir, 'Config.toml'); + + // If file doesn't exist, nothing to do + if (!fs.existsSync(configFilePath)) { + return; + } + + // Read existing Config.toml content + let existingContent = ''; + try { + existingContent = fs.readFileSync(configFilePath, 'utf-8'); + } catch (error) { + console.error('Failed to read Config.toml:', error); + throw error; + } + + // Remove the tracing configuration sections + let updatedContent = removeSection(existingContent, 'ballerinax.idetraceprovider'); + + // Remove tracing keys from [ballerina.observe] section + updatedContent = removeKeysFromSection( + updatedContent, + 'ballerina.observe', + ['tracingEnabled', 'tracingProvider'] + ); + + // Clean up trailing newlines but ensure file ends with one + updatedContent = updatedContent.trimEnd(); + if (updatedContent.length > 0 && !updatedContent.endsWith('\n')) { + updatedContent += '\n'; + } + + // Write the updated content to Config.toml + fs.writeFileSync(configFilePath, updatedContent, 'utf-8'); + + // Remove from Ballerina.toml + const ballerinaTomlPath = path.join(workspaceDir, 'Ballerina.toml'); + + // If file doesn't exist, nothing to do + if (!fs.existsSync(ballerinaTomlPath)) { + return; + } + + // Read existing Ballerina.toml content + let ballerinaTomlContent = ''; + try { + ballerinaTomlContent = fs.readFileSync(ballerinaTomlPath, 'utf-8'); + } catch (error) { + console.error('Failed to read Ballerina.toml:', error); + throw error; + } + + // Remove observabilityIncluded from [build-options] section + ballerinaTomlContent = removeKeysFromSection( + ballerinaTomlContent, + 'build-options', + ['observabilityIncluded'] + ); + + // Clean up trailing newlines but ensure file ends with one + ballerinaTomlContent = ballerinaTomlContent.trimEnd(); + if (ballerinaTomlContent.length > 0 && !ballerinaTomlContent.endsWith('\n')) { + ballerinaTomlContent += '\n'; + } + + // Write the updated content to Ballerina.toml + fs.writeFileSync(ballerinaTomlPath, ballerinaTomlContent, 'utf-8'); +} + +/** + * Removes an entire section from TOML content + * + * @param content Original TOML content + * @param sectionName Section name (e.g., 'ballerinax.idetraceprovider') + * @returns Updated TOML content with section removed + */ +function removeSection(content: string, sectionName: string): string { + const sectionHeader = `[${sectionName}]`; + const lines = content.split('\n'); + const sectionStartIndex = lines.findIndex(line => line.trim() === sectionHeader); + + if (sectionStartIndex === -1) { + // Section doesn't exist, return original content + return content; + } + + // Find where the section ends + let sectionEndIndex = lines.length; + for (let i = sectionStartIndex + 1; i < lines.length; i++) { + const trimmedLine = lines[i].trim(); + // Check if this is the start of a new section + if (trimmedLine.startsWith('[') && trimmedLine.endsWith(']')) { + sectionEndIndex = i; + break; + } + } + + // Remove the section + const beforeSection = lines.slice(0, sectionStartIndex); + const afterSection = lines.slice(sectionEndIndex); + + // Combine before and after, removing extra empty lines + const resultLines: string[] = []; + + if (beforeSection.length > 0) { + resultLines.push(...beforeSection); + } + + if (afterSection.length > 0) { + // Remove trailing empty line from before section if present + if (resultLines.length > 0 && resultLines[resultLines.length - 1].trim() === '') { + resultLines.pop(); + } + // Remove leading empty line from after section if present + let afterStart = 0; + if (afterSection[0]?.trim() === '') { + afterStart = 1; + } + resultLines.push(...afterSection.slice(afterStart)); + } + + return resultLines.join('\n'); +} + +/** + * Removes specific keys from a TOML section + * If the section becomes empty after removing keys, removes the entire section + * + * @param content Original TOML content + * @param sectionName Section name (e.g., 'ballerina.observe') + * @param keysToRemove Array of keys to remove from the section + * @returns Updated TOML content with keys removed + */ +function removeKeysFromSection(content: string, sectionName: string, keysToRemove: string[]): string { + const sectionHeader = `[${sectionName}]`; + const lines = content.split('\n'); + const sectionStartIndex = lines.findIndex(line => line.trim() === sectionHeader); + + if (sectionStartIndex === -1) { + // Section doesn't exist, return original content + return content; + } + + // Find where the section ends + let sectionEndIndex = lines.length; + for (let i = sectionStartIndex + 1; i < lines.length; i++) { + const trimmedLine = lines[i].trim(); + // Check if this is the start of a new section + if (trimmedLine.startsWith('[') && trimmedLine.endsWith(']')) { + sectionEndIndex = i; + break; + } + } + + // Extract section lines + const sectionLines = lines.slice(sectionStartIndex, sectionEndIndex); + + // Remove keys from section + const remainingLines = sectionLines.filter(line => { + const trimmedLine = line.trim(); + // Keep the section header + if (trimmedLine === sectionHeader) { + return true; + } + // Check if this line contains a key we want to remove + for (const key of keysToRemove) { + // Match key = value (with or without quotes, with or without spaces) + const keyPattern = new RegExp(`^\\s*${key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*=`); + if (keyPattern.test(trimmedLine)) { + return false; // Remove this line + } + } + // Keep all other lines + return true; + }); + + // Check if section is empty (only header remains) + const hasContent = remainingLines.some((line, index) => { + // Skip the header line + return index > 0 && line.trim() !== ''; + }); + + // If section is empty, remove the entire section + if (!hasContent) { + return removeSection(content, sectionName); + } + + // Rebuild content with remaining section lines + const beforeSection = lines.slice(0, sectionStartIndex); + const afterSection = lines.slice(sectionEndIndex); + + const resultLines: string[] = []; + if (beforeSection.length > 0) { + resultLines.push(...beforeSection); + } + resultLines.push(...remainingLines); + if (afterSection.length > 0) { + resultLines.push(...afterSection); + } + + return resultLines.join('\n'); +} + diff --git a/workspaces/ballerina/ballerina-extension/src/features/tracing/webview.ts b/workspaces/ballerina/ballerina-extension/src/features/tracing/webview.ts new file mode 100644 index 00000000000..a20b1c91ea7 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/features/tracing/webview.ts @@ -0,0 +1,298 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import * as path from 'path'; +import { Uri, ViewColumn } from 'vscode'; +import { extension } from '../../BalExtensionContext'; + +export class TraceWindowWebview { + public static currentPanel: TraceWindowWebview | undefined; + public static readonly viewType = 'ballerina.trace-window'; + private _panel: vscode.WebviewPanel | undefined; + private _disposables: vscode.Disposable[] = []; + private _logEntries: LogEntry[] = []; + + constructor() { + this._panel = TraceWindowWebview.createWebview(); + this._panel.onDidDispose(() => this.dispose(), null, this._disposables); + this._panel.webview.html = this.getWebviewContent(this._panel.webview); + + // Handle messages from webview + this._panel.webview.onDidReceiveMessage( + message => { + switch (message.command) { + case 'clear': + this._logEntries = []; + this.updateWebview(); + break; + case 'export': + this.exportLogs(); + break; + } + }, + null, + this._disposables + ); + } + + private static createWebview(): vscode.WebviewPanel { + const panel = vscode.window.createWebviewPanel( + TraceWindowWebview.viewType, + "Ballerina Trace Window", + ViewColumn.Beside, + { + enableScripts: true, + localResourceRoots: [Uri.file(path.join(extension.context.extensionPath, 'resources'))], + retainContextWhenHidden: true, + } + ); + panel.iconPath = { + light: Uri.file(path.join(extension.context.extensionPath, 'resources', 'images', 'icons', 'ballerina.svg')), + dark: Uri.file(path.join(extension.context.extensionPath, 'resources', 'images', 'icons', 'ballerina-inverse.svg')) + }; + return panel; + } + + public getWebview(): vscode.WebviewPanel | undefined { + return this._panel; + } + + public addLogEntry(message: string, category: 'stderr' | 'stdout' | 'stdlog') { + const entry: LogEntry = { + timestamp: new Date().toISOString(), + message: message, + category: category, + level: category === 'stderr' ? 'error' : 'info' + }; + this._logEntries.push(entry); + this.updateWebview(); + } + + private updateWebview() { + if (this._panel) { + this._panel.webview.postMessage({ + command: 'updateLogs', + logs: this._logEntries + }); + } + } + + private async exportLogs() { + try { + const logsContent = this._logEntries + .map(entry => `[${entry.timestamp}] [${entry.level}] ${entry.message}`) + .join('\n'); + + if (logsContent.trim()) { + const doc = await vscode.workspace.openTextDocument({ + content: logsContent, + language: 'plaintext' + }); + await vscode.window.showTextDocument(doc); + } + } catch (error) { + vscode.window.showErrorMessage('Failed to export logs: ' + error); + } + } + + private getWebviewContent(webView: vscode.Webview): string { + const logsHtml = this._logEntries.map((log, index) => + `
+ ${log.timestamp} + [${log.level}] + ${this.escapeHtml(log.message)} +
` + ).join(''); + + return ` + + + + + Ballerina Trace Window + + + +
+

Ballerina Trace Logs

+
+ + +
+
+
+ ${this._logEntries.length === 0 ? '
No trace logs yet. Start debugging or running your Ballerina program to see logs here.
' : logsHtml} +
+ + +`; + } + + private escapeHtml(text: string): string { + const map: { [key: string]: string } = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + return text.replace(/[&<>"']/g, m => map[m]); + } + + public dispose() { + TraceWindowWebview.currentPanel = undefined; + this._panel?.dispose(); + + while (this._disposables.length) { + const disposable = this._disposables.pop(); + if (disposable) { + disposable.dispose(); + } + } + + this._panel = undefined; + } +} + +interface LogEntry { + timestamp: string; + message: string; + category: 'stderr' | 'stdout' | 'stdlog'; + level: 'error' | 'info' | 'success'; +} + diff --git a/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts b/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts index 36106b1ab85..0f740e5a862 100644 --- a/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/features/tryit/activator.ts @@ -25,9 +25,12 @@ import { BallerinaExtension } from "src/core"; import Handlebars from "handlebars"; import { clientManager, findRunningBallerinaProcesses, handleError, HTTPYAC_CONFIG_TEMPLATE, TRYIT_TEMPLATE, waitForBallerinaService } from "./utils"; import { BIDesignModelResponse, OpenAPISpec } from "@wso2/ballerina-core"; +import { getProjectWorkingDirectory } from "../../utils/file-utils"; import { startDebugging } from "../editor-support/activator"; import { v4 as uuidv4 } from "uuid"; import { createGraphqlView } from "../../views/graphql"; +import { StateMachine } from "../../stateMachine"; +import { getCurrentProjectRoot } from "../../utils/project-utils"; // File constants const FILE_NAMES = { @@ -65,16 +68,25 @@ async function openTryItView(withNotice: boolean = false, resourceMetadata?: Res throw new Error('Ballerina Language Server is not connected'); } - const workspaceRoot = vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders[0].uri.fsPath; - if (!workspaceRoot) { + const currentProjectRoot = await getCurrentProjectRoot(); + if (!currentProjectRoot) { throw new Error('Please open a workspace first'); } - let services: ServiceInfo[] | null = await getAvailableServices(workspaceRoot); + // If currentProjectRoot is a file (single file project), use its directory + // Otherwise, use the current project root + let projectPath: string; + try { + projectPath = getProjectWorkingDirectory(currentProjectRoot); + } catch (error) { + throw new Error(`Failed to determine working directory`); + } + + let services: ServiceInfo[] | null = await getAvailableServices(projectPath); // if the getDesignModel() LS API is unavailable, create a ServiceInfo from ServiceMetadata to support Try It functionality. (a fallback logic for Ballerina versions prior to 2201.12.x) if (services == null && serviceMetadata && filePath) { - const service = createServiceInfoFromMetadata(serviceMetadata, workspaceRoot, filePath); + const service = createServiceInfoFromMetadata(serviceMetadata, projectPath, filePath); services = [service]; } @@ -94,7 +106,7 @@ async function openTryItView(withNotice: boolean = false, resourceMetadata?: Res return; } } else { - const processesRunning = await checkBallerinaProcessRunning(workspaceRoot); + const processesRunning = await checkBallerinaProcessRunning(projectPath); if (!processesRunning) { return; } @@ -146,26 +158,33 @@ async function openTryItView(withNotice: boolean = false, resourceMetadata?: Res return; } - const targetDir = path.join(workspaceRoot, 'target'); + const targetDir = path.join(projectPath, 'target'); if (!fs.existsSync(targetDir)) { fs.mkdirSync(targetDir); } if (selectedService.type === ServiceType.HTTP) { const openapiSpec: OAISpec = await getOpenAPIDefinition(selectedService); - const selectedPort: number = await getServicePort(workspaceRoot, selectedService, openapiSpec); + const selectedPort: number = await getServicePort(projectPath, selectedService, openapiSpec); selectedService.port = selectedPort; const tryitFileUri = await generateTryItFileContent(targetDir, openapiSpec, selectedService, resourceMetadata); await openInSplitView(tryitFileUri, 'http'); } else if (selectedService.type === ServiceType.GRAPHQL) { - const selectedPort: number = await getServicePort(workspaceRoot, selectedService); + const selectedPort: number = await getServicePort(projectPath, selectedService); const port = selectedPort; const path = selectedService.basePath; const service = `http://localhost:${port}${path}`; await createGraphqlView(service); + } else if (selectedService.type === ServiceType.MCP) { + const selectedPort: number = await getServicePort(projectPath, selectedService); + selectedService.port = selectedPort; + const path = selectedService.basePath; + const serviceUrl = `http://localhost:${selectedPort}${path}`; + + await openMcpInspector(serviceUrl); } else { - const selectedPort: number = await getServicePort(workspaceRoot, selectedService); + const selectedPort: number = await getServicePort(projectPath, selectedService); selectedService.port = selectedPort; await openChatView(selectedService.basePath, selectedPort.toString()); @@ -218,6 +237,33 @@ async function openChatView(basePath: string, port: string) { } } +async function openMcpInspector(serverUrl: string) { + const extensionId = 'wso2.mcp-server-inspector'; + + const extension = vscode.extensions.getExtension(extensionId); + + if (extension) { + try { + await vscode.commands.executeCommand('mcpInspector.openInspectorWithUrl', { + serverUrl: serverUrl, + transport: "streamable-http" + }); + } catch (error) { + vscode.window.showErrorMessage(`Failed to open MCP Inspector: ${error}`); + } + } else { + const choice = await vscode.window.showInformationMessage( + 'MCP Inspector extension is required. Would you like to install it?', + 'Install', + 'Cancel' + ); + + if (choice === 'Install') { + vscode.commands.executeCommand('workbench.extensions.search', extensionId); + } + } +} + async function findServiceForResource(services: ServiceInfo[], resourceMetadata: ResourceMetadata, serviceMetadata: ServiceMetadata): Promise { try { // Normalize path values for comparison @@ -257,7 +303,8 @@ async function findServiceForResource(services: ServiceInfo[], resourceMetadata: async function getAvailableServices(projectDir: string): Promise { try { - const langClient = clientManager.getClient(); + // const langClient = clientManager.getClient(); + const langClient = StateMachine.langClient(); const response: BIDesignModelResponse = await langClient.getDesignModel({ projectPath: projectDir @@ -268,12 +315,24 @@ async function getAvailableServices(projectDir: string): Promise { const lowerType = type.toLowerCase(); - return lowerType.includes('http') || lowerType.includes('ai') || lowerType.includes('graphql'); + return lowerType.includes('http') || lowerType.includes('ai') || lowerType.includes('graphql') || lowerType.includes('mcp'); }) .map(({ displayName, absolutePath, location, attachedListeners, type }) => { const trimmedPath = absolutePath.trim(); const name = displayName || (trimmedPath.startsWith('/') ? trimmedPath.substring(1) : trimmedPath); - const serviceType = type.toLowerCase().includes('http') ? ServiceType.HTTP : type.toLowerCase().includes('graphql') ? ServiceType.GRAPHQL : ServiceType.AGENT; + + let serviceType: ServiceType; + const lowerType = type.toLowerCase(); + if (lowerType.includes('http')) { + serviceType = ServiceType.HTTP; + } else if (lowerType.includes('graphql')) { + serviceType = ServiceType.GRAPHQL; + } else if (lowerType.includes('mcp')) { + serviceType = ServiceType.MCP; + } else { + serviceType = ServiceType.AGENT; + } + const listener = { name: attachedListeners .map(listenerId => response.designModel.listeners.find(l => l.uuid === listenerId)?.symbol) @@ -413,9 +472,11 @@ async function getOpenAPIDefinition(service: ServiceInfo): Promise { if (openapiDefinitions === 'NOT_SUPPORTED_TYPE') { throw new Error(`OpenAPI spec generation failed for the service with base path: '${service.basePath}'`); + } else if (openapiDefinitions.error) { + throw new Error(openapiDefinitions.error); } - const matchingDefinition = (openapiDefinitions as OpenAPISpec).content.filter(content => + const matchingDefinition = (openapiDefinitions as OpenAPISpec).content?.filter(content => content.serviceName.toLowerCase() === service?.name.toLowerCase() || (service.basePath !== "" && service?.name === '' && content.spec?.servers[0]?.url?.endsWith(service.basePath)) || (service?.name === '' && content.spec?.servers[0]?.url == undefined) // TODO: Update the condition after fixing the issue in the OpenAPI tool @@ -915,7 +976,8 @@ function disposeErrorWatcher() { enum ServiceType { HTTP = 'HTTP', AGENT = 'AI Agent', - GRAPHQL = 'GraphQL' + GRAPHQL = 'GraphQL', + MCP = 'MCP' } interface ServiceInfo { diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts index a6b2b3bc837..b2fd21add3b 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-handler.ts @@ -14,12 +14,16 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. + * + * THIS FILE INCLUDES AUTO GENERATED CODE */ - import { - ChatReqMessage, abortChatRequest, + ChatReqMessage, getChatMessage, + getTracingStatus, + showTraceView, + TraceInput } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { AgentChatRpcManager } from "./rpc-manager"; @@ -28,4 +32,6 @@ export function registerAgentChatRpcHandlers(messenger: Messenger) { const rpcManger = new AgentChatRpcManager(); messenger.onRequest(getChatMessage, (args: ChatReqMessage) => rpcManger.getChatMessage(args)); messenger.onNotification(abortChatRequest, () => rpcManger.abortChatRequest()); + messenger.onRequest(getTracingStatus, () => rpcManger.getTracingStatus()); + messenger.onNotification(showTraceView, (args: TraceInput) => rpcManger.showTraceView(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts index 24f8e27c565..635f82f4b3c 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/agent-chat/rpc-manager.ts @@ -20,8 +20,14 @@ import { AgentChatAPI, ChatReqMessage, ChatRespMessage, + TraceInput, + TraceStatus } from "@wso2/ballerina-core"; +import * as vscode from 'vscode'; import { extension } from '../../BalExtensionContext'; +import { TracerMachine, TraceServer } from "../../features/tracing"; +import { TraceDetailsWebview } from "../../features/tracing/trace-details-webview"; +import { Trace } from "../../features/tracing/trace-server"; export class AgentChatRpcManager implements AgentChatAPI { private currentAbortController: AbortController | null = null; @@ -122,4 +128,108 @@ export class AgentChatRpcManager implements AgentChatAPI { throw new Error(errorMessage); } } + + async getTracingStatus(): Promise { + return new Promise(async (resolve) => { + const isEnabled = TracerMachine.isEnabled(); + resolve({ + enabled: isEnabled + }); + }); + } + + + /** + * Find the trace that corresponds to a chat message by matching span attributes + * @param userMessage The user's input message + * @returns The matching trace or undefined if not found + */ + findTraceForMessage(userMessage: string): Trace | undefined { + // Get all traces from the TraceServer + const traces = TraceServer.getTraces(); + + // Helper function to extract string value from attribute value + const extractValue = (value: any): string => { + if (typeof value === 'string') { + return value; + } + if (value && typeof value === 'object' && 'stringValue' in value) { + return String(value.stringValue); + } + return ''; + }; + + // Iterate through each trace to find matching spans + for (const trace of traces) { + // Check each span in the trace + for (const span of trace.spans || []) { + // Check if this span matches our criteria: + // 1. span.type === "ai" + // 2. gen_ai.operation.name === "invoke_agent" + // 3. gen_ai.input.messages matches the user message + + const attributes = span.attributes || []; + + // Find relevant attributes + let spanType: string | undefined; + let operationName: string | undefined; + let inputMessages: string | undefined; + + for (const attr of attributes) { + const attrValue = extractValue(attr.value); + + if (attr.key === 'span.type') { + spanType = attrValue; + } else if (attr.key === 'gen_ai.operation.name') { + operationName = attrValue; + } else if (attr.key === 'gen_ai.input.messages') { + inputMessages = attrValue; + } + } + + // Check if all criteria match + if (spanType === 'ai' && + operationName === 'invoke_agent' && + inputMessages) { + // Check if the input message matches + // inputMessages might be JSON or contain the message + if (inputMessages.includes(userMessage)) { + return trace; + } + } + } + } + + return undefined; + } + + /** + * Show trace details webview for a given chat message + * Finds the trace matching the message and opens it in the trace details webview + * @param userMessage The user's input message + * @throws Error if no trace is found for the message + */ + async showTraceDetailsForMessage(userMessage: string): Promise { + try { + // Find the trace that matches the user message + const trace = this.findTraceForMessage(userMessage); + + if (!trace) { + const errorMessage = 'No trace found for the given message. Make sure tracing is enabled and the agent has processed this message.'; + vscode.window.showErrorMessage(errorMessage); + throw new Error(errorMessage); + } + + // Open the trace details webview with isAgentChat=true + TraceDetailsWebview.show(trace, true); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : 'Failed to show trace details'; + vscode.window.showErrorMessage(`Error: ${errorMessage}`); + throw error; + } + } + + async showTraceView(params: TraceInput): Promise { + await this.showTraceDetailsForMessage(params.message); + } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts index f858b7ac5b8..0ca219219f4 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-agent/rpc-manager.ts @@ -150,8 +150,8 @@ export class AiAgentRpcManager implements AIAgentAPI { const context = StateMachine.context(); try { - const projectUri = context.projectUri; - const filePath = Utils.joinPath(URI.file(projectUri), "agents.bal").fsPath; + const projectPath = context.projectPath; + const filePath = Utils.joinPath(URI.file(projectPath), "agents.bal").fsPath; let selectedModel = ""; // Create the tools first if (params.newTools.length > 0) { @@ -161,7 +161,7 @@ export class AiAgentRpcManager implements AIAgentAPI { } // Create the model Second - const aiModuleOrg = await StateMachine.langClient().getAiModuleOrg({ projectPath: projectUri }); + const aiModuleOrg = await StateMachine.langClient().getAiModuleOrg({ projectPath: projectPath }); const allAgents = (await StateMachine.langClient().getAllAgents({ filePath, orgName: aiModuleOrg.orgName })); console.log("All Agents: ", allAgents); @@ -230,8 +230,8 @@ export class AiAgentRpcManager implements AIAgentAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectUri = context.projectUri; - const filePath = Utils.joinPath(URI.file(projectUri), "agents.bal").fsPath; + const projectPath = context.projectPath; + const filePath = Utils.joinPath(URI.file(projectPath), "agents.bal").fsPath; // Create the tools if there are any if (params.newTools.length > 0) { for (const tool of params.newTools) { @@ -269,14 +269,14 @@ export class AiAgentRpcManager implements AIAgentAPI { async createTool(tool: AgentTool): Promise { try { - const projectUri = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; const toolName = tool.toolName; const connectionName = tool.connectionName; - const toolsPath = Utils.joinPath(URI.file(projectUri), "agents.bal").fsPath; + const toolsPath = Utils.joinPath(URI.file(projectPath), "agents.bal").fsPath; let flowNode: FlowNode; // REMOTE_ACTION_CALL| FUNCTION_DEFINITION if (tool.toolType === "Connector") { - const filePath = Utils.joinPath(URI.file(projectUri), "connections.bal").fsPath; + const filePath = Utils.joinPath(URI.file(projectPath), "connections.bal").fsPath; const connectorFlowNode = tool.connectorFlowNode; const connectorActionCodeData = tool.connectorActionCodeData; @@ -301,7 +301,7 @@ export class AiAgentRpcManager implements AIAgentAPI { this.updateFlowNodeProperties(flowNode); } if (tool.toolType === "Function") { - const filePath = Utils.joinPath(URI.file(projectUri), "functions.bal").fsPath; + const filePath = Utils.joinPath(URI.file(projectPath), "functions.bal").fsPath; if (tool.functionState === 1) { // 1 = Create the function first // Get new function flow node @@ -328,7 +328,7 @@ export class AiAgentRpcManager implements AIAgentAPI { .getFunctionNode({ functionName: tool.functionName, fileName: "functions.bal", - projectPath: projectUri + projectPath }); flowNode = existingFunctionFlowNode.functionDefinition as FlowNode; } @@ -351,14 +351,14 @@ export class AiAgentRpcManager implements AIAgentAPI { async createAgentTool(tool: AgentToolRequest): Promise { try { - const projectUri = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; const toolName = tool.toolName; - const toolsPath = Utils.joinPath(URI.file(projectUri), "agents.bal").fsPath; + const toolsPath = Utils.joinPath(URI.file(projectPath), "agents.bal").fsPath; let flowNode: FlowNode; // REMOTE_ACTION_CALL| FUNCTION_DEFINITION const selectedCodeData = tool.selectedCodeData; if (selectedCodeData.node === "REMOTE_ACTION_CALL") { - const filePath = Utils.joinPath(URI.file(projectUri), "connections.bal").fsPath; + const filePath = Utils.joinPath(URI.file(projectPath), "connections.bal").fsPath; // Get the flowNode for connector action const connectorActionFlowNode = await StateMachine.langClient() .getNodeTemplate({ @@ -370,7 +370,7 @@ export class AiAgentRpcManager implements AIAgentAPI { this.updateFlowNodeProperties(flowNode); } if (selectedCodeData.node === "FUNCTION_CALL") { - const filePath = Utils.joinPath(URI.file(projectUri), "functions.bal").fsPath; + const filePath = Utils.joinPath(URI.file(projectPath), "functions.bal").fsPath; // Get the flowNode for existing function action const existingFunctionFlowNode = await StateMachine.langClient() .getNodeTemplate({ @@ -410,88 +410,28 @@ export class AiAgentRpcManager implements AIAgentAPI { } async updateMCPToolKit(params: McpToolUpdateRequest): Promise { - const projectUri = StateMachine.context().projectUri; - const filePath = Utils.joinPath(URI.file(projectUri), "agents.bal").fsPath; - - // Generate the variable name from the server name - const variableName = params.updatedNode.properties["variable"].value; + const projectPath = StateMachine.context().projectPath; + const agentsFilePath = Utils.joinPath(URI.file(projectPath), params.agentFlowNode.codedata.lineRange.fileName).fsPath; + const connectionsFilePath = Utils.joinPath(URI.file(projectPath), "connections.bal").fsPath; + const mcpToolKitVarName = params.updatedNode.properties["variable"].value; // 1. Use the updatedNode from params for the MCP ToolKit edits let mcpEdits: { [filePath: string]: any[] } = {}; if (params.updatedNode) { - // Get the template node - const nodeTemplate = await StateMachine.langClient().getNodeTemplate({ - position: params.agentFlowNode.codedata.lineRange.endLine, - filePath: filePath, - id: { - node: "CLASS_INIT", - org: "ballerinax", - module: "ai", - packageName: "ai", - version: "1.2.1", - symbol: "init", - object: "McpToolKit" - } - }); - - // Map all properties from updatedNode to nodeTemplate.flowNode - for (const key in params.updatedNode.properties) { - if (key === "type") { - continue; - } - if (nodeTemplate.flowNode.properties.hasOwnProperty(key)) { - nodeTemplate.flowNode.properties[key].value = params.updatedNode.properties[key].value; - } - } if (params.selectedTools.length === 0) { - (nodeTemplate.flowNode.properties["permittedTools"] as { value: any }).value = `()`; + params.updatedNode.properties["permittedTools"].value = `()`; } else { - if ("permittedTools" in nodeTemplate.flowNode.properties) { - (nodeTemplate.flowNode.properties["permittedTools"] as { value: any }).value = params.selectedTools.map(tool => `"${tool}"`); + if ("permittedTools" in params.updatedNode.properties) { + params.updatedNode.properties["permittedTools"].value = `[${params.selectedTools.map(tool => `"${tool}"`).join(", ")}]`; } } - // Pass codedata if present - if (params.codedata) { - nodeTemplate.flowNode.codedata.lineRange = params.codedata.lineRange; - } + // Use only the template node for generating text edits const mcpToolKitEdits = await StateMachine.langClient().getSourceCode({ - filePath: filePath, - flowNode: nodeTemplate.flowNode, + filePath: connectionsFilePath, + flowNode: params.updatedNode, }); mcpEdits = mcpToolKitEdits.textEdits; - - - for (const key in mcpToolKitEdits.textEdits) { - const filtered = mcpToolKitEdits.textEdits[key] - .filter(edit => !edit.newText.includes("import")) - .map(edit => ({ - ...edit - })); - - if (filtered.length > 0) { - mcpEdits[key] = filtered; - } - } - // Update the range fields using params.codedata.lineRange - if (params.codedata && params.codedata.lineRange) { - const { startLine, endLine } = params.codedata.lineRange; - for (const file in mcpEdits) { - mcpEdits[file] = mcpEdits[file].map(edit => ({ - ...edit, - range: { - start: { - line: startLine.line, - character: startLine.offset, - }, - end: { - line: endLine.line, - character: endLine.offset, - }, - } - })); - } - } } // 2. Update the agent's tools array to include the variable name (following updateAIAgentTools pattern) @@ -499,17 +439,17 @@ export class AiAgentRpcManager implements AIAgentAPI { let toolsValue = agentFlowNode.properties["tools"].value; // Parse existing tools and add the variable name - if (typeof toolsValue === "string" && typeof variableName === "string") { + if (typeof toolsValue === "string" && typeof mcpToolKitVarName === "string") { const toolsArray = this.parseToolsString(toolsValue); if (toolsArray.length > 0) { // Add the variable name if not exists - if (!toolsArray.includes(variableName)) { - toolsArray.push(variableName); + if (!toolsArray.includes(mcpToolKitVarName)) { + toolsArray.push(mcpToolKitVarName); } // Update the tools value toolsValue = `[${toolsArray.join(", ")}]`; } else { - toolsValue = `[${variableName}]`; + toolsValue = `[${mcpToolKitVarName}]`; } } @@ -518,14 +458,14 @@ export class AiAgentRpcManager implements AIAgentAPI { // Generate source code for the updated agent const agentEdits = await StateMachine.langClient().getSourceCode({ - filePath: filePath, + filePath: agentsFilePath, flowNode: agentFlowNode }); // 3. Apply both edits - await updateSourceCode({ textEdits: mcpEdits }); await updateSourceCode({ textEdits: agentEdits.textEdits }); + await updateSourceCode({ textEdits: mcpEdits }); } private parseToolsString(toolsStr: string): string[] { diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/constants.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/constants.ts index 49c88fd0343..534951410d7 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/constants.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/constants.ts @@ -24,98 +24,3 @@ export const REQ_KEY = "user_requirements_file"; export const DEVELOPMENT_KEY = "developer_intention_file"; export const DEVELOPMENT_DOCUMENT = "developer.md"; export const TEST_DIR_NAME = "tests"; - -// Datamapper Constants -// Primitive data types supported by the datamapper -export enum PrimitiveType { - STRING = "string", - INT = "int", - FLOAT = "float", - DECIMAL = "decimal", - BOOLEAN = "boolean" -} - -export const NUMERIC_AND_BOOLEAN_TYPES = [ - PrimitiveType.INT, - PrimitiveType.FLOAT, - PrimitiveType.DECIMAL, - PrimitiveType.BOOLEAN -]; - -// Operations that can be performed during data mapping -export enum Operation { - DIRECT = "DIRECT", - LENGTH = "LENGTH", - SPLIT = "SPLIT", - ADDITION = "ADDITION", - SUBTRACTION = "SUBTRACTION", - MULTIPLICATION = "MULTIPLICATION", - DIVISION = "DIVISION", - MODULAR = "MODULAR", - EQUAL = "EQUAL", - NOTEQUAL = "NOTEQUAL", - LESS_THAN = "LESS_THAN", - LESS_THAN_OR_EQUAL = "LESS_THAN_OR_EQUAL", - AND = "AND", - OR = "OR", - REPLACE_ALL = "REPLACE_ALL", - AVERAGE = "AVERAGE", - MAXIMUM = "MAXIMUM", - MINIMUM = "MINIMUM", - SUMMATION = "SUMMATION", - ABSOLUTE = "ABSOLUTE" -} - -// Array types specifically for record data structures -export enum ArrayRecordType { - RECORD_ARRAY = "record[]", - RECORD_ARRAY_NULLABLE = "record[]|()", - READONLY_RECORD_ARRAY = "(readonly&record)[]", - READONLY_RECORD_ARRAY_NULLABLE = "(readonly&record)[]|()", - RECORD_OR_NULL_ARRAY = "(record|())[]", - RECORD_OR_NULL_ARRAY_NULLABLE = "(record|())[]|()", - READONLY_RECORD_OR_NULL_ARRAY = "(readonly&record|())[]", - READONLY_RECORD_OR_NULL_ARRAY_NULLABLE = "(readonly&record|())[]|()" -} - -// Array types for enum, union, and intersection data structures -export enum ArrayEnumUnionType { - ENUM_ARRAY = "enum[]", - UNION_ARRAY = "union[]", - INTERSECTION_ARRAY = "intersection[]", - ENUM_ARRAY_NULLABLE = "enum[]|()", - UNION_ARRAY_NULLABLE = "union[]|()", - INTERSECTION_ARRAY_NULLABLE = "intersection[]|()" -} - -export enum RecordType { - RECORD = "record", - RECORD_NULLABLE = "record|()", - READONLY_RECORD = "readonly&record", - READONLY_RECORD_NULLABLE = "readonly&record|()", - RECORD_ARRAY = "record[]", - RECORD_ARRAY_NULLABLE = "record[]|()", - READONLY_RECORD_ARRAY = "(readonly&record)[]", - READONLY_RECORD_ARRAY_NULLABLE = "(readonly&record)[]|()", - RECORD_OR_NULL_ARRAY = "(record|())[]", - RECORD_OR_NULL_ARRAY_NULLABLE = "(record|())[]|()", - READONLY_RECORD_OR_NULL_ARRAY = "(readonly&record|())[]", - READONLY_RECORD_OR_NULL_ARRAY_NULLABLE = "(readonly&record|())[]|()" -} - -export enum UnionEnumIntersectionType { - ENUM = "enum", - UNION = "union", - INTERSECTION = "intersection", - ENUM_ARRAY = "enum[]", - ENUM_ARRAY_NULLABLE = "enum[]|()", - UNION_ARRAY = "union[]", - UNION_ARRAY_NULLABLE = "union[]|()", - INTERSECTION_ARRAY = "intersection[]", - INTERSECTION_ARRAY_NULLABLE = "intersection[]|()" -} - -export enum MetadataType { - INPUT_METADATA = "inputMetadata", - OUTPUT_METADATA = "outputMetadata" -} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts index b34f95b5f01..b9d3bfbf54b 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/repair-utils.ts @@ -62,7 +62,7 @@ export async function checkProjectDiagnostics(langClient: ExtendedLangClient, te export async function isModuleNotFoundDiagsExist(diagnosticsResult: Diagnostics[], langClient): Promise { // Create a Map to store unique diagnostic messages and their corresponding diagnostic information const uniqueDiagnosticMap = new Map(); - + // First pass: collect unique diagnostic messages across all files for (const diagResult of diagnosticsResult) { for (const diag of diagResult.diagnostics) { @@ -74,12 +74,12 @@ export async function isModuleNotFoundDiagsExist(diagnosticsResult: Diagnostics[ } } } - + // If no BCE2003 diagnostics found, return false if (uniqueDiagnosticMap.size === 0) { return false; } - + // Process each unique diagnostic only once let projectModified = false; for (const [_, { uri }] of uniqueDiagnosticMap.entries()) { @@ -88,7 +88,7 @@ export async function isModuleNotFoundDiagsExist(diagnosticsResult: Diagnostics[ uri: uri } }); - + const response = dependenciesResponse as SyntaxTree; if (response.parseSuccess) { // Read and save content to a string @@ -109,7 +109,7 @@ export async function isModuleNotFoundDiagsExist(diagnosticsResult: Diagnostics[ throw Error("Module resolving failed"); } } - + return projectModified; } @@ -185,35 +185,230 @@ export async function removeUnusedImports(diagnosticsResult: Diagnostics[], lang for (const diag of diagnosticsResult) { const fielUri = diag.uri; const diagnostics = diag.diagnostics; - // Filter the unused import diagnostics - const diagnostic = diagnostics.find(d => d.code === "BCE2002"); - if (!diagnostic) { continue; } - const codeActions = await langClient.codeAction({ - textDocument: { uri: fielUri }, - range: { - start: diagnostic.range.start, - end: diagnostic.range.end - }, - context: { diagnostics: [diagnostic] } - }); + // Filter the unused import diagnostics + const diagnostic = diagnostics.find(d => d.code === "BCE2002"); + if (!diagnostic) { continue; } + const codeActions = await langClient.codeAction({ + textDocument: { uri: fielUri }, + range: { + start: diagnostic.range.start, + end: diagnostic.range.end + }, + context: { diagnostics: [diagnostic] } + }); - // Find and apply the appropriate code action - const action = codeActions.find(action => action.title === "Remove all unused imports"); - if (!action?.edit?.documentChanges?.length) { continue; } - const docEdit = action.edit.documentChanges[0] as TextDocumentEdit; + // Find and apply the appropriate code action + const action = codeActions.find(action => action.title === "Remove all unused imports"); + if (!action?.edit?.documentChanges?.length) { continue; } + const docEdit = action.edit.documentChanges[0] as TextDocumentEdit; - // Apply modifications to syntax tree - const syntaxTree = await langClient.stModify({ - documentIdentifier: { uri: docEdit.textDocument.uri }, - astModifications: docEdit.edits.map(edit => ({ + // Apply modifications to syntax tree + const syntaxTree = await langClient.stModify({ + documentIdentifier: { uri: docEdit.textDocument.uri }, + astModifications: docEdit.edits.map(edit => ({ + startLine: edit.range.start.line, + startColumn: edit.range.start.character, + endLine: edit.range.end.line, + endColumn: edit.range.end.character, + type: "INSERT", + isImport: true, + config: { STATEMENT: edit.newText } + })) + }); + + // Update file content + const { source } = syntaxTree as SyntaxTree; + if (!source) { + // Handle the case where source is undefined, when compiler issue occurs + return false; + } + const absolutePath = fileURLToPath(fielUri); + writeBallerinaFileDidOpenTemp(absolutePath, source); + projectModified = true; + } + return projectModified; +} + +export async function addMissingRequiredFields( + diagnosticsResult: Diagnostics[], + langClient: ExtendedLangClient +): Promise { + let projectModified = false; + + for (const diag of diagnosticsResult) { + const fileUri = diag.uri; + const diagnostics = diag.diagnostics; + + // Filter BCE2520 diagnostics (missing required record fields) + const bce2520Diagnostics = diagnostics.filter(d => d.code === "BCE2520"); + if (!bce2520Diagnostics.length) { + continue; + } + + // Group diagnostics by their range (same location = same record literal) + const diagnosticsByRange = new Map(); + + for (const d of bce2520Diagnostics) { + const rangeKey = `${d.range.start.line}:${d.range.start.character}-${d.range.end.line}:${d.range.end.character}`; + if (!diagnosticsByRange.has(rangeKey)) { + diagnosticsByRange.set(rangeKey, []); + } + diagnosticsByRange.get(rangeKey)!.push(d); + } + + const astModifications: STModification[] = []; + + // Process each group of diagnostics (one group per record literal) + for (const [rangeKey, groupedDiagnostics] of diagnosticsByRange) { + try { + // Use the first diagnostic's range, but pass ALL diagnostics in the group + const firstDiag = groupedDiagnostics[0]; + + // Get code actions with ALL diagnostics for this location + const codeActions = await langClient.codeAction({ + textDocument: { uri: fileUri }, + range: { + start: firstDiag.range.start, + end: firstDiag.range.end + }, + context: { + diagnostics: groupedDiagnostics, + only: ['quickfix'], + triggerKind: 1 + } + }); + + if (!codeActions?.length) { + console.warn(`No code actions returned for ${fileUri} at ${rangeKey}`); + continue; + } + + // Find the action that fills required fields + const action = codeActions.find( + action => action.title && action.title.includes("required fields") + ); + + if (!action?.edit?.documentChanges?.length) { + continue; + } + + const docEdit = action.edit.documentChanges[0] as TextDocumentEdit; + const edit = docEdit.edits[0]; + + astModifications.push({ startLine: edit.range.start.line, startColumn: edit.range.start.character, endLine: edit.range.end.line, endColumn: edit.range.end.character, type: "INSERT", - isImport: true, + isImport: false, config: { STATEMENT: edit.newText } - })) + }); + } catch (err) { + console.warn(`Could not apply code action for ${fileUri} at ${rangeKey}:`, err); + } + } + + // Apply modifications to syntax tree + if (astModifications.length > 0) { + const syntaxTree = await langClient.stModify({ + documentIdentifier: { uri: fileUri }, + astModifications: astModifications + }); + + // Update file content + const { source } = syntaxTree as SyntaxTree; + if (!source) { + // Handle the case where source is undefined, when compiler issue occurs + return false; + } + const absolutePath = fileURLToPath(fileUri); + writeBallerinaFileDidOpenTemp(absolutePath, source); + projectModified = true; + } + } + + return projectModified; +} + +export async function addCheckExpressionErrors( + diagnosticsResult: Diagnostics[], + langClient: ExtendedLangClient +): Promise { + let projectModified = false; + + for (const diag of diagnosticsResult) { + const fileUri = diag.uri; + const diagnostics = diag.diagnostics; + + // Filter BCE3032 diagnostics (check expression errors) + const checkExprDiagnostics = diagnostics.filter(d => d.code === "BCE3032"); + if (!checkExprDiagnostics.length) { + continue; + } + + const astModifications: STModification[] = []; + + // Process each diagnostic individually + for (const diagnostic of checkExprDiagnostics) { + try { + // Get code actions for the diagnostic + const codeActions = await langClient.codeAction({ + textDocument: { uri: fileUri }, + range: { + start: diagnostic.range.start, + end: diagnostic.range.end + }, + context: { + diagnostics: [diagnostic], + only: ['quickfix'], + triggerKind: 1 + } + }); + + if (!codeActions?.length) { + console.warn(`No code actions returned for ${fileUri} at line ${diagnostic.range.start.line}`); + continue; + } + + // Find the action that adds error to return type + // The language server typically provides actions like "Change return type to ..." + const action = codeActions.find( + action => action.title && ( + action.title.toLowerCase().includes("change") && + action.title.toLowerCase().includes("return") && + action.title.toLowerCase().includes("error") + ) + ); + + if (!action?.edit?.documentChanges?.length) { + continue; + } + + const docEdit = action.edit.documentChanges[0] as TextDocumentEdit; + + // Process all edits from the code action + for (const edit of docEdit.edits) { + astModifications.push({ + startLine: edit.range.start.line, + startColumn: edit.range.start.character, + endLine: edit.range.end.line, + endColumn: edit.range.end.character, + type: "INSERT", + isImport: false, + config: { STATEMENT: edit.newText } + }); + } + } catch (err) { + console.warn(`Could not apply code action for ${fileUri} at line ${diagnostic.range.start.line}:`, err); + } + } + + // Apply modifications to syntax tree + if (astModifications.length > 0) { + const syntaxTree = await langClient.stModify({ + documentIdentifier: { uri: fileUri }, + astModifications: astModifications }); // Update file content @@ -222,9 +417,11 @@ export async function removeUnusedImports(diagnosticsResult: Diagnostics[], lang // Handle the case where source is undefined, when compiler issue occurs return false; } - const absolutePath = fileURLToPath(fielUri); + const absolutePath = fileURLToPath(fileUri); writeBallerinaFileDidOpenTemp(absolutePath, source); projectModified = true; + } } + return projectModified; } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts index 8404ed51eb1..139e5aeb5ea 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-handler.ts @@ -21,22 +21,15 @@ import { abortAIGeneration, abortTestGeneration, addChatSummary, - addCodeSegmentToWorkspace, addFilesToProject, AddFilesToProjectRequest, - addInlineCodeSegmentToWorkspace, addToProject, AddToProjectRequest, AIChatSummary, applyDoOnFailBlocks, checkSyntaxError, clearInitialPrompt, - CodeSegment, - createTempFileAndGenerateMetadata, - CreateTempFileRequest, createTestDirecoryIfNotExists, - DatamapperModelContext, - DataMapperModelResponse, deleteFromProject, DeleteFromProjectRequest, DeveloperDocument, @@ -45,19 +38,17 @@ import { FetchDataRequest, generateCode, GenerateCodeRequest, - generateDataMapperModel, + generateContextTypes, generateFunctionTests, generateHealthcareCode, - generateMappings, + generateInlineMappingCode, + generateMappingCode, generateOpenAPI, GenerateOpenAPIRequest, generateTestPlan, - GenerateTypesFromRecordRequest, getAccessToken, - getActiveFile, getAIMachineSnapshot, getBackendUrl, - getContentFromFile, getDefaultPrompt, getDriftDiagnosticContents, getFileExists, @@ -67,8 +58,6 @@ import { getGeneratedDocumentation, getGeneratedTests, getLoginMethod, - getModuleDirectory, - GetModuleDirParams, getProjectUuid, getRefreshedAccessToken, getRelevantLibrariesAndFunctions, @@ -78,18 +67,18 @@ import { getServiceSourceForName, getShadowDiagnostics, getTestDiagnostics, - getTypesFromRecord, handleChatSummaryError, isCopilotSignedIn, isNaturalProgrammingDirectoryExists, isRequirementsSpecificationFileExist, + isUserAuthenticated, markAlertShown, MetadataWithAttachments, - notifyAIMappings, - NotifyAIMappingsRequest, - openAIMappingChatWindow, + openChatWindowWithCommand, postProcess, PostProcessRequest, + ProcessContextTypeCreationRequest, + ProcessMappingParametersRequest, ProjectSource, promptGithubAuthorize, promptWSO2AILogout, @@ -99,7 +88,6 @@ import { RepairParams, RequirementSpecification, showSignInAlert, - stopAIMappings, submitFeedback, SubmitFeedbackRequest, TestGenerationRequest, @@ -126,18 +114,13 @@ export function registerAiPanelRpcHandlers(messenger: Messenger) { messenger.onRequest(getFromFile, (args: GetFromFileRequest) => rpcManger.getFromFile(args)); messenger.onRequest(getFileExists, (args: GetFromFileRequest) => rpcManger.getFileExists(args)); messenger.onNotification(deleteFromProject, (args: DeleteFromProjectRequest) => rpcManger.deleteFromProject(args)); - messenger.onRequest(notifyAIMappings, (args: NotifyAIMappingsRequest) => rpcManger.notifyAIMappings(args)); - messenger.onRequest(stopAIMappings, () => rpcManger.stopAIMappings()); messenger.onRequest(getShadowDiagnostics, (args: ProjectSource) => rpcManger.getShadowDiagnostics(args)); messenger.onRequest(checkSyntaxError, (args: ProjectSource) => rpcManger.checkSyntaxError(args)); messenger.onNotification(clearInitialPrompt, () => rpcManger.clearInitialPrompt()); - messenger.onNotification(openAIMappingChatWindow, (args: DataMapperModelResponse) => rpcManger.openAIMappingChatWindow(args)); - messenger.onRequest(generateDataMapperModel, (args: DatamapperModelContext) => rpcManger.generateDataMapperModel(args)); - messenger.onRequest(getTypesFromRecord, (args: GenerateTypesFromRecordRequest) => rpcManger.getTypesFromRecord(args)); - messenger.onRequest(createTempFileAndGenerateMetadata, (args: CreateTempFileRequest) => rpcManger.createTempFileAndGenerateMetadata(args)); - messenger.onRequest(generateMappings, (args: MetadataWithAttachments) => rpcManger.generateMappings(args)); - messenger.onRequest(addCodeSegmentToWorkspace, (args: CodeSegment) => rpcManger.addCodeSegmentToWorkspace(args)); - messenger.onNotification(addInlineCodeSegmentToWorkspace, (args: CodeSegment) => rpcManger.addInlineCodeSegmentToWorkspace(args)); + messenger.onRequest(openChatWindowWithCommand, () => rpcManger.openChatWindowWithCommand()); + messenger.onRequest(generateContextTypes, (args: ProcessContextTypeCreationRequest) => rpcManger.generateContextTypes(args)); + messenger.onRequest(generateMappingCode, (args: ProcessMappingParametersRequest) => rpcManger.generateMappingCode(args)); + messenger.onRequest(generateInlineMappingCode, (args: MetadataWithAttachments) => rpcManger.generateInlineMappingCode(args)); messenger.onRequest(getGeneratedTests, (args: TestGenerationRequest) => rpcManger.getGeneratedTests(args)); messenger.onRequest(getTestDiagnostics, (args: TestGenerationResponse) => rpcManger.getTestDiagnostics(args)); messenger.onRequest(getServiceSourceForName, (args: string) => rpcManger.getServiceSourceForName(args)); @@ -147,7 +130,6 @@ export function registerAiPanelRpcHandlers(messenger: Messenger) { messenger.onNotification(abortTestGeneration, () => rpcManger.abortTestGeneration()); messenger.onNotification(applyDoOnFailBlocks, () => rpcManger.applyDoOnFailBlocks()); messenger.onRequest(postProcess, (args: PostProcessRequest) => rpcManger.postProcess(args)); - messenger.onRequest(getActiveFile, () => rpcManger.getActiveFile()); messenger.onRequest(promptGithubAuthorize, () => rpcManger.promptGithubAuthorize()); messenger.onRequest(promptWSO2AILogout, () => rpcManger.promptWSO2AILogout()); messenger.onRequest(isCopilotSignedIn, () => rpcManger.isCopilotSignedIn()); @@ -163,8 +145,6 @@ export function registerAiPanelRpcHandlers(messenger: Messenger) { messenger.onNotification(updateDevelopmentDocument, (args: DeveloperDocument) => rpcManger.updateDevelopmentDocument(args)); messenger.onNotification(updateRequirementSpecification, (args: RequirementSpecification) => rpcManger.updateRequirementSpecification(args)); messenger.onNotification(createTestDirecoryIfNotExists, (args: string) => rpcManger.createTestDirecoryIfNotExists(args)); - messenger.onRequest(getModuleDirectory, (args: GetModuleDirParams) => rpcManger.getModuleDirectory(args)); - messenger.onRequest(getContentFromFile, (args: GetFromFileRequest) => rpcManger.getContentFromFile(args)); messenger.onRequest(submitFeedback, (args: SubmitFeedbackRequest) => rpcManger.submitFeedback(args)); messenger.onRequest(getRelevantLibrariesAndFunctions, (args: RelevantLibrariesAndFunctionsRequest) => rpcManger.getRelevantLibrariesAndFunctions(args)); messenger.onNotification(generateOpenAPI, (args: GenerateOpenAPIRequest) => rpcManger.generateOpenAPI(args)); @@ -176,4 +156,5 @@ export function registerAiPanelRpcHandlers(messenger: Messenger) { messenger.onNotification(abortAIGeneration, () => rpcManger.abortAIGeneration()); messenger.onNotification(getGeneratedDocumentation, (args: DocGenerationRequest) => rpcManger.getGeneratedDocumentation(args)); messenger.onRequest(addFilesToProject, (args: AddFilesToProjectRequest) => rpcManger.addFilesToProject(args)); + messenger.onRequest(isUserAuthenticated, () => rpcManger.isUserAuthenticated()); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts index b3089dfa11c..82a5e3d5152 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/rpc-manager.ts @@ -28,37 +28,26 @@ import { AllDataMapperSourceRequest, BIModuleNodesRequest, BISourceCodeResponse, - CodeSegment, - Command, - CreateTempFileRequest, - DMModel, - DataMapperModelResponse, - DatamapperModelContext, DeleteFromProjectRequest, DeveloperDocument, DiagnosticEntry, Diagnostics, DocGenerationRequest, - ExpandedDMModel, - ExtendedDataMapperMetadata, FetchDataRequest, FetchDataResponse, GenerateCodeRequest, - GenerateMappingsResponse, GenerateOpenAPIRequest, - GenerateTypesFromRecordRequest, - GenerateTypesFromRecordResponse, GetFromFileRequest, GetModuleDirParams, LLMDiagnostics, - LinePosition, LoginMethod, - MappingElement, MetadataWithAttachments, - NotifyAIMappingsRequest, OperationType, + PackageTomlValues, PostProcessRequest, PostProcessResponse, + ProcessContextTypeCreationRequest, + ProcessMappingParametersRequest, ProjectDiagnostics, ProjectModule, ProjectSource, @@ -68,31 +57,26 @@ import { RequirementSpecification, SourceFile, SubmitFeedbackRequest, - SyntaxTree, - TemplateId, TestGenerationMentions, TestGenerationRequest, TestGenerationResponse, TestGeneratorIntermediaryState, - TestPlanGenerationRequest, - TextEdit + TestPlanGenerationRequest } from "@wso2/ballerina-core"; import * as crypto from 'crypto'; import * as fs from 'fs'; import * as os from 'os'; import path from "path"; -import { parse } from 'toml'; -import { Uri, commands, window, workspace } from 'vscode'; +import { parse } from "@iarna/toml"; +import { workspace } from 'vscode'; -import { FunctionDefinition, ModulePart, STKindChecker, STNode } from "@wso2/syntax-tree"; import { isNumber } from "lodash"; -import { URI } from "vscode-uri"; -import { NOT_SUPPORTED } from "../../../src/core/extended-language-client"; +import { ExtendedLangClient } from "src/core"; import { fetchWithAuth } from "../../../src/features/ai/service/connection"; +import { generateContextTypes, generateInlineMappingCode, generateMappingCode, openChatWindowWithCommand } from "../../../src/features/ai/service/datamapper/datamapper"; import { generateOpenAPISpec } from "../../../src/features/ai/service/openapi/openapi"; import { AIStateMachine } from "../../../src/views/ai-panel/aiMachine"; import { extension } from "../../BalExtensionContext"; -import { createTempDataMappingFile, generateTypeCreation } from "../../features/ai/dataMapping"; import { generateCode, triggerGeneratedCodeRepair } from "../../features/ai/service/code/code"; import { generateDocumentationForService } from "../../features/ai/service/documentation/doc_generator"; import { generateHealthcareCode } from "../../features/ai/service/healthcare/healthcare"; @@ -106,9 +90,9 @@ import { OLD_BACKEND_URL, closeAllBallerinaFiles } from "../../features/ai/utils import { getLLMDiagnosticArrayAsString, handleChatSummaryFailure } from "../../features/natural-programming/utils"; import { StateMachine, updateView } from "../../stateMachine"; import { getAccessToken, getLoginMethod, getRefreshedAccessToken, loginGithubCopilot } from "../../utils/ai/auth"; -import { modifyFileContent, writeBallerinaFileDidOpen, writeBallerinaFileDidOpenTemp } from "../../utils/modification"; +import { writeBallerinaFileDidOpen, writeBallerinaFileDidOpenTemp } from "../../utils/modification"; import { updateSourceCode } from "../../utils/source-utils"; -import { expandDMModel, refreshDataMapper, updateAndRefreshDataMapper } from "../data-mapper/utils"; +import { refreshDataMapper } from "../data-mapper/utils"; import { DEVELOPMENT_DOCUMENT, NATURAL_PROGRAMMING_DIR_NAME, REQUIREMENT_DOC_PREFIX, @@ -117,10 +101,10 @@ import { REQ_KEY, TEST_DIR_NAME } from "./constants"; import { attemptRepairProject, checkProjectDiagnostics } from "./repair-utils"; -import { AIPanelAbortController, addToIntegration, cleanDiagnosticMessages, handleStop, isErrorCode, processMappings, requirementsSpecification, searchDocumentation } from "./utils"; +import { AIPanelAbortController, addToIntegration, cleanDiagnosticMessages, isErrorCode, requirementsSpecification, searchDocumentation } from "./utils"; import { fetchData } from "./utils/fetch-data-utils"; -import { CLOSE_AI_PANEL_COMMAND, OPEN_AI_PANEL_COMMAND } from "../../../src/features/ai/constants"; - +import { checkToken } from "../../../src/views/ai-panel/utils"; +import { getWorkspaceTomlValues } from "./../../../src/utils/config"; export class AiPanelRpcManager implements AIPanelAPI { // ================================== @@ -141,10 +125,17 @@ export class AiPanelRpcManager implements AIPanelAPI { } try { - const workspaceFolderPath = workspace.workspaceFolders[0].uri.fsPath; + let projectIdentifier: string; + const cloudProjectId = process.env.CLOUD_INITIAL_PROJECT_ID; + + if (cloudProjectId) { + projectIdentifier = cloudProjectId; + } else { + projectIdentifier = workspace.workspaceFolders[0].uri.fsPath; + } const hash = crypto.createHash('sha256') - .update(workspaceFolderPath) + .update(projectIdentifier) .digest('hex'); resolve(hash); @@ -207,21 +198,15 @@ export class AiPanelRpcManager implements AIPanelAPI { } async addToProject(req: AddToProjectRequest): Promise { - - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - throw new Error("No workspaces found."); - } - - const workspaceFolderPath = workspaceFolders[0].uri.fsPath; + const projectPath = StateMachine.context().projectPath; // Check if workspaceFolderPath is a Ballerina project // Assuming a Ballerina project must contain a 'Ballerina.toml' file - const ballerinaProjectFile = path.join(workspaceFolderPath, 'Ballerina.toml'); + const ballerinaProjectFile = path.join(projectPath, 'Ballerina.toml'); if (!fs.existsSync(ballerinaProjectFile)) { throw new Error("Not a Ballerina project."); } - let balFilePath = path.join(workspaceFolderPath, req.filePath); + let balFilePath = path.join(projectPath, req.filePath); const directory = path.dirname(balFilePath); if (!fs.existsSync(directory)) { @@ -236,37 +221,37 @@ export class AiPanelRpcManager implements AIPanelAPI { } async getFromFile(req: GetFromFileRequest): Promise { - return new Promise(async (resolve) => { - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - throw new Error("No workspaces found."); - } - - const workspaceFolderPath = workspaceFolders[0].uri.fsPath; - const ballerinaProjectFile = path.join(workspaceFolderPath, 'Ballerina.toml'); - if (!fs.existsSync(ballerinaProjectFile)) { - throw new Error("Not a Ballerina project."); - } + let projectPath = StateMachine.context().projectPath; + const workspacePath = StateMachine.context().workspacePath; + if (workspacePath) { + projectPath = workspacePath; + } + const ballerinaProjectFile = path.join(projectPath, 'Ballerina.toml'); + if (!fs.existsSync(ballerinaProjectFile)) { + throw new Error("Not a Ballerina project."); + } - const balFilePath = path.join(workspaceFolderPath, req.filePath); - const content = fs.promises.readFile(balFilePath, 'utf-8'); - resolve(content); - }); + const balFilePath = path.join(projectPath, req.filePath); + try { + const content = await fs.promises.readFile(balFilePath, 'utf-8'); + return content; + } catch (error) { + throw error; + } } async deleteFromProject(req: DeleteFromProjectRequest): Promise { - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - throw new Error("No workspaces found."); + let projectPath = StateMachine.context().projectPath; + const workspacePath = StateMachine.context().workspacePath; + if (workspacePath) { + projectPath = workspacePath; } - - const workspaceFolderPath = workspaceFolders[0].uri.fsPath; - const ballerinaProjectFile = path.join(workspaceFolderPath, 'Ballerina.toml'); + const ballerinaProjectFile = path.join(projectPath, 'Ballerina.toml'); if (!fs.existsSync(ballerinaProjectFile)) { throw new Error("Not a Ballerina project."); } - const balFilePath = path.join(workspaceFolderPath, req.filePath); + const balFilePath = path.join(projectPath, req.filePath); if (fs.existsSync(balFilePath)) { try { fs.unlinkSync(balFilePath); @@ -282,57 +267,19 @@ export class AiPanelRpcManager implements AIPanelAPI { } async getFileExists(req: GetFromFileRequest): Promise { - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - throw new Error("No workspaces found."); - } - - const workspaceFolderPath = workspaceFolders[0].uri.fsPath; - const ballerinaProjectFile = path.join(workspaceFolderPath, 'Ballerina.toml'); + const projectPath = StateMachine.context().projectPath; + const ballerinaProjectFile = path.join(projectPath, 'Ballerina.toml'); if (!fs.existsSync(ballerinaProjectFile)) { throw new Error("Not a Ballerina project."); } - const balFilePath = path.join(workspaceFolderPath, req.filePath); + const balFilePath = path.join(projectPath, req.filePath); if (fs.existsSync(balFilePath)) { return true; } return false; } - async notifyAIMappings(params: NotifyAIMappingsRequest): Promise { - const { newFnPosition, prevFnSource, filePath } = params; - const fileUri = Uri.file(filePath).toString(); - const undoAction = 'Undo'; - const msg = 'You have automatically generated mappings. Do you want to undo the changes?'; - const result = await window.showInformationMessage(msg, undoAction, 'Close'); - - if (result === undoAction) { - const res = await StateMachine.langClient().stModify({ - astModifications: [{ - type: "INSERT", - config: { STATEMENT: prevFnSource }, - ...newFnPosition - }], - documentIdentifier: { - uri: fileUri - } - }); - - const { source } = res as SyntaxTree; - await modifyFileContent({ filePath, content: source }); - updateView(); - } - - return true; - } - - async stopAIMappings(): Promise { - handleStop(); - return { userAborted: true }; - } - - async getShadowDiagnostics(project: ProjectSource): Promise { const environment = await setupProjectEnvironment(project); if (!environment) { @@ -383,9 +330,9 @@ export class AiPanelRpcManager implements AIPanelAPI { async getGeneratedTests(params: TestGenerationRequest): Promise { return new Promise(async (resolve, reject) => { try { - const projectRoot = await getBallerinaProjectRoot(); + const projectPath = StateMachine.context().projectPath; - const generatedTests = await generateTest(projectRoot, params, AIPanelAbortController.getInstance()); + const generatedTests = await generateTest(projectPath, params, AIPanelAbortController.getInstance()); resolve(generatedTests); } catch (error) { reject(error); @@ -396,8 +343,8 @@ export class AiPanelRpcManager implements AIPanelAPI { async getTestDiagnostics(params: TestGenerationResponse): Promise { return new Promise(async (resolve, reject) => { try { - const projectRoot = await getBallerinaProjectRoot(); - const diagnostics = await getDiagnostics(projectRoot, params); + const projectPath = StateMachine.context().projectPath; + const diagnostics = await getDiagnostics(projectPath, params); resolve(diagnostics); } catch (error) { reject(error); @@ -408,8 +355,8 @@ export class AiPanelRpcManager implements AIPanelAPI { async getServiceSourceForName(params: string): Promise { return new Promise(async (resolve, reject) => { try { - const projectRoot = await getBallerinaProjectRoot(); - const { serviceDeclaration, serviceDocFilePath } = await getServiceDeclaration(projectRoot, params); + const projectPath = StateMachine.context().projectPath; + const { serviceDeclaration } = await getServiceDeclaration(projectPath, params); resolve(serviceDeclaration.source); } catch (error) { reject(error); @@ -420,8 +367,8 @@ export class AiPanelRpcManager implements AIPanelAPI { async getResourceSourceForMethodAndPath(params: string): Promise { return new Promise(async (resolve, reject) => { try { - const projectRoot = await getBallerinaProjectRoot(); - const { serviceDeclaration, resourceAccessorDef, serviceDocFilePath } = await getResourceAccessorDef(projectRoot, params); + const projectPath = StateMachine.context().projectPath; + const { resourceAccessorDef } = await getResourceAccessorDef(projectPath, params); resolve(resourceAccessorDef.source); } catch (error) { reject(error); @@ -432,8 +379,8 @@ export class AiPanelRpcManager implements AIPanelAPI { async getServiceNames(): Promise { return new Promise(async (resolve, reject) => { try { - const projectRoot = await getBallerinaProjectRoot(); - const serviceDeclNames = await getServiceDeclarationNames(projectRoot); + const projectPath = StateMachine.context().projectPath; + const serviceDeclNames = await getServiceDeclarationNames(projectPath); resolve({ mentions: serviceDeclNames }); @@ -446,8 +393,8 @@ export class AiPanelRpcManager implements AIPanelAPI { async getResourceMethodAndPaths(): Promise { return new Promise(async (resolve, reject) => { try { - const projectRoot = await getBallerinaProjectRoot(); - const resourceAccessorNames = await getResourceAccessorNames(projectRoot); + const projectPath = StateMachine.context().projectPath; + const resourceAccessorNames = await getResourceAccessorNames(projectPath); resolve({ mentions: resourceAccessorNames }); @@ -461,18 +408,14 @@ export class AiPanelRpcManager implements AIPanelAPI { AIPanelAbortController.getInstance().abort(); } - async getTypesFromRecord(params: GenerateTypesFromRecordRequest): Promise { - return await generateTypeCreation(params); - } - async postProcess(req: PostProcessRequest): Promise { return await postProcess(req); } async applyDoOnFailBlocks(): Promise { - const projectRoot = await getBallerinaProjectRoot(); + const projectPath = StateMachine.context().projectPath; - if (!projectRoot) { + if (!projectPath) { return null; } @@ -491,7 +434,7 @@ export class AiPanelRpcManager implements AIPanelAPI { } }; - findBalFiles(projectRoot); + findBalFiles(projectPath); for (const balFile of balFiles) { const req: BIModuleNodesRequest = { @@ -499,23 +442,7 @@ export class AiPanelRpcManager implements AIPanelAPI { }; const resp: BISourceCodeResponse = await StateMachine.langClient().addErrorHandler(req); - await updateSourceCode({ textEdits: resp.textEdits }, null, 'Error Handler Creation'); - } - } - - async getActiveFile(): Promise { - const activeTabGroup = window.tabGroups.all.find(group => { - return group.activeTab.isActive && group.activeTab?.input; - }); - - if (activeTabGroup && activeTabGroup.activeTab && activeTabGroup.activeTab.input) { - const activeTabInput = activeTabGroup.activeTab.input as { uri: { fsPath: string } }; - - if (activeTabInput.uri) { - const fileUri = activeTabInput.uri; - const fileName = fileUri.fsPath.split('/').pop(); - return fileName || ''; - } + await updateSourceCode({ textEdits: resp.textEdits, description: 'Error Handler Creation' }); } } @@ -664,8 +591,7 @@ export class AiPanelRpcManager implements AIPanelAPI { async getModuleDirectory(params: GetModuleDirParams): Promise { return new Promise((resolve) => { - const projectUri = params.filePath; - const projectFsPath = URI.parse(projectUri).fsPath; + const projectFsPath = params.filePath; const moduleName = params.moduleName; const generatedPath = path.join(projectFsPath, "generated", moduleName); if (fs.existsSync(generatedPath) && fs.statSync(generatedPath).isDirectory()) { @@ -676,14 +602,6 @@ export class AiPanelRpcManager implements AIPanelAPI { }); } - async getContentFromFile(content: GetFromFileRequest): Promise { - return new Promise(async (resolve) => { - const projectFsPath = URI.parse(content.filePath).fsPath; - const fileContent = await fs.promises.readFile(projectFsPath, 'utf-8'); - resolve(fileContent); - }); - } - async submitFeedback(content: SubmitFeedbackRequest): Promise { return new Promise(async (resolve) => { try { @@ -751,333 +669,73 @@ export class AiPanelRpcManager implements AIPanelAPI { AIPanelAbortController.getInstance().abort(); } - async createTempFileAndGenerateMetadata(params: CreateTempFileRequest): Promise { - const projectRoot = await getBallerinaProjectRoot(); - const filePath = await createTempDataMappingFile( - projectRoot, - params.inputs, - params.output, - params.functionName, - params.inputNames, - params.imports - ); - - // Get the complete syntax tree - const fileUri = Uri.file(filePath).toString(); - const st = (await StateMachine.langClient().getSyntaxTree({ - documentIdentifier: { - uri: fileUri, - }, - })) as SyntaxTree; - - let funcDefinitionNode: FunctionDefinition = null; - const modulePart = st.syntaxTree as ModulePart; - - // Find the function definition by name - modulePart.members.forEach((member) => { - if (STKindChecker.isFunctionDefinition(member)) { - const funcDef = member as FunctionDefinition; - if (funcDef.functionName?.value === params.functionName) { - funcDefinitionNode = funcDef; - } - } - }); - - if (!funcDefinitionNode) { - throw new Error(`Function ${params.functionName} not found in the generated file`); - } - - // Create dataMapperMetadata with the found positions - const dataMapperMetadata = { - name: params.functionName, - codeData: { - lineRange: { - fileName: filePath, - startLine: { - line: funcDefinitionNode.position.startLine, - offset: funcDefinitionNode.position.startColumn, - }, - endLine: { - line: funcDefinitionNode.position.endLine, - offset: funcDefinitionNode.position.endColumn, - }, - }, - }, - }; - - const dataMapperModel = await this.generateDataMapperModel({ - documentUri: filePath, - identifier: params.functionName, - dataMapperMetadata: dataMapperMetadata - }); - - return { - mappingsModel: dataMapperModel.mappingsModel as ExpandedDMModel, - name: params.functionName, - codeData: dataMapperMetadata.codeData - }; + async getGeneratedDocumentation(params: DocGenerationRequest): Promise { + await generateDocumentationForService(params); } - async generateDataMapperModel(params: DatamapperModelContext): Promise { + async addFilesToProject(params: AddFilesToProjectRequest): Promise { try { - let filePath: string; - let identifier: string; - let dataMapperMetadata: any; - - if (params && params.documentUri && params.identifier) { - filePath = params.documentUri; - identifier = params.identifier; - dataMapperMetadata = params.dataMapperMetadata; - } else { - const context = StateMachine.context(); - filePath = context.documentUri; - identifier = context.identifier || context.dataMapperMetadata.name; - dataMapperMetadata = context.dataMapperMetadata; + let projectPath = StateMachine.context().projectPath; + const workspacePath = StateMachine.context().workspacePath; + if (workspacePath) { + projectPath = workspacePath; } - let position: LinePosition = { - line: dataMapperMetadata.codeData.lineRange.startLine.line, - offset: dataMapperMetadata.codeData.lineRange.startLine.offset - }; - - if (!dataMapperMetadata.codeData.hasOwnProperty('node') || - dataMapperMetadata.codeData.node !== "VARIABLE") { - const fileUri = Uri.file(filePath).toString(); - const fnSTByRange = await StateMachine.langClient().getSTByRange({ - lineRange: { - start: { - line: dataMapperMetadata.codeData.lineRange.startLine.line, - character: dataMapperMetadata.codeData.lineRange.startLine.offset - }, - end: { - line: dataMapperMetadata.codeData.lineRange.endLine.line, - character: dataMapperMetadata.codeData.lineRange.endLine.offset - } - }, - documentIdentifier: { uri: fileUri } - }); - - if (fnSTByRange === NOT_SUPPORTED) { - throw new Error("Syntax tree retrieval not supported"); - } - - const fnSt = (fnSTByRange as SyntaxTree).syntaxTree as STNode; - - if (STKindChecker.isFunctionDefinition(fnSt) && - STKindChecker.isExpressionFunctionBody(fnSt.functionBody)) { - position = { - line: fnSt.functionBody.expression.position.startLine, - offset: fnSt.functionBody.expression.position.startColumn - }; - } + const ballerinaProjectFile = path.join(projectPath, "Ballerina.toml"); + if (!fs.existsSync(ballerinaProjectFile)) { + throw new Error("Not a Ballerina project."); } + await addToIntegration(projectPath, params.fileChanges); - let dataMapperModel = await StateMachine - .langClient() - .getDataMapperMappings({ - filePath, - codedata: dataMapperMetadata.codeData, - targetField: identifier, - position: position - }) as DataMapperModelResponse; - - return { - mappingsModel: expandDMModel( - dataMapperModel.mappingsModel as DMModel, - identifier - ) - }; - } catch (error) { - console.error("Failed to generate data mapper model:", error); - throw error; - } - } - - async addCodeSegmentToWorkspace(params: CodeSegment): Promise { - try { - let filePath = params.filePath && params.filePath.trim() !== '' - ? params.filePath - : StateMachine.context().documentUri; - const datamapperMetadata = params.metadata - ? params.metadata - : StateMachine.context().dataMapperMetadata; - - let allTextEdits: { [key: string]: TextEdit[] }; + const context = StateMachine.context(); + const dataMapperMetadata = context.dataMapperMetadata; + if (!dataMapperMetadata || !dataMapperMetadata.codeData) { + updateView(); + return true; + } - if (params.textEdit && params.textEdit.textEdits) { - allTextEdits = params.textEdit.textEdits; - } else { - const textEdit: TextEdit = { - newText: params.segmentText, - range: { - start: { - line: datamapperMetadata.codeData.lineRange.startLine.line, - character: datamapperMetadata.codeData.lineRange.startLine.offset - }, - end: { - line: datamapperMetadata.codeData.lineRange.endLine.line, - character: datamapperMetadata.codeData.lineRange.endLine.offset - } - } - }; - allTextEdits = { - [filePath]: [textEdit] - }; + // Refresh data mapper with the updated code + let filePath = dataMapperMetadata.codeData.lineRange?.fileName; + const varName = dataMapperMetadata.name; + if (!filePath || !varName) { + updateView(); + return true; } - await updateSourceCode({ textEdits: allTextEdits }, null, 'AI Code Segment Creation'); + + await refreshDataMapper(filePath, dataMapperMetadata.codeData, varName); return true; } catch (error) { - console.error(">>> Failed to add code segment to the workspace", error); - throw error; + console.error(">>> Failed to add files to the project", error); + return false; //silently fail for timeout issues. } } - async openAIMappingChatWindow(params: DataMapperModelResponse): Promise { - try { - const context = StateMachine.context(); - const { identifier, dataMapperMetadata } = context; - - commands.executeCommand(CLOSE_AI_PANEL_COMMAND); - commands.executeCommand(OPEN_AI_PANEL_COMMAND, { - type: 'command-template', - command: Command.DataMap, - templateId: identifier ? TemplateId.MappingsForFunction : TemplateId.InlineMappings, - ...(identifier && { params: { functionName: identifier } }), - metadata: { - ...dataMapperMetadata, - mappingsModel: params.mappingsModel as ExpandedDMModel - } - }); - } catch (error) { - console.error("Failed to open AI chat window for mapping:", error); - throw error; - } + async generateMappingCode(params: ProcessMappingParametersRequest): Promise { + await generateMappingCode(params); } - async generateMappings(params: MetadataWithAttachments): Promise { - try { - const filePath = params.useTemporaryFile - ? params.metadata.codeData.lineRange.fileName - : StateMachine.context().documentUri; - - const file = params.attachments && params.attachments.length > 0 - ? params.attachments[0] - : undefined; - - const mappingElement = await processMappings(params.metadata.mappingsModel as ExpandedDMModel, file); - - const allMappingsRequest: AllDataMapperSourceRequest = { - filePath, - codedata: params.metadata.codeData, - varName: params.metadata.name, - position: { - line: params.metadata.codeData.lineRange.startLine.line, - offset: params.metadata.codeData.lineRange.startLine.offset - }, - mappings: (mappingElement as MappingElement).mappings - }; - - return allMappingsRequest; - } catch (error) { - console.error("Failed to generate mappings:", error); - throw error; - } + async generateInlineMappingCode(params: MetadataWithAttachments): Promise { + await generateInlineMappingCode(params); } - async addInlineCodeSegmentToWorkspace(params: CodeSegment): Promise { - try { - let filePath = StateMachine.context().documentUri; - const datamapperMetadata = StateMachine.context().dataMapperMetadata; - const textEdit: TextEdit = { - newText: params.segmentText, - range: { - start: { - line: datamapperMetadata.codeData.lineRange.startLine.line, - character: datamapperMetadata.codeData.lineRange.startLine.offset - }, - end: { - line: datamapperMetadata.codeData.lineRange.endLine.line, - character: datamapperMetadata.codeData.lineRange.endLine.offset - } - } - }; - const allTextEdits: { [key: string]: TextEdit[] } = { - [filePath]: [textEdit] - }; - - await updateAndRefreshDataMapper( - allTextEdits, - filePath, - datamapperMetadata.codeData, - datamapperMetadata.name, - datamapperMetadata.name - ); - } catch (error) { - console.error(">>> Failed to add inline code segment to the workspace", error); - throw error; - } + async generateContextTypes(params: ProcessContextTypeCreationRequest): Promise { + await generateContextTypes(params); } - async getGeneratedDocumentation(params: DocGenerationRequest): Promise { - await generateDocumentationForService(params); + async openChatWindowWithCommand(): Promise { + await openChatWindowWithCommand(); } - async addFilesToProject(params: AddFilesToProjectRequest): Promise { + async isUserAuthenticated(): Promise { try { - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - throw new Error("No workspaces found."); - } - - const workspaceFolderPath = workspaceFolders[0].uri.fsPath; - - const ballerinaProjectFile = path.join(workspaceFolderPath, "Ballerina.toml"); - if (!fs.existsSync(ballerinaProjectFile)) { - throw new Error("Not a Ballerina project."); - } - await addToIntegration(workspaceFolderPath, params.fileChanges); - updateView(); - return true; + const token = await checkToken(); + return !!token; } catch (error) { - console.error(">>> Failed to add files to the project", error); - return false; //silently fail for timeout issues. + return false; } } } -function getModifiedAssistantResponse(originalAssistantResponse: string, tempDir: string, project: ProjectSource): string { - const newSourceFiles = []; - for (const sourceFile of project.sourceFiles) { - const newContentPath = path.join(tempDir, sourceFile.filePath); - if (!fs.existsSync(newContentPath) && !(sourceFile.filePath.endsWith('.bal'))) { - newSourceFiles.push({ filePath: sourceFile.filePath, content: sourceFile.content }); - continue; - } - newSourceFiles.push({ filePath: sourceFile.filePath, content: fs.readFileSync(newContentPath, 'utf-8') }); - } - - // Build a map from filenames to their new content - const fileContentMap = new Map(); - for (const sourceFile of newSourceFiles) { - fileContentMap.set(sourceFile.filePath, sourceFile.content); - } - - // Replace code blocks in originalAssistantResponse with new content - const modifiedResponse = originalAssistantResponse.replace( - /\s*```ballerina([\s\S]*?)```[\s\S]*?<\/code>/g, - (match, filename) => { - if (fileContentMap.has(filename)) { - const newContent = fileContentMap.get(filename); - return `\n\`\`\`ballerina\n${newContent}\n\`\`\`\n`; - } else { - // If no new content, keep the original - return match; - } - } - ); - - return modifiedResponse; -} interface SummaryResponse { summary: string; @@ -1088,16 +746,20 @@ interface BalModification { moduleName: string; } -async function setupProjectEnvironment(project: ProjectSource): Promise<{ langClient: any, tempDir: string } | null> { +async function setupProjectEnvironment(project: ProjectSource): Promise<{ langClient: ExtendedLangClient, tempDir: string } | null> { //TODO: Move this to LS - const projectRoot = await getBallerinaProjectRoot(); - if (!projectRoot) { + let projectPath = StateMachine.context().projectPath; + const workspacePath = StateMachine.context().workspacePath; + if (workspacePath) { + projectPath = workspacePath; + } + if (!projectPath) { return null; } const randomNum = Math.floor(Math.random() * 90000) + 10000; const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), `bal-proj-${randomNum}-`)); - fs.cpSync(projectRoot, tempDir, { recursive: true }); + fs.cpSync(projectPath, tempDir, { recursive: true }); //Copy project const langClient = StateMachine.langClient(); //Apply edits @@ -1112,24 +774,6 @@ async function setupProjectEnvironment(project: ProjectSource): Promise<{ langCl return { langClient, tempDir }; } -export function getProjectFromResponse(req: string): ProjectSource { - const sourceFiles: SourceFile[] = []; - const regex = /\s*```ballerina([\s\S]*?)```\s*<\/code>/g; - let match; - - while ((match = regex.exec(req)) !== null) { - const filePath = match[1]; - const fileContent = match[2].trim(); - sourceFiles.push({ filePath, content: fileContent }); - } - - return { sourceFiles, projectName: "" }; -} - -function getContentInsideQuotes(input: string): string | null { - const match = input.match(/'([^']+)'/); - return match ? match[1] : null; -} function getErrorDiagnostics(diagnostics: Diagnostics[]): DiagnosticEntry[] { const errorDiagnostics: DiagnosticEntry[] = []; @@ -1168,22 +812,21 @@ enum CodeGenerationType { CODE_GENERATION = "CODE_GENERATION" } -async function getCurrentProjectSource(requestType: OperationType): Promise { - const projectRoot = await getBallerinaProjectRoot(); - - if (!projectRoot) { +async function getCurrentProjectSource(requestType: OperationType, projectPath?: string): Promise { + const targetProjectPath = projectPath || StateMachine.context().projectPath; + if (!targetProjectPath) { return null; } // Read the Ballerina.toml file to get package name - const ballerinaTomlPath = path.join(projectRoot, 'Ballerina.toml'); + const ballerinaTomlPath = path.join(targetProjectPath, 'Ballerina.toml'); let packageName; if (fs.existsSync(ballerinaTomlPath)) { const tomlContent = await fs.promises.readFile(ballerinaTomlPath, 'utf-8'); // Simple parsing to extract the package.name field try { - const tomlObj = parse(tomlContent); - packageName = tomlObj.package.name; + const tomlObj = parse(tomlContent) as Partial; + packageName = tomlObj?.package?.name; } catch (error) { packageName = ''; } @@ -1196,20 +839,20 @@ async function getCurrentProjectSource(requestType: OperationType): Promise { +export async function postProcess(req: PostProcessRequest): Promise { + // Fix import statement format + const processedSourceFiles = req.sourceFiles.map(sf => ({ + ...sf, + content: sf.content.replace(/import ballerinax\/client\.config/g, "import ballerinax/'client.config") + })); + + const project: ProjectSource = { + sourceFiles: processedSourceFiles, + projectName: "", + packagePath: "", + isActive: true + }; - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - throw new Error("No workspaces found."); + const environment = await setupProjectEnvironment(project); + if (!environment) { + return { sourceFiles: processedSourceFiles, diagnostics: { diagnostics: [] } }; } - const workspaceFolderPath = workspaceFolders[0].uri.fsPath; - // Check if workspaceFolderPath is a Ballerina project - // Assuming a Ballerina project must contain a 'Ballerina.toml' file - const ballerinaProjectFile = path.join(workspaceFolderPath, 'Ballerina.toml'); - if (fs.existsSync(ballerinaProjectFile)) { - return workspaceFolderPath; + let { langClient, tempDir } = environment; + let remainingDiags: Diagnostics[] = []; + if (StateMachine.context().workspacePath) { + // this is a workspace project + // assign active project path to tempDir + const projectTempDir = path.join(tempDir, path.basename(StateMachine.context().projectPath)); + remainingDiags = await attemptRepairProject(langClient, projectTempDir); + } else { + remainingDiags = await attemptRepairProject(langClient, tempDir); } - return null; -} + const filteredDiags: DiagnosticEntry[] = getErrorDiagnostics(remainingDiags); -export async function postProcess(req: PostProcessRequest): Promise { - let assist_resp = req.assistant_response; - assist_resp = assist_resp.replace(/import ballerinax\/client\.config/g, "import ballerinax/'client.config"); - const project: ProjectSource = getProjectFromResponse(assist_resp); - const environment = await setupProjectEnvironment(project); - if (!environment) { - return { assistant_response: assist_resp, diagnostics: { diagnostics: [] } }; + // Read repaired files from temp directory + const repairedSourceFiles = []; + for (const sourceFile of project.sourceFiles) { + const newContentPath = path.join(tempDir, sourceFile.filePath); + if (!fs.existsSync(newContentPath) && !(sourceFile.filePath.endsWith('.bal'))) { + repairedSourceFiles.push({ filePath: sourceFile.filePath, content: sourceFile.content }); + continue; + } + repairedSourceFiles.push({ filePath: sourceFile.filePath, content: fs.readFileSync(newContentPath, 'utf-8') }); } - const { langClient, tempDir } = environment; - // check project diagnostics - let remainingDiags: Diagnostics[] = await attemptRepairProject(langClient, tempDir); - - const filteredDiags: DiagnosticEntry[] = getErrorDiagnostics(remainingDiags); - const newAssistantResponse = getModifiedAssistantResponse(assist_resp, tempDir, project); await closeAllBallerinaFiles(tempDir); return { - assistant_response: newAssistantResponse, + sourceFiles: repairedSourceFiles, diagnostics: { diagnostics: filteredDiags } }; } -export async function getProjectSource(requestType: OperationType): Promise { - // Fetch the Ballerina project source - const project: BallerinaProject = await getCurrentProjectSource(requestType); - - // Initialize the ProjectSource object +function convertToProjectSource(project: BallerinaProject, pkgPath: string, isActive: boolean): ProjectSource { const projectSource: ProjectSource = { sourceFiles: [], projectModules: [], projectName: project.projectName, + packagePath: pkgPath, + isActive: isActive }; // Iterate through root-level sources @@ -1325,8 +976,6 @@ export async function getProjectSource(requestType: OperationType): Promise { + const context = StateMachine.context(); + const currentProjectPath = context.projectPath; + const workspacePath = context.workspacePath; + + // Early return for non-workspace case: single project only + if (!workspacePath) { + const project = await getCurrentProjectSource(requestType); + // No workspace context, so packagePath is empty string + return [convertToProjectSource(project, "", true)]; + } + + // Workspace case: load all packages from the workspace + const workspaceTomlValues = await getWorkspaceTomlValues(workspacePath); + + // Fallback to single project if workspace.toml is invalid or has no packages + if (!workspaceTomlValues || !workspaceTomlValues.workspace || !workspaceTomlValues.workspace.packages) { + const project = await getCurrentProjectSource(requestType); + // Workspace exists but invalid, treat as non-workspace + return [convertToProjectSource(project, "", true)]; + } + + const packagePaths = StateMachine.context().projectInfo?.children.map(child => child.projectPath); + + // Load all packages in parallel + const projectSources: ProjectSource[] = await Promise.all( + packagePaths.map(async (pkgPath) => { + // Resolve the full path for reading files and checking if active + const fullPackagePath = path.isAbsolute(pkgPath) + ? pkgPath + : path.join(workspacePath, pkgPath); + + const project = await getCurrentProjectSource(requestType, fullPackagePath); + const isActive = fullPackagePath === currentProjectPath; + + // Use relative path from workspace for packagePath + const relativePackagePath = path.isAbsolute(pkgPath) + ? path.relative(workspacePath, pkgPath) + : pkgPath; + + return convertToProjectSource(project, relativePackagePath, isActive); + }) + ); + + return projectSources; +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/types.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/types.ts index 5f91c2c2da0..6d3b6e39c84 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/types.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/types.ts @@ -18,58 +18,6 @@ */ // Data-mapper related interfaces -export interface SimpleFieldDescriptor { - type: string; - comment: string; -} - -export interface NestedFieldDescriptor { - [key: string]: SimpleFieldDescriptor | NestedFieldDescriptor; -} - -export interface RecordDefinitonObject { - recordFields: NestedFieldDescriptor; - recordFieldsMetadata: { - [fieldName: string]: FieldMetadata; - }; -} - -export interface FieldMetadata { - typeName: string; - type: string; - typeInstance: string; - optional: boolean; - nullable?: boolean; - nullableArray?: boolean; - members?: { - [memberName: string]: FieldMetadata; - }; - fields?: { - [fieldName: string]: FieldMetadata; - }; -} - -export interface ParameterField { - isArrayType: boolean; - parameterName: string; - parameterType: string; - type: string; - members?: { - [memberName: string]: FieldMetadata; - }; - fields?: { - [fieldName: string]: FieldMetadata; - }; -} - -export interface InputMetadata { - [parameterName: string]: ParameterField; -} - -export interface OutputMetadata { - [fieldName: string]: FieldMetadata; -} - export interface MappingField { MAPPING_TIP: string; INPUT_FIELDS: string[]; @@ -83,40 +31,6 @@ export interface MappingFileRecord { mapping_fields: MappingFields; } -export interface ParameterMetadata { - inputs: NestedFieldDescriptor; - output: NestedFieldDescriptor; - inputMetadata: InputMetadata; - outputMetadata: OutputMetadata; - mapping_fields?: MappingFields; - constants?: Record; - configurables?: Record; - variables?: Record; - enums?: Record; -} - -export interface ParameterDefinitions { - parameterMetadata: ParameterMetadata; - errorStatus: boolean; -} - -export interface VisitorContext { - recordFields: NestedFieldDescriptor; - recordFieldsMetadata: { [key: string]: FieldMetadata }; - memberRecordFields: NestedFieldDescriptor; - memberFieldsMetadata: { [key: string]: FieldMetadata }; - fieldMetadata: FieldMetadata; - isNill: boolean; - isNullable: boolean; - isArray: boolean; - isRecord: boolean; - isSimple: boolean; - isUnion: boolean; - isArrayNullable: boolean; - isRecordNullable: boolean; - memberName: string; -} - export interface MappingData { operation: string; parameters: string[]; @@ -131,18 +45,3 @@ export interface MappingsResponse { mappings: IntermediateMapping; } -export interface ProcessParentKeyResult { - itemKey: string; - combinedKey: string; - inputArrayNullable: boolean; - isSet: boolean; - isInputDeeplyNested: boolean; -} - -export interface ProcessCombinedKeyResult { - isinputRecordArrayNullable: boolean; - isinputRecordArrayOptional: boolean; - isinputArrayNullable: boolean; - isinputArrayOptional: boolean; - isinputNullableArray: boolean; -} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts index 1f15af55903..2d55200a43c 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/ai-panel/utils.ts @@ -16,22 +16,19 @@ * under the License. */ -import { FunctionDefinition, ModulePart, STKindChecker } from "@wso2/syntax-tree"; -import { FormField, Attachment, AttachmentStatus, keywords, DiagnosticEntry, DataMapperModelResponse, ExpandedDMModel, MappingElement, Mapping, IOType, InputCategory, TypeKind, FileChanges } from "@wso2/ballerina-core"; -import { Position, Range, Uri, window, workspace, WorkspaceEdit } from 'vscode'; +import { Attachment, AttachmentStatus, DiagnosticEntry, DataMapperModelResponse, Mapping, FileChanges, DMModel, SourceFile, repairCodeRequest} from "@wso2/ballerina-core"; +import { Position, Range, Uri, workspace, WorkspaceEdit } from 'vscode'; import path from "path"; import * as fs from 'fs'; -import { BACKEND_URL } from "../../features/ai/utils"; import { AIChatError } from "./utils/errors"; -import { DatamapperResponse } from "../../../src/features/ai/service/datamapper/types"; -import { DataMapperRequest, DataMapperResponse, FileData, processDataMapperInput } from "../../../src/features/ai/service/datamapper/context_api"; +import { processDataMapperInput } from "../../../src/features/ai/service/datamapper/context_api"; +import { DataMapperRequest, DataMapperResponse, FileData } from "../../../src/features/ai/service/datamapper/types"; import { getAskResponse } from "../../../src/features/ai/service/ask/ask"; -import { ArrayEnumUnionType, ArrayRecordType, MetadataType, NUMERIC_AND_BOOLEAN_TYPES, Operation, PrimitiveType, RecordType, UnionEnumIntersectionType } from "./constants"; -import { FieldMetadata, IntermediateMapping, MappingData, MappingFileRecord, ParameterDefinitions, ParameterField, ParameterMetadata, ProcessCombinedKeyResult, ProcessParentKeyResult, RecordDefinitonObject } from "./types"; -import { generateAutoMappings } from "../../../src/features/ai/service/datamapper/datamapper"; +import { MappingFileRecord} from "./types"; +import { generateAutoMappings, generateRepairCode } from "../../../src/features/ai/service/datamapper/datamapper"; import { ArtifactNotificationHandler, ArtifactsUpdated } from "../../utils/project-artifacts-handler"; -import { writeFileSync } from "fs"; +import { CopilotEventHandler } from "../../../src/features/ai/service/event"; // const BACKEND_BASE_URL = BACKEND_URL.replace(/\/v2\.0$/, ""); //TODO: Temp workaround as custom domain seem to block file uploads @@ -39,2129 +36,45 @@ const CONTEXT_UPLOAD_URL_V1 = "https://e95488c8-8511-4882-967f-ec3ae2a0f86f-prod // const CONTEXT_UPLOAD_URL_V1 = BACKEND_BASE_URL + "/context-api/v1.0"; // const ASK_API_URL_V1 = BACKEND_BASE_URL + "/ask-api/v1.0"; -export const REQUEST_TIMEOUT = 2000000; - -let abortController = new AbortController(); - -export class AIPanelAbortController { - private static instance: AIPanelAbortController; - private abortController: AbortController; - - private constructor() { - this.abortController = new AbortController(); - } - - public static getInstance(): AIPanelAbortController { - if (!AIPanelAbortController.instance) { - AIPanelAbortController.instance = new AIPanelAbortController(); - } - return AIPanelAbortController.instance; - } - - public get signal(): AbortSignal { - return this.abortController.signal; - } - - public abort(): void { - this.abortController.abort(); - // Create a new AbortController for the next operation - this.abortController = new AbortController(); - } -} - -export function handleStop() { - AIPanelAbortController.getInstance().abort(); -} - -const isPrimitiveType = (type: string): boolean => { - return Object.values(PrimitiveType).includes(type as PrimitiveType); -}; - -const isUnionEnumIntersectionType = (type: string): boolean => { - return Object.values(UnionEnumIntersectionType).includes(type as UnionEnumIntersectionType); -}; - -const isRecordType = (type: string): boolean => { - return Object.values(RecordType).includes(type as RecordType); -}; - -const isArrayRecord = (type: string): boolean => { - return Object.values(ArrayRecordType).includes(type as ArrayRecordType); -}; - -const isArrayEnumUnion = (type: string): boolean => { - return Object.values(ArrayEnumUnionType).includes(type as ArrayEnumUnionType); -}; - -function isMappingData( - obj: MappingData | IntermediateMapping -): obj is MappingData { - return ( - typeof obj === "object" && - obj !== null && - typeof obj.operation === "string" && - Array.isArray(obj.parameters) && - typeof obj.targetType === "string" - ); -} - -export async function generateBallerinaCode( - response: IntermediateMapping, - parameterDefinitions: ParameterMetadata, - nestedKey: string = "", - nestedKeyArray: string[] -): Promise> { - let recordFields: Record = {}; - if (isMappingData(response)) { - return await processMappingData( - response, - parameterDefinitions, - nestedKey, - nestedKeyArray - ); - } - - const objectKeys = Object.keys(response); - for (const key of objectKeys) { - const subRecord = response[key]; - if (isMappingData(subRecord)) { - const nestedResponseRecord = await processMappingData( - subRecord, - parameterDefinitions, - key, - nestedKeyArray - ); - Object.assign(recordFields, nestedResponseRecord); - } else { - nestedKeyArray.push(key); - const responseRecord = await generateBallerinaCode( - subRecord as IntermediateMapping, - parameterDefinitions, - key, - nestedKeyArray - ); - const hasValidFields = Object.values(responseRecord).some(value => !isEmptyValue(value)); - if (hasValidFields) { - const recordFieldDetails = await handleRecordArrays( - key, - nestedKey, - responseRecord, - parameterDefinitions, - nestedKeyArray - ); - Object.assign(recordFields, recordFieldDetails); - } - nestedKeyArray.pop(); - } - } - return recordFields; -} - -async function processMappingData( - mappingData: MappingData, - parameterDefinitions: ParameterMetadata, - nestedKey: string, - nestedKeyArray: string[] -): Promise> { - const parameters = mappingData.parameters; - const paths = parameters[0].split("."); - let path: string = ""; - - try { - path = await getMappingString( - mappingData, - parameterDefinitions, - nestedKey, - nestedKeyArray - ); - } catch (error) { - console.log(`Error in processMapping:`, error); - throw new Error(`Failed to process mappings`); - } - - if (typeof path !== "string" || path === "") { - return {}; - } - - const recordFieldName = paths.length === 1 ? nestedKey : (nestedKey || paths[1]); - return { [recordFieldName]: path }; -} - -// Get union types from the combination of union types -function getUnionTypes(types: string[]) { - const result = new Set(); // Use a Set to avoid duplicates - const len = types.length; - - // Generate combinations of at least two elements - for (let i = 2; i <= len; i++) { - generateCombinations(types, i, 0, [], result); - } - - return Array.from(result); -} - -// Generate union combination -function generateCombinations(arr: string[], size: number, start: number, current: string[], result: Set) { - if (current.length === size) { - result.add(current.slice().sort().join("|")); // Sort to ensure order consistency - return; - } - for (let i = start; i < arr.length; i++) { - generateCombinations(arr, size, i + 1, [...current, arr[i]], result); - } -} - -// Function to check if a given type is a valid union type (order-independent) -function isUnionType(type: string): boolean { - const sortedType = type.split("|").sort().join("|"); // Sort input type for consistency - const validUnionTypes = getUnionTypes(Object.values(PrimitiveType)); // Get valid union types - return validUnionTypes.includes(sortedType); // Check against Set -} - -async function getMappingString(mapping: MappingData, parameterDefinitions: ParameterMetadata, nestedKey: string, nestedKeyArray: string[]): Promise { - let operation: string = mapping.operation; - let targetType: string = mapping.targetType; - let parameters: string[] = mapping.parameters; - - let path: string = ""; - let modifiedPaths: string[] = []; - let inputTypeName: string = ""; - let inputType: string = ""; - let baseType: string = ""; - let baseTargetType: string = ""; - let outputType: string = ""; - let baseOutputType: string = ""; - let baseInputType: string = ""; - let modifiedInput: FieldMetadata; - let outputObject: FieldMetadata; - let isInputNullableArray: boolean; - let isOutputNullableArray: boolean; - - let paths = parameters[0].split("."); - let recordObjectName: string = paths[0]; - - // Retrieve inputType - if (paths.length > 2) { - modifiedInput = await getNestedType(paths.slice(1), parameterDefinitions.inputMetadata[recordObjectName]); - } else if (paths.length === 2) { - modifiedInput = parameterDefinitions.inputMetadata[recordObjectName]?.["fields"]?.[paths[1]] || parameterDefinitions.inputMetadata[recordObjectName + 'Item']?.["fields"]?.[paths[1]]; - } else { - modifiedInput = parameterDefinitions.configurables[recordObjectName] || - parameterDefinitions.constants[recordObjectName] || - parameterDefinitions.variables[recordObjectName] || parameterDefinitions.inputMetadata[recordObjectName].fields[paths[0]]; - } - - // Resolve output metadata - if (nestedKeyArray.length > 0) { - outputObject = await getMetadata(parameterDefinitions, nestedKeyArray, nestedKey, MetadataType.OUTPUT_METADATA); - } else if (parameterDefinitions.outputMetadata.hasOwnProperty("fields") || !parameterDefinitions.outputMetadata[nestedKey]) { - throw new Error(`Invalid or missing metadata for nestedKey: ${nestedKey}.`); - } else { - outputObject = parameterDefinitions.outputMetadata[nestedKey]; - } - - baseTargetType = targetType.replace(/\|\(\)$/, ""); - - inputTypeName = modifiedInput.typeName; - baseType = inputTypeName.replace(/\|\(\)$/, ""); - - inputType = modifiedInput.type; - baseInputType = inputType.replace(/\|\(\)$/, ""); - - outputType = outputObject.type; - baseOutputType = outputType.replace(/\|\(\)$/, ""); - - if (operation === Operation.DIRECT) { - if (parameters.length > 1) { - return ""; - } - // Helper function to check if type contains [] - const hasArrayNotation = (type: string) => type.includes("[]"); - if (isRecordType(baseType)) { - // Both baseType and baseTargetType either contain "[]" or do not - if (!(hasArrayNotation(baseType) === hasArrayNotation(baseTargetType)) && !(baseTargetType === "int")) { - return ""; - } - } else if (isUnionEnumIntersectionType(baseOutputType)) { - // Both baseInputType and baseOutputType either contain "[]" or do not - if (!(hasArrayNotation(baseInputType) === hasArrayNotation(baseOutputType))) { - return ""; - } - } - modifiedPaths = await accessMetadata( - paths, - parameterDefinitions, - outputObject, - baseType, - baseTargetType, - operation - ); - for (let index = 0; index < modifiedPaths.length; index++) { - if (index > 0 && modifiedPaths[index] === modifiedPaths[index - 1]) { - continue; - } - if (path !== "") { - path = `${path}.`; - } - path = `${path}${modifiedPaths[index]}`; - } - // Add split operation if inputType is "string" and targetType is "string[]" - if (baseType === PrimitiveType.STRING && baseTargetType === "string[]") { - return `re \`,\`.split(${path})`; - } - - // Add length operation if inputType is "record[]" and targetType is "int" - if (isArrayRecord(baseType) && baseTargetType === PrimitiveType.INT) { - return `(${path}).length()`; - } - - // Type conversion logic - const stringConversions: Record = { - int: "check int:fromString", - float: "check float:fromString", - decimal: "check decimal:fromString", - boolean: "check boolean:fromString" - }; - - const numericConversions: { [key: string]: Record } = { - float: { - int: `check (${path}).ensureType()`, - decimal: `check (${path}).ensureType()` - }, - int: { - float: `check (${path}).ensureType()`, - decimal: `check (${path}).ensureType()` - }, - decimal: { - int: `check (${path}).ensureType()`, - float: `check (${path}).ensureType()` - } - }; - - function convertUnionTypes(inputType: string, targetType: string, variablePath: string): string { - const inputTypes = inputType.split("|").filter(isPrimitiveType); - const isStringInput = inputTypes.includes(PrimitiveType.STRING); - const isNumericOrBooleanTarget = NUMERIC_AND_BOOLEAN_TYPES.includes(targetType as PrimitiveType); - - if (targetType === PrimitiveType.STRING) { - return `(${variablePath}).toString()`; - } - - if (isStringInput && isNumericOrBooleanTarget) { - return `(${variablePath}) is string ? check ${targetType}:fromString((${variablePath}).toString()) : check (${variablePath}).ensureType()`; - } - - if (isNumericOrBooleanTarget) { - return `check (${variablePath}).ensureType()`; - } - - return variablePath; - } - - isOutputNullableArray = outputObject.nullableArray; - isInputNullableArray = modifiedInput.nullableArray; - - const isStringInput = ["string", "string|()"].includes(inputTypeName); - const isStringTarget = ["string", "string|()"].includes(targetType); - if (isPrimitiveType(baseTargetType) && isPrimitiveType(baseType)) { - if (inputTypeName === targetType || inputTypeName === baseTargetType) { - path = `${path}`; - } else if (isStringInput) { - const conversion = stringConversions[baseTargetType]; - if (conversion) { - path = `${conversion}(${path})`; - } else if (!isStringTarget) { - return ""; - } - } else if (isStringTarget) { - path = `(${path}).toString()`; - } else { - const conversion = numericConversions[inputTypeName]?.[targetType]; - if (conversion && baseTargetType !== PrimitiveType.BOOLEAN) { - path = conversion; - } else if (baseType === baseTargetType) { - path = `${path}`; - } else if ((targetType.includes("|()") && inputTypeName !== baseTargetType) || inputTypeName.includes("|()") && baseTargetType !== PrimitiveType.BOOLEAN) { - path = `check (${path}).ensureType()`; - } else { - return ""; - } - } - } else if (isUnionEnumIntersectionType(inputType)) { - if (isUnionType(baseType)) { - path = convertUnionTypes(baseType, baseTargetType, path); - } else { - path = `${path}`; - if (isInputNullableArray && !isOutputNullableArray) { - path = `check (${path}).cloneWithType()`; - } - } - } - } else if (operation === Operation.LENGTH) { - if (parameters.length > 1) { - return ""; - } - modifiedPaths = await accessMetadata( - paths, - parameterDefinitions, - outputObject, - baseType, - baseTargetType, - operation - ); - for (let index = 0; index < modifiedPaths.length; index++) { - if (path !== "") { - path = `${path}.`; - } - path = `${path}${modifiedPaths[index]}`; - } - path = `(${path}).length()`; - } else if (operation === Operation.SPLIT) { - if (parameters.length > 2) { - return ""; - } - modifiedPaths = await accessMetadata( - paths, - parameterDefinitions, - outputObject, - baseType, - baseTargetType, - operation - ); - for (let index = 0; index < modifiedPaths.length; index++) { - if (path !== "") { - path = `${path}.`; - } - path = `${path}${modifiedPaths[index]}`; - } - path = `re \`${parameters[1]}\`.split(${path})`; - } - return path; -} - -//Define interfaces for the visitor pattern -interface TypeInfoVisitor { - visitField(field: FormField, context: VisitorContext): void; - visitMember(member: any, context: VisitorContext): { typeName: string, member: any }; - visitRecord(field: FormField, context: VisitorContext): void; - visitUnionOrIntersection(field: FormField, context: VisitorContext): void; - visitArray(field: FormField, context: VisitorContext): void; - visitEnum(field: FormField, context: VisitorContext): void; - visitPrimitive(field: FormField, context: VisitorContext): void; -} - -//Context object to maintain state during traversal -interface VisitorContext { - recordFields: { [key: string]: any }; - recordFieldsMetadata: { [key: string]: any }; - memberRecordFields: { [key: string]: any }; - memberFieldsMetadata: { [key: string]: any }; - fieldMetadata: { [key: string]: any }; - isNill: boolean; - isNullable: boolean; - isArray: boolean; - isRecord: boolean; - isSimple: boolean; - isUnion: boolean; - isArrayNullable: boolean; - isRecordNullable: boolean; - memberName: string; -} - -// Implementation of the visitor -class TypeInfoVisitorImpl implements TypeInfoVisitor { - constructor() { } - - visitField(field: FormField, context: VisitorContext): void { - // Reset state for each field - this.resetContext(context); - - const typeName = field.typeName; - - if (!typeName) { - this.handleTypeInfo(field, context); - return; - } - - switch (typeName) { - case "record": - this.visitRecord(field, context); - break; - case "union": - case "intersection": - this.visitUnionOrIntersection(field, context); - break; - case "array": - this.visitArray(field, context); - break; - case "enum": - this.visitEnum(field, context); - break; - default: - this.visitPrimitive(field, context); - break; - } - } - - visitMember(member: any, context: VisitorContext): { typeName: string, member: any } { - let typeName: string; - if (member.typeName === "record" && member.fields) { - typeName = this.handleRecordMember(member, context); - } else if (member.typeName === "array") { - const result = this.handleArrayMember(member, context); - typeName = result.typeName; - member = result.member; - } else if (["union", "intersection", "enum"].includes(member.typeName)) { - typeName = this.handleCompositeMember(member, context); - } else if (member.typeName === "()") { - typeName = this.handleNullMember(member, context); - } else { - typeName = this.handleSimpleMember(member, context); - } - return { typeName, member }; - } - - visitRecord(field: FormField, context: VisitorContext): void { - const temporaryRecord = navigateTypeInfo(field.fields, false); - context.isRecord = true; - - const fieldName = getBalRecFieldName(field.name); - context.recordFields[fieldName] = temporaryRecord.recordFields; - context.recordFieldsMetadata[fieldName] = { - nullable: context.isNill, - optional: field.optional, - type: "record", - typeInstance: fieldName, - typeName: field.typeName, - fields: temporaryRecord.recordFieldsMetadata - }; - } - - visitUnionOrIntersection(field: FormField, context: VisitorContext): void { - let memberTypeNames: string[] = []; - let resolvedTypeName: string = ""; - - // Check for record fields in union members and handle appropriately - this.processUnionMembers(field.members, context); - - for (const member of field.members) { - const result = this.visitMember(member, context); - memberTypeNames.push(result.typeName); - if (Object.keys(result.member).length === 0) { - field.members = []; - break; - } - } - - if (field.members.length === 0) { - context.memberRecordFields = {}; - context.memberFieldsMetadata = {}; - return; - } - - resolvedTypeName = this.getResolvedTypeName(field.typeName, memberTypeNames); - - this.buildFieldMetadata(field, resolvedTypeName, context); - this.setFieldAndMetadata(field, resolvedTypeName, context); - } - - visitArray(field: FormField, context: VisitorContext): void { - if (field.memberType.hasOwnProperty("members") && - ["union", "intersection", "enum"].includes(field.memberType.typeName)) { - - // Handle array with union/intersection/enum member type - this.processUnionMembers(field.memberType.members, context); - - if (field.memberType.members.length === 0) { - context.memberRecordFields = {}; - context.memberFieldsMetadata = {}; - return; - } - - this.handleArrayWithCompositeType(field, context); - } else if (field.memberType.hasOwnProperty("fields") && field.memberType.typeName === "record") { - this.handleArrayWithRecordType(field, context); - } else { - this.handleSimpleArray(field, context); - } - } - - visitEnum(field: FormField, context: VisitorContext): void { - let memberTypeNames: string[] = []; - - for (const member of field.members) { - const result = this.visitMember(member, context); - memberTypeNames.push(result.typeName); - } - - const resolvedTypeName = memberTypeNames.join("|"); - - this.buildFieldMetadata(field, resolvedTypeName, context); - this.setFieldAndMetadata(field, resolvedTypeName, context); - } - - visitPrimitive(field: FormField, context: VisitorContext): void { - const typeName = field.typeName; - - if (field.hasOwnProperty("name")) { - const fieldName = getBalRecFieldName(field.name); - context.recordFields[fieldName] = { type: typeName, comment: "" }; - context.recordFieldsMetadata[fieldName] = { - typeName: typeName, - type: typeName, - typeInstance: fieldName, - nullable: context.isNill, - optional: field.optional - }; - } else { - context.recordFields[typeName] = { type: "string", comment: "" }; - context.recordFieldsMetadata[typeName] = { - typeName: typeName, - type: "string", - typeInstance: typeName, - nullable: context.isNill, - optional: field.optional - }; - } - } - - private handleTypeInfo(field: FormField, context: VisitorContext): void { - const fieldName = getBalRecFieldName(field.name); - context.recordFields[fieldName] = { type: field.typeInfo.name, comment: "" }; - context.recordFieldsMetadata[fieldName] = { - typeName: field.typeInfo.name, - type: field.typeInfo.name, - typeInstance: fieldName, - nullable: context.isNill, - optional: field.optional - }; - } - - private handleRecordMember(member: any, context: VisitorContext): string { - const temporaryRecord = navigateTypeInfo(member.fields, false); - context.isRecord = true; - let memberName: string; - - if (context.isUnion && member.hasOwnProperty("name")) { - memberName = member.name; - const fieldName = getBalRecFieldName(memberName); - context.memberRecordFields[fieldName] = (temporaryRecord as RecordDefinitonObject).recordFields; - context.memberFieldsMetadata[fieldName] = { - nullable: context.isNill, - optional: member.optional, - type: "record", - typeInstance: fieldName, - typeName: member.typeName, - fields: (temporaryRecord as RecordDefinitonObject).recordFieldsMetadata - }; - } else { - memberName = "record"; - context.memberRecordFields = { - ...context.memberRecordFields, - ...(temporaryRecord as RecordDefinitonObject).recordFields - }; - context.memberFieldsMetadata = { - ...context.memberFieldsMetadata, - ...((temporaryRecord as RecordDefinitonObject).recordFieldsMetadata) - }; - } - - return memberName; - } - - private handleArrayMember(member: any, context: VisitorContext): { typeName: string, member: any } { - context.isArray = true; - let memberName: string; - - if (member.memberType.hasOwnProperty("fields") && member.memberType.typeName === "record") { - const temporaryRecord = navigateTypeInfo(member.memberType.fields, false); - memberName = `${member.memberType.typeName}[]`; - context.memberRecordFields = { - ...context.memberRecordFields, - ...(temporaryRecord as RecordDefinitonObject).recordFields - }; - context.memberFieldsMetadata = { - ...context.memberFieldsMetadata, - ...((temporaryRecord as RecordDefinitonObject).recordFieldsMetadata) - }; - } else if (member.memberType.hasOwnProperty("members") && - ["union", "intersection", "enum"].includes(member.memberType.typeName)) { - - // Process union members to handle records appropriately - this.processUnionMembers(member.memberType.members, context); - - if (member.memberType.members.length === 0) { - memberName = ""; - member = []; - } else { - memberName = this.handleArrayWithCompositeTypeMember(member, context); - } - } else if (member.memberType.hasOwnProperty("typeInfo")) { - if (member.memberType.hasOwnProperty("name") && !member.memberType.hasOwnProperty("typeName")) { - memberName = `${member.memberType.name}[]`; - } else { - memberName = "record[]"; - } - } else { - memberName = `${member.memberType.typeName}[]`; - } - - return { typeName: memberName, member }; - } - - private handleArrayWithCompositeTypeMember(member: any, context: VisitorContext): string { - let memberTypes: string[] = []; - const members = member.memberType.members; - - this.determineIfUnion(members, context); - - for (const innerMember of members) { - const result = this.visitMember(innerMember, context); - memberTypes.push(result.typeName); - } - - context.isSimple = false; - - if (member.memberType.typeName === "intersection") { - return `(${memberTypes.join("&")})[]`; - } else { - return `(${memberTypes.join("|")})[]`; - } - } - - private handleCompositeMember(member: any, context: VisitorContext): string { - let memberTypeNames: string[] = []; - - for (const innerMember of member.members) { - const result = this.visitMember(innerMember, context); - memberTypeNames.push(result.typeName); - } - - if (member.typeName === "intersection") { - return `${memberTypeNames.join("&")}`; - } else { - return `${memberTypeNames.join("|")}`; - } - } - - private handleNullMember(member: any, context: VisitorContext): string { - const memberName = member.typeName; - - if (context.isArray) { - context.isArrayNullable = true; - } - if (context.isRecord) { - context.isRecordNullable = true; - } - if (context.isSimple) { - context.isNullable = true; - } - - return memberName; - } - - private handleSimpleMember(member: any, context: VisitorContext): string { - context.isSimple = true; - let memberName: string; - - if (member.hasOwnProperty("typeName")) { - memberName = member.typeName; - - if (member.hasOwnProperty("name") && !member.hasOwnProperty("id")) { - this.addNamedSimpleMember(member, memberName, context); - } else { - this.addUnnamedSimpleMember(memberName, member, context); - } - } else { - memberName = member.name; - } - - return memberName; - } - - private addNamedSimpleMember(member: any, memberName: string, context: VisitorContext): void { - const fieldName = getBalRecFieldName(member.name); - context.memberRecordFields = { - ...context.memberRecordFields, - [fieldName]: { - type: memberName, - comment: "" - } - }; - context.memberFieldsMetadata = { - ...context.memberFieldsMetadata, - [fieldName]: { - typeName: memberName, - type: memberName, - typeInstance: fieldName, - nullable: context.isNill, - optional: member.optional - } - }; - } - - private addUnnamedSimpleMember(memberName: string, member: any, context: VisitorContext): void { - // Check if typeName is not one of the BasicTypes types - const BasicTypes = ["int", "string", "float", "boolean", "decimal", "readonly"]; - if (!BasicTypes.includes(memberName)) { - const fieldName = getBalRecFieldName(memberName); - context.memberFieldsMetadata = { - ...context.memberFieldsMetadata, - [fieldName]: { - typeName: fieldName, - type: fieldName, - typeInstance: fieldName, - nullable: context.isNill, - optional: member.optional - } - }; - } - } - - private handleArrayWithCompositeType(field: FormField, context: VisitorContext): void { - let memberTypeNames: string[] = []; - - for (const member of field.memberType.members) { - const result = this.visitMember(member, context); - memberTypeNames.push(result.typeName); - } - - context.isArray = true; - let resolvedTypeName: string = ""; - - if (field.memberType.typeName === "intersection") { - resolvedTypeName = `${memberTypeNames.join("&")}`; - } else { - resolvedTypeName = `${memberTypeNames.join("|")}`; - } - - const fieldName = getBalRecFieldName(field.name); - context.recordFields[fieldName] = Object.keys(context.memberRecordFields).length > 0 - ? context.memberRecordFields - : { type: `(${resolvedTypeName})[]`, comment: "" }; - - this.buildArrayFieldMetadata(field, resolvedTypeName, context); - } - - private handleArrayWithRecordType(field: FormField, context: VisitorContext): void { - const temporaryRecord = navigateTypeInfo(field.memberType.fields, false); - const fieldName = getBalRecFieldName(field.name); - context.recordFields[fieldName] = (temporaryRecord as RecordDefinitonObject).recordFields; - context.isArray = true; - context.isRecord = true; - - context.fieldMetadata = { - optional: field.optional, - typeName: "record[]", - type: "record[]", - typeInstance: fieldName, - fields: (temporaryRecord as RecordDefinitonObject).recordFieldsMetadata - }; - - this.applyNullabilityToFieldMetadata(context); - context.recordFieldsMetadata[field.name] = context.fieldMetadata; - } - - private handleSimpleArray(field: FormField, context: VisitorContext): void { - let typeName: string; - - if (field.memberType.hasOwnProperty("typeInfo")) { - typeName = "record[]"; - } else { - typeName = `${field.memberType.typeName}[]`; - } - - if (field.memberType.members && field.memberType.members.length === 0) { - context.memberRecordFields = {}; - context.memberFieldsMetadata = {}; - } else { - const fieldName = getBalRecFieldName(field.name); - context.recordFields[fieldName] = { type: typeName, comment: "" }; - context.recordFieldsMetadata[fieldName] = { - typeName: typeName, - type: typeName, - typeInstance: fieldName, - nullable: context.isNill, - optional: field.optional - }; - } - } - - private processUnionMembers(members: any[], context: VisitorContext): void { - this.determineIfUnion(members, context); - - if (members.length > 2) { - // If at least one member has fields, remove that field - for (let i = members.length - 1; i >= 0; i--) { - if (members[i].fields) { - members.length = 0; - break; - } - } - } else if (members.length === 2) { - // If one member is "()" proceed normally, else if one member has fields, remove it - for (let i = members.length - 1; i >= 0; i--) { - if (members[i].fields && context.isUnion) { - members.length = 0; - break; - } - } - } - } - - private determineIfUnion(members: any[], context: VisitorContext): void { - if (members.length > 2) { - context.isUnion = members.some((member) => member.typeName === "()"); - } else if (members.length === 2) { - context.isUnion = !members.some(member => member.typeName === "()" || member.typeName === "readonly"); - } else { - context.isUnion = false; - } - } - - private getResolvedTypeName(typeName: string, memberTypeNames: string[]): string { - if (typeName === "intersection") { - return `${memberTypeNames.join("&")}`; - } else { - return `${memberTypeNames.join("|")}`; - } - } - - private buildFieldMetadata(field: FormField, resolvedTypeName: string, context: VisitorContext): void { - context.fieldMetadata = { - optional: field.optional, - typeName: resolvedTypeName, - type: context.isArray - ? (context.isArrayNullable - ? `${field.typeName}[]|()` : `${field.typeName}[]`) - : field.typeName, - typeInstance: field.name, - ...(Object.keys(context.memberFieldsMetadata).length > 0 && { members: context.memberFieldsMetadata }) - }; - - this.applyNullabilityToFieldMetadata(context); - } - - private buildArrayFieldMetadata(field: FormField, resolvedTypeName: string, context: VisitorContext): void { - context.fieldMetadata = { - optional: field.optional, - typeName: `(${resolvedTypeName})[]`, - type: `${field.memberType.typeName}[]`, - typeInstance: field.name, - ...(Object.keys(context.memberFieldsMetadata).length > 0 && { members: context.memberFieldsMetadata }) - }; - - this.applyNullabilityToFieldMetadata(context); - const fieldName = getBalRecFieldName(field.name); - context.recordFieldsMetadata[fieldName] = context.fieldMetadata; - } - - private applyNullabilityToFieldMetadata(context: VisitorContext): void { - // Apply nullableArray property - if (context.isArray) { - if (context.isRecord) { - context.fieldMetadata.nullableArray = context.isRecordNullable; - } else { - context.fieldMetadata.nullableArray = context.isNullable; - } - } - - // Apply nullable property - if (context.isArray) { - context.fieldMetadata.nullable = context.isArrayNullable; - } else if (context.isRecord) { - context.fieldMetadata.nullable = context.isRecordNullable; - } else if (context.isSimple) { - context.fieldMetadata.nullable = context.isNullable; - } - } - - private setFieldAndMetadata(field: FormField, resolvedTypeName: string, context: VisitorContext): void { - const fieldName = getBalRecFieldName(field.name); - context.recordFields[fieldName] = Object.keys(context.memberRecordFields).length > 0 - ? context.memberRecordFields - : { type: resolvedTypeName, comment: "" }; - context.recordFieldsMetadata[fieldName] = context.fieldMetadata; - } - - private resetContext(context: VisitorContext): void { - context.memberRecordFields = {}; - context.memberFieldsMetadata = {}; - context.fieldMetadata = {}; - context.isArrayNullable = false; - context.isRecordNullable = false; - context.isNullable = false; - context.isArray = false; - context.isRecord = false; - context.isSimple = false; - context.isUnion = false; - } -} - -export function navigateTypeInfo( - typeInfos: FormField[], - isNill: boolean -): RecordDefinitonObject { - const context: VisitorContext = { - recordFields: {}, - recordFieldsMetadata: {}, - memberRecordFields: {}, - memberFieldsMetadata: {}, - fieldMetadata: {}, - isNill, - isNullable: false, - isArray: false, - memberName: '', - isRecord: false, - isArrayNullable: false, - isRecordNullable: false, - isSimple: false, - isUnion: false - }; - - const visitor = new TypeInfoVisitorImpl(); - - for (const field of typeInfos) { - visitor.visitField(field, context); - } - return { - recordFields: context.recordFields, - recordFieldsMetadata: context.recordFieldsMetadata - }; -} - -export function getBalRecFieldName(fieldName: string) { - return keywords.includes(fieldName) ? `'${fieldName}` : fieldName; -} - -async function getDatamapperCode(dataMapperResponse: DataMapperModelResponse, parameterDefinitions: ParameterMetadata): Promise> { - let nestedKeyArray: string[] = []; - try { - let response: DatamapperResponse = await sendDatamapperRequest(dataMapperResponse); - let intermediateMapping = response.mappings; - let finalCode = await generateBallerinaCode(intermediateMapping, parameterDefinitions, "", nestedKeyArray); - return finalCode; - } catch (error) { - console.error(error); - throw error; - } -} - -export async function constructRecord(codeObject: object): Promise<{ recordString: string; isCheckError: boolean; }> { - let recordString: string = ""; - let isCheckError: boolean = false; - let objectKeys = Object.keys(codeObject); - for (let index = 0; index < objectKeys.length; index++) { - let key = objectKeys[index]; - let mapping = codeObject[key]; - if (typeof mapping === "string") { - if (mapping.includes("check ")) { - isCheckError = true; - } - if (recordString !== "") { - recordString += ",\n"; - } - recordString += `${key}:${mapping}`; - } else { - let subRecordResult = await constructRecord(mapping); - if (subRecordResult.isCheckError) { - isCheckError = true; - } - if (recordString !== "") { - recordString += ",\n"; - } - recordString += `${key}:${subRecordResult.recordString}`; - } - } - return { recordString: `{\n${recordString}}`, isCheckError }; -} - -export async function getFunction(modulePart: ModulePart, functionName: string) { - const fns = modulePart.members.filter((mem) => - STKindChecker.isFunctionDefinition(mem) - ) as FunctionDefinition[]; - - return fns.find(mem => mem.functionName.value === functionName); -} - -export function notifyNoGeneratedMappings() { - const msg = 'No automatic mappings detected. Try manual mapping for precise connections.'; - window.showInformationMessage(msg); -} - -async function sendDatamapperRequest(dataMapperResponse: DataMapperModelResponse): Promise { - const response: DatamapperResponse = await generateAutoMappings(dataMapperResponse); - return response; -} - -export async function searchDocumentation(message: string): Promise { - const resp = await getAskResponse(message,); - const finalResponse = resp.content.replace(/[\s\S]*?<\/thinking>/g, ''); - const referenceSources = resp.references; - let responseContent: string; - if (referenceSources.length > 0) { - responseContent = `${finalResponse} \nreference sources: \n${referenceSources.join(' \n')}`; - } else { - responseContent = finalResponse; - } - - return responseContent; -} - -export async function filterDocumentation(resp: Response): Promise { - let responseContent: string; - if (resp.status == 200 || resp.status == 201) { - const data = (await resp.json()) as any; - console.log("data", data.response); - const finalResponse = await (data.response.content).replace(/[\s\S]*?<\/thinking>/g, ''); - const referenceSources = data.response.references; - if (referenceSources.length > 0) { - responseContent = `${finalResponse} \nreference sources: \n${referenceSources.join(' \n')}`; - } else { - responseContent = finalResponse; - } - return responseContent; - } - throw new Error(AIChatError.UNKNOWN_CONNECTION_ERROR); -} - -async function attatchmentToFileData(file: Attachment): Promise { - return { - fileName: file.name, - content: file.content - }; -} - -export async function mappingFileParameterDefinitions(file: Attachment, parameterDefinitions: ParameterMetadata): Promise { - if (!file) { return parameterDefinitions; } - const fileData = await attatchmentToFileData(file); - const params: DataMapperRequest = { - file: fileData, - processType: "mapping_instruction" - }; - const resp: DataMapperResponse = await processDataMapperInput(params); - let mappingFile: MappingFileRecord = JSON.parse(resp.fileContent) as MappingFileRecord; - - return { - ...parameterDefinitions, - mapping_fields: mappingFile.mapping_fields - }; -} - -export async function mappingFileDataMapperModel(file: Attachment, dataMapperResponse: DataMapperModelResponse): Promise { - if (!file) { return dataMapperResponse; } - const fileData = await attatchmentToFileData(file); - const params: DataMapperRequest = { - file: fileData, - processType: "mapping_instruction" - }; - const resp: DataMapperResponse = await processDataMapperInput(params); - let mappingFile: MappingFileRecord = JSON.parse(resp.fileContent) as MappingFileRecord; - - return { - ...dataMapperResponse, - mappingsModel: { - ...dataMapperResponse.mappingsModel, - mapping_fields: mappingFile.mapping_fields - } - }; -} - -export async function typesFileParameterDefinitions(file: Attachment): Promise { - if (!file) { throw new Error("File is undefined"); } - - const fileData = await attatchmentToFileData(file); - const params: DataMapperRequest = { - file: fileData, - processType: "records" - }; - const resp: DataMapperResponse = await processDataMapperInput(params); - return resp.fileContent; -} - -export function isErrorCode(error: any): boolean { - return error.hasOwnProperty("code") && error.hasOwnProperty("message"); -} - -async function accessMetadata( - paths: string[], - parameterDefinitions: ParameterMetadata, - outputObject: FieldMetadata, - baseType: string, - baseTargetType: string, - operation: string -): Promise { - let newPath = [...paths]; - let isUsingDefault = false; - let isUsingArray = false; - let defaultValue: string; - - baseTargetType = outputObject.typeName.replace(/\|\(\)$/, ""); - - for (let index = 1; index < paths.length; index++) { - const pathIndex = paths[index]; - let inputObject = await getMetadata(parameterDefinitions, paths, pathIndex, MetadataType.INPUT_METADATA); - - if (inputObject.hasOwnProperty("members") || inputObject.hasOwnProperty("fields") || operation === Operation.LENGTH) { - if (!["enum", "enum|()"].includes(inputObject.type)) { - isUsingDefault = false; - } - if (isArrayRecord(inputObject.typeName) || isArrayEnumUnion(inputObject.type)) { - isUsingArray = inputObject.nullableArray; - } - if (isUsingArray && isRecordType(inputObject.typeName)) { - newPath[index] = `${paths[index]}?`; - } - if (inputObject.nullable || inputObject.optional) { - // Handle record types - if (isRecordType(inputObject.typeName)) { - if (!inputObject.typeName.includes("[]")) { - if (index !== (paths.length - 1)) { - newPath[index] = `${paths[index]}?`; - isUsingDefault = true; - } - } - if (inputObject.typeName.includes("[]") && operation === Operation.LENGTH) { - let lastInputObject = await getMetadata(parameterDefinitions, paths, paths[paths.length - 1], MetadataType.INPUT_METADATA); - let inputDataType = lastInputObject.typeName - // remove |() from union types - .replace(/\|\(\)/g, "") - // remove wrapping parentheses before [] - .replace(/^\((.*)\)\[\]$/, "$1[]") - // remove single wrapping parentheses (non-array cases) - .replace(/^\((.*)\)$/, "$1"); - defaultValue = await getDefaultValue(inputDataType); - newPath[paths.length - 1] = `${paths[paths.length - 1]}?:${defaultValue}`; - } - if (inputObject.nullable && inputObject.optional) { - newPath[index - 1] = `${paths[index - 1]}?`; - } - // Handle enum, union, and intersection types - } else if (isUnionEnumIntersectionType(inputObject.type)) { - if (inputObject.nullable && inputObject.optional) { - newPath[index - 1] = `${paths[index - 1]}?`; - } - if (inputObject.type.includes("[]") && operation === Operation.LENGTH) { - let lastInputObject = await getMetadata(parameterDefinitions, paths, paths[paths.length - 1], MetadataType.INPUT_METADATA); - let inputDataType = lastInputObject.type.replace(/\|\(\)$/, ""); - defaultValue = await getDefaultValue(inputDataType); - newPath[paths.length - 1] = `${paths[paths.length - 1]}?:${defaultValue}`; - } else if (!outputObject.nullable && !outputObject.optional) { - if (isUnionEnumIntersectionType(inputObject.type) && inputObject.members) { - if (!inputObject.nullableArray || outputObject.nullableArray) { - let typeName = inputObject.type.includes("[]") - ? inputObject.type.replace(/\|\(\)$/, "") - : (inputObject as any).members[Object.keys((inputObject as any).members)[0]].typeName; - - let defaultValue = await getDefaultValue(typeName); - newPath[paths.length - 1] = `${paths[paths.length - 1]}?:${defaultValue !== "void" ? defaultValue : JSON.stringify(typeName)}`; - } - } - return newPath; - } - } - } else { - if (isUsingDefault && isUnionEnumIntersectionType(inputObject.type) && inputObject.members) { - if (!outputObject.nullable && !outputObject.optional) { - let typeName = inputObject.type.includes("[]") - ? inputObject.type.replace("|()", "") - : (inputObject as any).members[Object.keys((inputObject as any).members)[0]].typeName; - - let defaultValue = await getDefaultValue(typeName); - newPath[paths.length - 1] = `${paths[paths.length - 1]}?:${defaultValue !== "void" ? defaultValue : JSON.stringify(typeName)}`; - } - } - } - } else { - if (inputObject.nullable && inputObject.optional) { - newPath[index - 1] = `${paths[index - 1]}?`; - } - if (!isPrimitiveType(baseType) && baseType.includes("[]")) { - defaultValue = (!inputObject.nullableArray || outputObject.nullableArray) ? `[]` : undefined; - } else { - const typeToUse = !isPrimitiveType(baseType) - ? baseType.replace(/[\[\]()]*/g, "").split("|")[0].trim() - : baseType; - defaultValue = await getDefaultValue(typeToUse); - } - - if (isUsingArray) { - newPath[index] = `${pathIndex}?:${defaultValue}`; - } - - if (isUsingDefault && !outputObject.nullable && !outputObject.optional) { - newPath[index] = `${pathIndex}?:${defaultValue}`; - continue; - } - if (!(inputObject.nullable || inputObject.optional)) { - continue; - } - - // Handle nullable/optional input - const shouldUseDefault = ( - (!outputObject.nullable && !outputObject.optional && !inputObject.nullableArray && outputObject.nullableArray) || - (!outputObject.nullable && !outputObject.optional && (baseType === PrimitiveType.STRING || baseType === baseTargetType)) || - (baseType !== baseTargetType && baseType === PrimitiveType.STRING) - ); - newPath[index] = shouldUseDefault ? `${pathIndex}?:${defaultValue}` : `${pathIndex}`; - return newPath; - } - } - return newPath; -} - -async function getDefaultValue(dataType: string): Promise { - switch (dataType) { - case "string": - return "\"\""; - case "int": - return "0"; - case "decimal": - return "0.0"; - case "float": - return "0.0"; - case "boolean": - return "false"; - case "json": - return "()"; - case "int[]": - case "string[]": - case "float[]": - case "decimal[]": - case "boolean[]": - case "record[]": - case "(readonly&record)[]": - case "enum[]": - case "union[]": - case "intersection[]": - case "json[]": - return "[]"; - default: - // change the following to a appropriate value - return "void"; - } -} - -function isEmptyValue(value: string): boolean { - if (!value || value.trim() === '') { - return true; - } - - // Check if it's an empty string - if (value === '') { - return true; - } - - // Check if it's an empty object string like "{\n \n}" or "{}" - const trimmedValue = value.trim(); - if (trimmedValue === '{}' || /^\{\s*\}$/.test(trimmedValue)) { - return true; - } - - return false; -} - -async function getNestedType(paths: string[], metadata: ParameterField | FieldMetadata): Promise { - let currentMetadata = metadata; - for (const path of paths) { - const cleanPath = path.replace(/\?.*$/, ""); - const nextMetadata = currentMetadata.fields?.[cleanPath] ?? currentMetadata.members?.[cleanPath]; - if (!nextMetadata) { - throw new Error(`Field ${cleanPath} not found in metadata.`); - } - currentMetadata = nextMetadata; - } - return currentMetadata as FieldMetadata; -} - -async function getMetadata( - parameterDefinitions: ParameterMetadata, - nestedKeyArray: string[], - key: string, - metadataType: MetadataType.INPUT_METADATA | MetadataType.OUTPUT_METADATA -): Promise { - try { - let currentMetadata = parameterDefinitions[metadataType]; - for (const nestedKey of nestedKeyArray) { - const nested = currentMetadata[nestedKey]; - const hasNestedStructure = nested?.fields || nested?.members; - - if (hasNestedStructure) { - if (nestedKey === key) { - return nested as FieldMetadata; - } - currentMetadata = nested.fields || nested.members; - } else { - return currentMetadata[key] as FieldMetadata; - } - } - return currentMetadata[key] as FieldMetadata; - } catch { - throw new Error(`Metadata not found for key: "${key}" in ${metadataType}.`); - } -} - -async function handleRecordArrays(key: string, nestedKey: string, responseRecord: Record, parameterDefinitions: ParameterMetadata,nestedKeyArray: string[]) { - let recordFields: Record = {}; - let subObjectKeys = Object.keys(responseRecord); - - let formattedRecordsArray: string[] = []; - let itemKey: string = ""; - let combinedKey: string = ""; - let modifiedOutput: FieldMetadata; - let outputMetadataType: string = ""; - let outputMetadataTypeName: string = ""; - let isOutputDeeplyNested: boolean = false; - - for (let subObjectKey of subObjectKeys) { - const currentValue = responseRecord[subObjectKey]; - if (isEmptyValue(currentValue)) { - continue; - } - if (!nestedKey) { - modifiedOutput = parameterDefinitions.outputMetadata[key]; - } else { - modifiedOutput = await getMetadata(parameterDefinitions, nestedKeyArray, key, MetadataType.OUTPUT_METADATA); - } - outputMetadataTypeName = modifiedOutput.typeName; - outputMetadataType = modifiedOutput.type; - isOutputDeeplyNested = (isArrayRecord(outputMetadataTypeName) || isArrayEnumUnion(outputMetadataType)); - - let { itemKey: currentItemKey, combinedKey: currentCombinedKey, inputArrayNullable, isSet, isInputDeeplyNested } = await extractKeys(responseRecord[subObjectKey], parameterDefinitions); - if (currentItemKey.includes('?')) { - currentItemKey = currentItemKey.replace('?', ''); - } - if (modifiedOutput.hasOwnProperty("fields") || modifiedOutput.hasOwnProperty("members")) { - if (isOutputDeeplyNested) { - const subArrayRecord = responseRecord[subObjectKey]; - const isCombinedKeyModified = currentCombinedKey.endsWith('?'); - const replacementKey = inputArrayNullable || isCombinedKeyModified - ? `${currentItemKey}Item?.` - : `${isInputDeeplyNested ? currentItemKey + 'Item' : currentItemKey}.`; - const regex = new RegExp( - currentCombinedKey.replace(/\?/g, '\\?').replace(/\./g, '\\.') + '\\.', 'g' - ); - - formattedRecordsArray.push( - `${subObjectKey}: ${subArrayRecord.replace(regex, replacementKey)}` - ); - - if (isSet || (itemKey === "" && combinedKey === "")) { - itemKey = currentItemKey; - combinedKey = currentCombinedKey; - } - } else { - formattedRecordsArray.push(`${subObjectKey}: ${responseRecord[subObjectKey]}`); - } - } else { - recordFields = { ...recordFields, [key]: JSON.stringify(responseRecord) }; - } - } - - if (formattedRecordsArray.length > 0 && itemKey && combinedKey) { - const formattedRecords = formattedRecordsArray.join(",\n"); - const keyToReplace = combinedKey.endsWith('?') ? combinedKey.replace(/\?$/, '') : combinedKey; - const processedKeys = await processCombinedKey(combinedKey, parameterDefinitions); - const combinedKeyExpression = (processedKeys.isinputRecordArrayNullable || processedKeys.isinputRecordArrayOptional || processedKeys.isinputArrayNullable || processedKeys.isinputArrayOptional || processedKeys.isinputNullableArray) - ? `${keyToReplace} ?: []` - : keyToReplace; - recordFields[key] = `from var ${itemKey}Item in ${combinedKeyExpression}\n select {\n ${formattedRecords}\n}`; - } else { - recordFields[key] = `{\n ${formattedRecordsArray.join(",\n")} \n}`; - } - return { ...recordFields }; -} - -async function extractKeys( - key: string, - parameterDefinitions: ParameterMetadata -): Promise { - let innerKey: string; - let itemKey: string = ""; - let combinedKey: string = ""; - let inputArrayNullable: boolean = false; - let isSet: boolean = false; - let isInputDeeplyNested = false; - - // Handle the key for nullable and optional fields - key = key.replace(/\?*$/, ""); - - // Check for a nested mapping like 'from var ... in ...' - const nestedMappingMatch = key.match(/from\s+var\s+(\w+)\s+in\s+([\w?.]+)/); - if (nestedMappingMatch) { - itemKey = nestedMappingMatch[1]; - innerKey = nestedMappingMatch[2]; - - const keys = innerKey.split("."); - combinedKey = keys.slice(0, keys.length - 1).join("."); - } else if (key.startsWith("{") && key.endsWith("}")) { - // Handle complex nested mappings in braces - const matches = key.match(/\{\s*([^}]+)\s*\}/); - innerKey = matches ? matches[1] : key; - - // Use regex to find each deeply nested mapping within braces - const nestedKeys = innerKey.match(/[\w\s]+:\s*([\w?.]+)/g); - if (nestedKeys) { - const parsedKeys = nestedKeys.map(kv => kv.split(":")[1].trim()); - innerKey = parsedKeys[0] || ""; // Assume the first entry for simplicity if multiple mappings - } else { - // Fallback for simpler cases - innerKey = innerKey.split(",").map(kv => kv.split(":")[1].trim())[0] || ""; - } - } else { - // Standard case - innerKey = key.match(/\(([^)]+)\)/)?.[1] || key; - - innerKey = innerKey - .replace(/^check\s*/, '') - .replace(/\.ensureType\(\)$/, '') - .replace(/\.toString\(\)$/, ''); - } - // Call the helper function to process parent keys - const processedKeys = await processParentKey(innerKey, parameterDefinitions); - itemKey = processedKeys.itemKey; - combinedKey = processedKeys.combinedKey; - inputArrayNullable = processedKeys.inputArrayNullable; - isSet = processedKeys.isSet; - isInputDeeplyNested = processedKeys.isInputDeeplyNested; - return { itemKey, combinedKey, inputArrayNullable, isSet, isInputDeeplyNested }; -} - -function refineKey(key: string): string { - return key - .replace(/\?\./g, ".") // Replace `?.` with `.` - .replace(/\?$/g, "") // Remove a trailing `?` - .replace(/\s*\?:.*$/g, "") // Remove `?: ` - .replace(/[\(\)]/g, ""); // Remove parentheses -} - -async function processParentKey( - innerKey: string, - parameterDefinitions: ParameterMetadata -): Promise { - let itemKey: string = ""; - let combinedKey: string = ""; - let isSet: boolean = false; - let inputArrayNullable: boolean = false; - let isInputDeeplyNested: boolean = false; - - // Split the innerKey to get parent keys and field name - let keys = innerKey.split("."); - let fieldName = keys.pop()!; - let parentKey = keys.slice(0, keys.length); - - const refinedInnerKey = refineKey(innerKey); - const refinedKeys = refinedInnerKey.split("."); - const refinedParentKey = refinedKeys.slice(0, keys.length); - - // Handle the base case where there's only one key - if (refinedParentKey.length === 1) { - itemKey = parentKey[0]; - combinedKey = parentKey[0]; - return { itemKey, combinedKey, inputArrayNullable, isSet, isInputDeeplyNested }; - } - - for (let index = refinedParentKey.length - 1; index > 0; index--) { - const modifiedInputs = await getMetadata(parameterDefinitions, refinedParentKey, refinedParentKey[index], MetadataType.INPUT_METADATA); - inputArrayNullable = modifiedInputs.nullableArray; - - const isArrayType = isArrayRecord(modifiedInputs.typeName) || isArrayEnumUnion(modifiedInputs.type); - if (isArrayType) { - if (!isSet) { - itemKey = parentKey[index]; - combinedKey = parentKey.slice(0, index + 1).join("."); - isSet = true; - } - isInputDeeplyNested = true; - } - } - return { itemKey, combinedKey, inputArrayNullable, isSet, isInputDeeplyNested }; -} - -async function processCombinedKey( - combinedKey: string, - parameterDefinitions: ParameterMetadata -): Promise { - let isinputRecordArrayNullable: boolean = false; - let isinputRecordArrayOptional: boolean = false; - let isinputArrayNullable: boolean = false; - let isinputArrayOptional: boolean = false; - let isSet: boolean = false; - let isinputNullableArray: boolean = false; - - let refinedCombinedKey = refineKey(combinedKey); - let refinedCombinedKeys = refinedCombinedKey.split("."); - let lastIndex = refinedCombinedKeys.length - 1; - - const modifiedInputs = await getMetadata(parameterDefinitions, refinedCombinedKeys, refinedCombinedKeys[lastIndex], MetadataType.INPUT_METADATA); - - if (!isSet && (isArrayRecord(modifiedInputs.typeName) || isArrayEnumUnion(modifiedInputs.type))) { - isSet = true; - } - - if (isSet) { - // Update record array flags - if (modifiedInputs.nullable) { isinputRecordArrayNullable = true; } - if (modifiedInputs.optional) { isinputRecordArrayOptional = true; } - - // Check preceding elements for non-`record[]` types - for (let nextIndex = lastIndex - 1; nextIndex >= 0; nextIndex--) { - isinputNullableArray = false; - const nextModifiedInputs = await getMetadata(parameterDefinitions, refinedCombinedKeys, refinedCombinedKeys[nextIndex], MetadataType.INPUT_METADATA); - if (!(isArrayRecord(nextModifiedInputs.typeName) || isArrayEnumUnion(nextModifiedInputs.type))) { - if (nextModifiedInputs.nullable) { isinputArrayNullable = true; } - if (nextModifiedInputs.optional) { isinputArrayOptional = true; } - } else { - if (isArrayRecord(nextModifiedInputs.typeName) || isArrayEnumUnion(nextModifiedInputs.type)) { - if (nextModifiedInputs?.nullableArray && (nextIndex === (lastIndex - 1))) { isinputNullableArray = true; } - } - return { isinputRecordArrayNullable, isinputRecordArrayOptional, isinputArrayNullable, isinputArrayOptional, isinputNullableArray }; - } - } - } - return { isinputRecordArrayNullable, isinputRecordArrayOptional, isinputArrayNullable, isinputArrayOptional, isinputNullableArray }; -} - -export async function processMappings( - request: ExpandedDMModel, - file?: Attachment -): Promise { - let dataMapperResponse = cleanDataMapperModelResponse(request); - const result = await getParamDefinitions(dataMapperResponse); - const parameterDefinitions = (result as ParameterDefinitions).parameterMetadata; - - if (file) { - const mappedResult = await mappingFileDataMapperModel(file, dataMapperResponse); - dataMapperResponse = mappedResult as DataMapperModelResponse; - } - - const codeObject = await getDatamapperCode(dataMapperResponse, parameterDefinitions); - const mappings: Mapping[] = transformCodeObjectToMappings(codeObject, dataMapperResponse); - return { mappings }; -} - -// Main function to clean the entire DataMapperModelResponse -function cleanDataMapperModelResponse( - response: ExpandedDMModel -): DataMapperModelResponse { - if (!response) { - throw new Error("Invalid response: missing mappingsModel"); - } - - // Check if both input and output are arrays - const hasInputArrays = response.inputs && response.inputs.some(input => input.kind === "array"); - const isOutputArray = response.output && response.output.kind === "array"; - - let processedResponse = response; - - // Transform the structure if both input and output are arrays - if (hasInputArrays && isOutputArray) { - processedResponse = transformArrayStructure(response); - } - - const cleanedResponse: DataMapperModelResponse = { - mappingsModel: cleanExpandedDMModel(processedResponse as ExpandedDMModel) - }; - - return cleanedResponse; -} - -function transformArrayStructure(response: ExpandedDMModel): ExpandedDMModel { - const transformed = { ...response }; - - if (transformed.inputs && transformed.inputs.length > 0) { - transformed.inputs = transformed.inputs.map(input => { - // Only transform inputs that are arrays - if (input.kind === "array" && input.member) { - const originalName = input.name; - - // Deep clone and transform IDs using JSON stringify/parse - const transformedInput = JSON.parse( - JSON.stringify({ - ...input, - id: `${input.id}Item` - }).replace( - new RegExp(`"id":"${originalName}\\.`, 'g'), - `"id":"${originalName}Item.` - ) - ); - - return transformedInput; - } - // Return non-array inputs unchanged - return input; - }); - } - return transformed; -} - -// Clean ExpandedDMModel by removing null fields and cleaning nested structures -function cleanExpandedDMModel(model: ExpandedDMModel): ExpandedDMModel { - const cleaned = model as ExpandedDMModel; - - // Clean inputs array - remove null/undefined elements - if (model.inputs && Array.isArray(model.inputs)) { - const cleanedInputs = model.inputs - .filter(input => !isNullOrUndefined(input)) - .map(input => cleanIOType(input)) - .filter(input => input !== null) as IOType[]; - - cleaned.inputs = cleanedInputs; - } - - // Clean output - if (model.output && !isNullOrUndefined(model.output)) { - const cleanedOutput = cleanIOType(model.output); - if (cleanedOutput !== null) { - cleaned.output = cleanedOutput; - } - } - - // Clean subMappings array if it exists - if (model.subMappings && Array.isArray(model.subMappings)) { - const cleanedSubMappings = model.subMappings - .filter(subMapping => !isNullOrUndefined(subMapping)) - .map(subMapping => cleanIOType(subMapping)) - .filter(subMapping => subMapping !== null) as IOType[]; - - if (cleanedSubMappings.length > 0) { - cleaned.subMappings = cleanedSubMappings; - } - } - - // Clean mappings array - remove null/undefined elements - if (model.mappings && Array.isArray(model.mappings)) { - const cleanedMappings = model.mappings.filter(mapping => - !isNullOrUndefined(mapping) && - !isNullOrUndefined(mapping.output) && - !isNullOrUndefined(mapping.expression) - ); - - // Also clean inputs array within each mapping - cleanedMappings.forEach(mapping => { - if (mapping.inputs && Array.isArray(mapping.inputs)) { - mapping.inputs = mapping.inputs.filter(input => !isNullOrUndefined(input)); - } - }); - - cleaned.mappings = cleanedMappings; - } - - // Include query if it exists and is not null - if (model.query && !isNullOrUndefined(model.query)) { - cleaned.query = model.query; - } - - return cleaned; -} - -// Utility function to check if a value is null or undefined -function isNullOrUndefined(value: any): boolean { - return value === null || value === undefined; -} - -// Clean IOType by removing null/undefined fields and filtering arrays -function cleanIOType(ioType: IOType | null | undefined): IOType | null { - if (isNullOrUndefined(ioType)) { - return null; - } - - // Remove array records without fields - if (ioType.kind === "array" && ioType.typeName === "record" && - (!ioType.fields || ioType.fields.length === 0)) { - return null; - } - - // Remove records without fields - if (ioType.kind === "record" && (!ioType.fields || ioType.fields.length === 0)) { - return null; - } - - const cleaned = ioType; - - // Clean fields array - remove null/undefined elements and recursively clean - if (ioType.fields && Array.isArray(ioType.fields)) { - const cleanedFields = ioType.fields - .filter(field => !isNullOrUndefined(field)) - .map(field => cleanIOType(field)) - .filter(field => field !== null) as IOType[]; - - if (cleanedFields.length > 0) { - cleaned.fields = cleanedFields; - } - } - - // Clean member recursively - if (ioType.member && !isNullOrUndefined(ioType.member)) { - const cleanedMember = cleanIOType(ioType.member); - if (cleanedMember !== null) { - cleaned.member = cleanedMember; - } - } - - // Clean members array - remove null/undefined elements - if (ioType.members && Array.isArray(ioType.members)) { - const cleanedMembers = ioType.members.filter(member => - !isNullOrUndefined(member) && - !isNullOrUndefined(member.id) && - !isNullOrUndefined(member.typeName) - ); - - if (cleanedMembers.length > 0) { - cleaned.members = cleanedMembers; - } - } - - return cleaned; -} - -export async function getParamDefinitions( - dataMapperResponse: DataMapperModelResponse -): Promise { - const inputs: { [key: string]: any } = {}; - const inputMetadata: { [key: string]: any } = {}; - - const { inputs: mappingInputs, output: mappingOutput } = dataMapperResponse.mappingsModel as ExpandedDMModel; - const transformedInputs = transformInputs(mappingInputs); - const transformedOutputs = transformOutput(mappingOutput); - - for (const parameter of transformedInputs.parameters) { - const inputDefinition = navigateTypeInfo(transformedInputs.parameterFields[parameter.parameterName], false); - - inputs[parameter.parameterName] = inputDefinition.recordFields; - inputMetadata[parameter.parameterName] = { - "isArrayType": parameter.isArrayType, - "parameterName": parameter.parameterName, - "parameterType": parameter.parameterType, - "type": parameter.type, - "fields": inputDefinition.recordFieldsMetadata - }; - } - - const outputDefinition = navigateTypeInfo(transformedOutputs, false); - const output = { ...outputDefinition.recordFields }; - const outputMetadata = { ...outputDefinition.recordFieldsMetadata }; - - return { - parameterMetadata: { - inputs, - output, - inputMetadata, - outputMetadata, - constants: transformedInputs.constants, - configurables: transformedInputs.configurables, - variables: transformedInputs.variables, - enums: transformedInputs.enums - }, - errorStatus: false - }; -} - -function transformInputs(inputs: IOType[]): { - constants: Record; - configurables: Record; - variables: Record; - enums: Record; - parameters: ParameterField[]; - parameterFields: { [parameterName: string]: FormField[] }; -} { - const constants: Record = {}; - const configurables: Record = {}; - const variables: Record = {}; - const enums: Record = {}; - const parameters: ParameterField[] = []; - const parameterFields: { [parameterName: string]: FormField[] } = {}; - - const createParameterField = (input: IOType): ParameterField => { - let typeName = input.kind !== input.typeName ? input.typeName : (input.typeName || input.kind || "unknown"); - const isArrayType = input.kind === TypeKind.Array; - let type = isArrayType ? `${input.member?.kind || typeName}[]` : input.kind; - - return { - isArrayType, - parameterName: input.id, - parameterType: typeName, - type - }; - }; - - const createFieldConfig = (input: IOType): FieldMetadata => { - if (!input.typeName) { - throw new Error("TypeName is missing"); - } - return { - typeName: input.kind || "unknown", - type: input.kind || "unknown", - typeInstance: input.id, - nullable: false, - optional: input.optional || false - }; - }; - - const addAsParameter = (input: IOType) => { - const parameterField = createParameterField(input); - parameters.push(parameterField); - - if (input.kind === "array" && input.member) { - parameterFields[input.id] = input.member.fields - ? input.member.fields.map(transformIOType) - : [transformIOType(input.member)]; - } else if (input.fields) { - parameterFields[input.id] = input.fields.map(transformIOType); - } else { - parameterFields[input.id] = [transformIOType(input)]; - } - }; - - inputs.forEach((input) => { - switch (input.category) { - case InputCategory.Constant: - constants[input.id] = createFieldConfig(input); - break; - - case InputCategory.Configurable: - configurables[input.id] = createFieldConfig(input); - break; - - case InputCategory.Variable: - case InputCategory.ModuleVariable: - variables[input.id] = createFieldConfig(input); - break; - - case InputCategory.Enum: - const enumMembers: Record = {}; - const memberNames: string[] = []; - - input.members?.forEach(member => { - memberNames.push(member.name); - enumMembers[member.name] = createFieldConfig(member); - }); - - enums[input.id] = { - typeName: memberNames.join('|'), - type: input.kind, - typeInstance: input.id, - nullable: false, - optional: input.optional || false, - members: enumMembers - }; - break; - - case InputCategory.Parameter: - addAsParameter(input); - break; - - case InputCategory.LocalVariable: - if (!input.fields && !input.members) { - variables[input.id] = createFieldConfig(input); - } else { - addAsParameter(input); - } - break; - } - }); - - return { constants, configurables, variables, enums, parameters, parameterFields }; -} - -function transformIOType(input: IOType): FormField { - const name = input.name || extractNameFromId(input.id); - - let typeName: string; - if (input.kind && input.typeName && input.kind !== input.typeName && input.category) { - typeName = input.kind; - } else if (!input.typeName) { - typeName = input.kind || "unknown"; - } else { - typeName = input.typeName; - } - - const baseField = { - id: input.id, - name, - typeName, - optional: input.optional || false - }; - - // Handle arrays - if (input.kind === "array" && input.member) { - const memberTransformed = transformIOType(input.member) as FormField; - const { name, ...memberWithoutName } = memberTransformed; - - return { - ...baseField, - typeName: "array", - memberType: memberWithoutName as FormField - } as FormField; - } +export class AIPanelAbortController { + private static instance: AIPanelAbortController; + private abortController: AbortController; - // Handle unions - if (input.kind === "union" && input.members) { - return { - ...baseField, - typeName: "union", - members: input.members.map(transformIOType) as FormField[] - } as FormField; + private constructor() { + this.abortController = new AbortController(); } - // Handle records - if (input.kind === "record" && input.fields) { - const recordField: FormField = { - ...baseField, - typeName: "record", - fields: input.fields.map(transformIOType) as FormField[] - }; - - if ( - input.typeName && - input.kind !== input.typeName && - !input.category - ) { - recordField.typeInfo = { - orgName: "", - moduleName: "", - name: input.typeName - }; + public static getInstance(): AIPanelAbortController { + if (!AIPanelAbortController.instance) { + AIPanelAbortController.instance = new AIPanelAbortController(); } - - return recordField; - } - - // Handle enums - if (input.kind === "enum" && input.members) { - return { ...baseField, typeName: "enum", members: input.members.map(transformIOType) }; - } - - // Handle primitive types - const primitiveField: FormField = { ...baseField }; - - // Add typeInfo if conditions are met - if ( - input.typeName && - input.kind !== input.typeName && - !input.category - ) { - primitiveField.typeInfo = { - orgName: "", - moduleName: "", - name: input.typeName - }; + return AIPanelAbortController.instance; } - return primitiveField; -} - -function extractNameFromId(id: string): string { - const parts = id.split('.').filter(part => !/^\d+$/.test(part)); - return parts[parts.length - 1]; -} - -function transformOutput(output: IOType): FormField[] { - if (output.fields) { - return output.fields.map(transformIOType); - } else if (output.member) { - return output.member.fields.map(transformIOType); - } else { - return [transformIOType(output)]; + public get signal(): AbortSignal { + return this.abortController.signal; } -} - -function transformCodeObjectToMappings(codeObject: Record, request: DataMapperModelResponse): Mapping[] { - const mappings: Mapping[] = []; - // Get the output variable name from the request - const { output: mappingOutput, inputs } = request.mappingsModel as ExpandedDMModel; - const outputVariableName = mappingOutput.name || extractNameFromId(mappingOutput.id); - - // Check if any input is an array - const arrayInputs = inputs.filter(input => input.kind === "array"); - const hasInputArrays = arrayInputs.length > 0; - const isOutputArray = mappingOutput.kind === "array"; - - if (hasInputArrays && isOutputArray) { - // If multiple array inputs, we might need to handle joins or multiple from clauses - if (arrayInputs.length === 1) { - // Single array input - simple select - const arrayInput = arrayInputs[0]; - const inputName = arrayInput.name; - const itemVariableName = `${inputName}Item`; - - // Build the select object from codeObject - const selectFields = Object.keys(codeObject).map(key => { - return `${[key]}: ${codeObject[key]}`; - }).join(',\n '); - - const mapping: Mapping = { - output: outputVariableName, - expression: `from var ${itemVariableName} in ${inputName} - select { - ${selectFields} - }` - }; - mappings.push(mapping); - } else { - const primaryArrayInput = arrayInputs[0]; - const primaryInputName = primaryArrayInput.name; - const primaryItemVariableName = `${primaryInputName}Item`; - - // Build the select object from codeObject - const selectFields = Object.keys(codeObject).map(key => { - return `${[key]}: ${codeObject[key]}`; - }).join(',\n '); - - const mapping: Mapping = { - output: outputVariableName, - expression: `from var ${primaryItemVariableName} in ${primaryInputName} - select { - ${selectFields} - }` - }; - mappings.push(mapping); - } - } else { - // Handle non-array mappings (original logic) - Object.keys(codeObject).forEach(key => { - const mapping: Mapping = { - output: `${outputVariableName}.${key}`, - expression: codeObject[key] - }; - mappings.push(mapping); - }); + public abort(): void { + this.abortController.abort(); + // Create a new AbortController for the next operation + this.abortController = new AbortController(); } - - return mappings; } -export async function requirementsSpecification(filepath: string): Promise { - if (!filepath) { - throw new Error("File is undefined"); - } - const fileData = await attatchmentToFileData({ - name: path.basename(filepath), - content: getBase64FromFile(filepath), status: AttachmentStatus.UnknownError - }); - const params: DataMapperRequest = { - file: fileData, - processType: "requirements", - isRequirementAnalysis: true - }; - const resp: DataMapperResponse = await processDataMapperInput(params); - return resp.fileContent; -} +// Common functions -function getBase64FromFile(filePath) { - const fileBuffer = fs.readFileSync(filePath); - return fileBuffer.toString('base64'); +// Aborts the current AI panel operation +export function handleStop() { + AIPanelAbortController.getInstance().abort(); } -export function cleanDiagnosticMessages(entries: DiagnosticEntry[]): DiagnosticEntry[] { - return entries.map(entry => ({ - code: entry.code || "", - message: entry.message, - })); +// Checks if an error object has both 'code' and 'message' properties +export function isErrorCode(error: any): boolean { + return error.hasOwnProperty("code") && error.hasOwnProperty("message"); } - +// Adds file changes to the workspace and waits for artifact update notifications export async function addToIntegration(workspaceFolderPath: string, fileChanges: FileChanges[]) { const formattedWorkspaceEdit = new WorkspaceEdit(); const nonBalFiles: FileChanges[] = []; @@ -2228,3 +141,165 @@ export async function addToIntegration(workspaceFolderPath: string, fileChanges: }; }); } + +// Converts an attachment to file data format +async function convertAttachmentToFileData(attachment: Attachment): Promise { + return { + fileName: attachment.name, + content: attachment.content + }; +} + +// Datamapper related functions + +// Processes data mapper model and optional mapping instruction files to generate mapping expressions +export async function generateMappingExpressionsFromModel( + dataMapperModel: DMModel, + mappingInstructionFiles: Attachment[] = [], + eventHandler: CopilotEventHandler +): Promise { + let dataMapperResponse: DataMapperModelResponse = { + mappingsModel: dataMapperModel as DMModel + }; + if (mappingInstructionFiles.length > 0) { + eventHandler({ type: "content_block", content: "\nProcessing mapping hints from attachments..." }); + const enhancedResponse = await enrichModelWithMappingInstructions(mappingInstructionFiles, dataMapperResponse); + dataMapperResponse = enhancedResponse as DataMapperModelResponse; + } + eventHandler({ type: "content_block", content: "\nGenerating data mappings..." }); + + const generatedMappings = await generateAutoMappings(dataMapperResponse); + return generatedMappings.map(mapping => ({ + output: mapping.output, + expression: mapping.expression, + isFunctionCall: (mapping as any).requiresCustomFunction, + functionContent: mapping.functionContent + })); +} + +// Processes mapping instruction files and merges them with the existing data mapper model +export async function enrichModelWithMappingInstructions(mappingInstructionFiles: Attachment[], currentDataMapperResponse: DataMapperModelResponse): Promise { + if (!mappingInstructionFiles || mappingInstructionFiles.length === 0) { return currentDataMapperResponse; } + + const fileDataArray = await Promise.all( + mappingInstructionFiles.map(file => convertAttachmentToFileData(file)) + ); + + const requestParams: DataMapperRequest = { + files: fileDataArray, + processType: "mapping_instruction" + }; + const response: DataMapperResponse = await processDataMapperInput(requestParams); + let parsedMappingInstructions: MappingFileRecord = JSON.parse(response.fileContent) as MappingFileRecord; + + return { + ...currentDataMapperResponse, + mappingsModel: { + ...currentDataMapperResponse.mappingsModel, + mapping_fields: parsedMappingInstructions.mapping_fields + } + }; +} + +// Processes a repair request and returns the repaired source files using AI +export async function repairSourceFilesWithAI(codeRepairRequest: repairCodeRequest): Promise { + try { + const repairResponse = await generateRepairCode(codeRepairRequest); + return repairResponse.repairedFiles; + } catch (error) { + console.error(error); + throw error; + } +} + +// Type Creator related functions + +// Extracts type definitions from a file attachment and generates Ballerina record definitions +export async function extractRecordTypeDefinitionsFromFile(sourceFiles: Attachment[]): Promise { + if (sourceFiles.length === 0) { + throw new Error("No files provided"); + } + + // Process all files together to understand correlations + const fileDataArray = await Promise.all( + sourceFiles.map(attachment => convertAttachmentToFileData(attachment)) + ); + + const requestParams: DataMapperRequest = { + files: fileDataArray, + processType: "records" + }; + const response: DataMapperResponse = await processDataMapperInput(requestParams); + return response.fileContent; +} + +// Natural language programming related functions + +// Analyzes a requirements document and returns the specification +export async function requirementsSpecification(filepath: string): Promise { + if (!filepath) { + throw new Error("File is undefined"); + } + const fileData = await convertAttachmentToFileData({ + name: path.basename(filepath), + content: convertFileToBase64(filepath), status: AttachmentStatus.UnknownError + }); + const params: DataMapperRequest = { + files: [fileData], + processType: "requirements", + isRequirementAnalysis: true + }; + const resp: DataMapperResponse = await processDataMapperInput(params); + return resp.fileContent; +} + +// Reads a file and converts it to base64 encoding +function convertFileToBase64(filePath: string) { + const fileBuffer = fs.readFileSync(filePath); + return fileBuffer.toString('base64'); +} + +// Feedback related functions + +// Removes unnecessary fields from diagnostic entries +export function cleanDiagnosticMessages(entries: DiagnosticEntry[]): DiagnosticEntry[] { + return entries.map(entry => ({ + code: entry.code || "", + message: entry.message, + })); +} + +// Ask related functions + +// Searches documentation and formats the response with reference sources +export async function searchDocumentation(message: string): Promise { + const resp = await getAskResponse(message,); + const finalResponse = resp.content.replace(/[\s\S]*?<\/thinking>/g, ''); + const referenceSources = resp.references; + let responseContent: string; + if (referenceSources.length > 0) { + responseContent = `${finalResponse} \nreference sources: \n${referenceSources.join(' \n')}`; + } else { + responseContent = finalResponse; + } + + return responseContent; +} + +// Filters and formats documentation response from API response +export async function filterDocumentation(resp: Response): Promise { + let responseContent: string; + if (resp.status == 200 || resp.status == 201) { + const data = (await resp.json()) as any; + console.log("data", data.response); + const finalResponse = await (data.response.content).replace(/[\s\S]*?<\/thinking>/g, ''); + const referenceSources = data.response.references; + if (referenceSources.length > 0) { + responseContent = `${finalResponse} \nreference sources: \n${referenceSources.join(' \n')}`; + } else { + responseContent = finalResponse; + } + return responseContent; + } + throw new Error(AIChatError.UNKNOWN_CONNECTION_ERROR); +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts index 0bee6a351da..eb91491530b 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-handler.ts @@ -30,30 +30,39 @@ import { BIGetEnclosedFunctionRequest, BIGetVisibleVariableTypesRequest, BINodeTemplateRequest, + BISearchNodesRequest, BISearchRequest, BISourceCodeRequest, BreakpointRequest, BuildMode, + buildProject, ClassFieldModifierRequest, ComponentRequest, - MigrateRequest, - buildProject, + ConfigVariableRequest, createComponent, createGraphqlClassType, createProject, deleteByComponentInfo, + DeleteConfigVariableRequestV2, deleteConfigVariableV2, deleteFlowNode, deleteOpenApiGeneratedModules, + deleteProject, + DeleteProjectRequest, deleteType, DeleteTypeRequest, DeploymentRequest, deployProject, + EndOfFileRequest, + ExpressionCompletionsRequest, + ExpressionDiagnosticsRequest, formDidClose, + FormDidCloseParams, formDidOpen, + FormDidOpenParams, + FunctionNodeRequest, generateOpenApiClient, getAiSuggestions, - getAllImports, getAvailableChunkers, getAvailableDataLoaders, getAvailableEmbeddingProviders, @@ -63,8 +72,10 @@ import { getAvailableVectorStores, getBreakpointInfo, getConfigVariableNodeTemplate, + GetConfigVariableNodeTemplateRequest, getConfigVariables, getConfigVariablesV2, + getDataMapperCompletions, getDesignModel, getDevantMetadata, getEnclosedFunction, @@ -72,6 +83,7 @@ import { getExpressionCompletions, getExpressionDiagnostics, getFlowModel, + getFormDiagnostics, getFunctionNames, getFunctionNode, getModuleNodes, @@ -81,68 +93,66 @@ import { getProjectStructure, getReadmeContent, getRecordConfig, + GetRecordConfigRequest, getRecordModelFromSource, + GetRecordModelFromSourceRequest, getRecordNames, getRecordSource, getServiceClassModel, getSignatureHelp, getSourceCode, getType, + getTypeFromJson, + GetTypeRequest, getTypes, + GetTypesRequest, getVisibleTypes, getVisibleVariableTypes, getWorkspaces, handleReadmeContent, - openAIChat, - openConfigToml, - openReadme, - removeBreakpointFromSource, - renameIdentifier, - runProject, - search, - updateClassField, - updateConfigVariables, - updateConfigVariablesV2, - updateImports, - updateRecordConfig, - updateServiceClass, - updateType, - updateTypes, - DeleteConfigVariableRequestV2, - ConfigVariableRequest, - ProjectRequest, - EndOfFileRequest, - ExpressionCompletionsRequest, - ExpressionDiagnosticsRequest, - FormDidCloseParams, - FormDidOpenParams, - FunctionNodeRequest, - GetConfigVariableNodeTemplateRequest, - GetRecordConfigRequest, - GetRecordModelFromSourceRequest, - getTypeFromJson, - GetTypeRequest, - GetTypesRequest, JsonToTypeRequest, ModelFromCodeRequest, + openAIChat, OpenAPIClientDeleteRequest, OpenAPIClientGenerationRequest, OpenAPIGeneratedModulesRequest, + openConfigToml, OpenConfigTomlRequest, + openReadme, + ProjectRequest, ReadmeContentRequest, RecordSourceGenRequest, + removeBreakpointFromSource, + renameIdentifier, RenameIdentifierRequest, + runProject, + search, + searchNodes, ServiceClassSourceRequest, SignatureHelpRequest, + updateClassField, UpdateConfigVariableRequest, UpdateConfigVariableRequestV2, + updateConfigVariables, + updateConfigVariablesV2, + updateImports, UpdateImportsRequest, + updateRecordConfig, UpdateRecordConfigRequest, + updateServiceClass, + updateType, UpdateTypeRequest, + updateTypes, UpdateTypesRequest, verifyTypeDelete, VerifyTypeDeleteRequest, - VisibleTypesRequest + VisibleTypesRequest, + FormDiagnosticsRequest, + getExpressionTokens, + ExpressionTokensRequest, + addProjectToWorkspace, + AddProjectToWorkspaceRequest, + OpenReadmeRequest } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { BiDiagramRpcManager } from "./rpc-manager"; @@ -164,6 +174,8 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onRequest(getNodeTemplate, (args: BINodeTemplateRequest) => rpcManger.getNodeTemplate(args)); messenger.onRequest(getAiSuggestions, (args: BIAiSuggestionsRequest) => rpcManger.getAiSuggestions(args)); messenger.onNotification(createProject, (args: ProjectRequest) => rpcManger.createProject(args)); + messenger.onNotification(deleteProject, (args: DeleteProjectRequest) => rpcManger.deleteProject(args)); + messenger.onNotification(addProjectToWorkspace, (args: AddProjectToWorkspaceRequest) => rpcManger.addProjectToWorkspace(args)); messenger.onRequest(getWorkspaces, () => rpcManger.getWorkspaces()); messenger.onRequest(getProjectStructure, () => rpcManger.getProjectStructure()); messenger.onRequest(getProjectComponents, () => rpcManger.getProjectComponents()); @@ -171,6 +183,7 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onRequest(handleReadmeContent, (args: ReadmeContentRequest) => rpcManger.handleReadmeContent(args)); messenger.onRequest(getVisibleVariableTypes, (args: BIGetVisibleVariableTypesRequest) => rpcManger.getVisibleVariableTypes(args)); messenger.onRequest(getExpressionCompletions, (args: ExpressionCompletionsRequest) => rpcManger.getExpressionCompletions(args)); + messenger.onRequest(getDataMapperCompletions, (args: ExpressionCompletionsRequest) => rpcManger.getDataMapperCompletions(args)); messenger.onRequest(getConfigVariables, () => rpcManger.getConfigVariables()); messenger.onRequest(updateConfigVariables, (args: UpdateConfigVariableRequest) => rpcManger.updateConfigVariables(args)); messenger.onRequest(getConfigVariablesV2, (args: ConfigVariableRequest) => rpcManger.getConfigVariablesV2(args)); @@ -179,8 +192,8 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onRequest(getConfigVariableNodeTemplate, (args: GetConfigVariableNodeTemplateRequest) => rpcManger.getConfigVariableNodeTemplate(args)); messenger.onRequest(openConfigToml, (args: OpenConfigTomlRequest) => rpcManger.openConfigToml(args)); messenger.onRequest(getModuleNodes, () => rpcManger.getModuleNodes()); - messenger.onRequest(getReadmeContent, () => rpcManger.getReadmeContent()); - messenger.onNotification(openReadme, () => rpcManger.openReadme()); + messenger.onRequest(getReadmeContent, (args: ReadmeContentRequest) => rpcManger.getReadmeContent(args)); + messenger.onNotification(openReadme, (args: OpenReadmeRequest) => rpcManger.openReadme(args)); messenger.onRequest(renameIdentifier, (args: RenameIdentifierRequest) => rpcManger.renameIdentifier(args)); messenger.onRequest(deployProject, (args: DeploymentRequest) => rpcManger.deployProject(args)); messenger.onNotification(openAIChat, (args: AIChatRequest) => rpcManger.openAIChat(args)); @@ -191,8 +204,9 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onNotification(addBreakpointToSource, (args: BreakpointRequest) => rpcManger.addBreakpointToSource(args)); messenger.onNotification(removeBreakpointFromSource, (args: BreakpointRequest) => rpcManger.removeBreakpointFromSource(args)); messenger.onRequest(getBreakpointInfo, () => rpcManger.getBreakpointInfo()); + messenger.onRequest(getFormDiagnostics, (args: FormDiagnosticsRequest) => rpcManger.getFormDiagnostics(args)); messenger.onRequest(getExpressionDiagnostics, (args: ExpressionDiagnosticsRequest) => rpcManger.getExpressionDiagnostics(args)); - messenger.onRequest(getAllImports, () => rpcManger.getAllImports()); + messenger.onRequest(getExpressionTokens, (args: ExpressionTokensRequest) => rpcManger.getExpressionTokens(args)); messenger.onNotification(formDidOpen, (args: FormDidOpenParams) => rpcManger.formDidOpen(args)); messenger.onNotification(formDidClose, (args: FormDidCloseParams) => rpcManger.formDidClose(args)); messenger.onRequest(getDesignModel, () => rpcManger.getDesignModel()); @@ -217,6 +231,7 @@ export function registerBiDiagramRpcHandlers(messenger: Messenger) { messenger.onRequest(getFunctionNode, (args: FunctionNodeRequest) => rpcManger.getFunctionNode(args)); messenger.onRequest(getEndOfFile, (args: EndOfFileRequest) => rpcManger.getEndOfFile(args)); messenger.onRequest(search, (args: BISearchRequest) => rpcManger.search(args)); + messenger.onRequest(searchNodes, (args: BISearchNodesRequest) => rpcManger.searchNodes(args)); messenger.onRequest(getRecordNames, () => rpcManger.getRecordNames()); messenger.onRequest(getFunctionNames, () => rpcManger.getFunctionNames()); messenger.onRequest(getDevantMetadata, () => rpcManger.getDevantMetadata()); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts index 4a734c188da..0734288b72f 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/bi-diagram/rpc-manager.ts @@ -42,6 +42,8 @@ import { BIModuleNodesResponse, BINodeTemplateRequest, BINodeTemplateResponse, + BISearchNodesRequest, + BISearchNodesResponse, BISearchRequest, BISearchResponse, BISourceCodeRequest, @@ -60,6 +62,7 @@ import { DIRECTORY_MAP, DeleteConfigVariableRequestV2, DeleteConfigVariableResponseV2, + DeleteProjectRequest, DeleteTypeRequest, DeleteTypeResponse, DeploymentRequest, @@ -85,8 +88,6 @@ import { GetTypeResponse, GetTypesRequest, GetTypesResponse, - ImportStatement, - ImportStatements, JsonToTypeRequest, JsonToTypeResponse, LinePosition, @@ -100,7 +101,6 @@ import { OpenAPIGeneratedModulesResponse, OpenConfigTomlRequest, ProjectComponentsResponse, - ProjectImports, ProjectRequest, ProjectStructureResponse, ReadmeContentRequest, @@ -111,13 +111,11 @@ import { RenameIdentifierRequest, RenameRequest, SCOPE, - STModification, ServiceClassModelResponse, ServiceClassSourceRequest, SignatureHelpRequest, SignatureHelpResponse, SourceEditResponse, - SyntaxTree, TemplateId, TextEdit, UpdateConfigVariableRequest, @@ -132,10 +130,10 @@ import { UpdateTypesRequest, UpdateTypesResponse, UpdatedArtifactsResponse, - VisibleTypesRequest, - VisibleTypesResponse, VerifyTypeDeleteRequest, VerifyTypeDeleteResponse, + VisibleTypesRequest, + VisibleTypesResponse, WorkspaceFolder, WorkspacesResponse, BIIntelSecrets, @@ -144,6 +142,12 @@ import { Item, Category, NodePosition, + FormDiagnosticsRequest, + FormDiagnosticsResponse, + ExpressionTokensRequest, + ExpressionTokensResponse, + AddProjectToWorkspaceRequest, + OpenReadmeRequest, } from "@wso2/ballerina-core"; import * as fs from "fs"; import * as path from 'path'; @@ -169,11 +173,12 @@ import { BreakpointManager } from "../../features/debugger/breakpoint-manager"; import { StateMachine, updateView } from "../../stateMachine"; import { getAccessToken, getLoginMethod } from "../../utils/ai/auth"; import { getCompleteSuggestions } from '../../utils/ai/completions'; -import { README_FILE, createBIAutomation, createBIFunction, createBIProjectPure } from "../../utils/bi"; +import { README_FILE, addProjectToExistingWorkspace, convertProjectToWorkspace, createBIAutomation, createBIFunction, createBIProjectPure, createBIWorkspace, deleteProjectFromWorkspace, openInVSCode } from "../../utils/bi"; import { writeBallerinaFileDidOpen } from "../../utils/modification"; import { updateSourceCode } from "../../utils/source-utils"; -import { checkProjectDiagnostics, removeUnusedImports } from "../ai-panel/repair-utils"; import { getView } from "../../utils/state-machine-utils"; +import { checkProjectDiagnostics, removeUnusedImports } from "../ai-panel/repair-utils"; + export class BiDiagramRpcManager implements BIDiagramAPI { OpenConfigTomlRequest: (params: OpenConfigTomlRequest) => Promise; @@ -224,10 +229,10 @@ export class BiDiagramRpcManager implements BIDiagramAPI { .then(async (model) => { console.log(">>> bi source code from ls", model); if (params?.isConnector) { - const artifacts = await updateSourceCode({ textEdits: model.textEdits }, null, this.getSourceDescription(params)); + const artifacts = await updateSourceCode({ textEdits: model.textEdits, description: this.getSourceDescription(params) }); resolve({ artifacts }); } else { - const artifacts = await updateSourceCode({ textEdits: model.textEdits }, this.getArtifactDataFromNodeKind(params.flowNode.codedata.node), this.getSourceDescription(params)); + const artifacts = await updateSourceCode({ textEdits: model.textEdits, artifactData: this.getArtifactDataFromNodeKind(params.flowNode.codedata.node), description: this.getSourceDescription(params)}, params.isHelperPaneChange); resolve({ artifacts }); } }) @@ -422,8 +427,16 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getAvailableNodes(params: BIAvailableNodesRequest): Promise { console.log(">>> requesting bi available nodes from ls", params); return new Promise((resolve) => { + const fileNameOrPath = params.filePath; + let filePath = fileNameOrPath; + if (path.basename(fileNameOrPath) === fileNameOrPath) { + filePath = path.join(StateMachine.context().projectPath, fileNameOrPath); + } StateMachine.langClient() - .getAvailableNodes(params) + .getAvailableNodes({ + position: params.position, + filePath + }) .then((model) => { console.log(">>> bi available nodes from ls", model); const filteredModel = this.filterAdvancedAiNodes(model); @@ -495,16 +508,16 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async getAvailableVectorKnowledgeBases(params: BIAvailableNodesRequest): Promise { - console.log(">>> requesting bi available vector knowledge bases from ls", params); + console.log(">>> requesting bi available knowledge bases from ls", params); return new Promise((resolve) => { StateMachine.langClient() .getAvailableVectorKnowledgeBases(params) .then((model) => { - console.log(">>> bi available vector knowledge bases from ls", model); + console.log(">>> bi available knowledge bases from ls", model); resolve(model); }) .catch((error) => { - console.log(">>> error fetching available vector knowledge bases from ls", error); + console.log(">>> error fetching available knowledge bases from ls", error); return new Promise((resolve) => { resolve(undefined); }); @@ -577,7 +590,65 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async createProject(params: ProjectRequest): Promise { - createBIProjectPure(params); + if (params.createAsWorkspace) { + const workspaceRoot = createBIWorkspace(params); + openInVSCode(workspaceRoot); + } else { + const projectRoot = createBIProjectPure(params); + openInVSCode(projectRoot); + } + } + + async deleteProject(params: DeleteProjectRequest): Promise { + const projectInfo = StateMachine.context().projectInfo; + const targetProject = projectInfo?.children.find((child) => child.projectPath === params.projectPath); + const projectName = targetProject?.title || targetProject?.name; + if (!projectName) { + return; + } + // Confirm destructive action with user + const response = await window.showWarningMessage( + `Delete Integration '${projectName}'?`, + { + modal: true, + detail: "This action cannot be undone. The integration will be permanently removed from the workspace." + }, + { title: "Delete", isCloseAffordance: false }, + { title: "Cancel", isCloseAffordance: true } + ); + + if (response?.title !== "Delete") { + return; + } + + const projectPath = params.projectPath; + const workspacePath = projectInfo?.projectPath; + await deleteProjectFromWorkspace(workspacePath, projectPath); + + // Refresh project info to update UI with newly added project + StateMachine.refreshProjectInfo(); + } + + async addProjectToWorkspace(params: AddProjectToWorkspaceRequest): Promise { + if (params.convertToWorkspace) { + try { + await convertProjectToWorkspace(params); + // Refresh project info to update UI with newly added project + StateMachine.refreshProjectInfo(); + } catch (error) { + window.showErrorMessage("Error converting integration to workspace"); + console.error("Error converting integration to workspace:", error); + } + } else { + try { + await addProjectToExistingWorkspace(params); + // Refresh project info to update UI with newly added project + StateMachine.refreshProjectInfo(); + } catch (error) { + window.showErrorMessage("Error adding integration to existing workspace"); + console.error("Error adding integration to existing workspace:", error); + } + } } async getWorkspaces(): Promise { @@ -619,7 +690,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getProjectComponents(): Promise { return new Promise(async (resolve) => { const components = await StateMachine.langClient().getBallerinaProjectComponents({ - documentIdentifiers: [{ uri: Uri.file(StateMachine.context().projectUri).toString() }], + documentIdentifiers: [{ uri: Uri.file(StateMachine.context().projectPath).toString() }], }); resolve({ components }); }); @@ -765,14 +836,14 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async deleteFlowNode(params: BISourceCodeRequest): Promise { console.log(">>> requesting bi delete node from ls", params); // Clean project diagnostics before deleting flow node - await cleanAndValidateProject(StateMachine.langClient(), StateMachine.context().projectUri); + await cleanAndValidateProject(StateMachine.langClient(), StateMachine.context().projectPath); return new Promise((resolve) => { StateMachine.langClient() .deleteFlowNode(params) .then(async (model) => { console.log(">>> bi delete node from ls", model); - const artifacts = await updateSourceCode({ textEdits: model.textEdits }, null, 'Flow Node Deletion - ' + params.flowNode.metadata.label); + const artifacts = await updateSourceCode({ textEdits: model.textEdits, description: 'Flow Node Deletion - ' + params.flowNode.metadata.label }); resolve({ artifacts }); }) .catch((error) => { @@ -785,10 +856,13 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async handleReadmeContent(params: ReadmeContentRequest): Promise { - // console.log(">>> Savineadme.md", params); return new Promise((resolve) => { - const projectUri = StateMachine.context().projectUri; - const readmePath = path.join(projectUri, README_FILE); + const projectPath = params.projectPath; + const readmePath = projectPath ? path.join(projectPath, README_FILE) : undefined; + if (!readmePath) { + resolve({ content: "" }); + return; + } if (params.read) { if (!fs.existsSync(readmePath)) { resolve({ content: "" }); @@ -825,9 +899,22 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } + async getDataMapperCompletions(params: ExpressionCompletionsRequest): Promise { + return new Promise((resolve, reject) => { + StateMachine.langClient() + .getDataMapperCompletions(params) + .then((completions) => { + resolve(completions); + }) + .catch((error) => { + reject("Error fetching data mapper completions from ls"); + }); + }); + } + async getConfigVariables(): Promise { return new Promise(async (resolve) => { - const projectPath = path.join(StateMachine.context().projectUri); + const projectPath = StateMachine.context().projectPath; const variables = await StateMachine.langClient().getConfigVariables({ projectPath: projectPath }) as ConfigVariableResponse; resolve(variables); }); @@ -844,14 +931,14 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } const response = await StateMachine.langClient().updateConfigVariables(req) as BISourceCodeResponse; - await updateSourceCode({ textEdits: response.textEdits }, { artifactType: DIRECTORY_MAP.CONFIGURABLE }, 'Config Variable Update'); + await updateSourceCode({ textEdits: response.textEdits, artifactData: { artifactType: DIRECTORY_MAP.CONFIGURABLE }, description: 'Config Variable Update' }); resolve(response); }); } async getConfigVariablesV2(params: ConfigVariableRequest): Promise { return new Promise(async (resolve) => { - const projectPath = path.join(StateMachine.context().projectUri); + const projectPath = StateMachine.context().projectPath; const showLibraryConfigVariables = extension.ballerinaExtInstance.showLibraryConfigVariables(); // if params includeLibraries is not set, then use settings @@ -875,7 +962,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { writeBallerinaFileDidOpen(params.configFilePath, "\n"); } const response = await StateMachine.langClient().updateConfigVariablesV2(req) as UpdateConfigVariableResponseV2; - await updateSourceCode({ textEdits: response.textEdits }, { artifactType: DIRECTORY_MAP.CONFIGURABLE }, 'Config Variable Update'); + await updateSourceCode({ textEdits: response.textEdits, artifactData: { artifactType: DIRECTORY_MAP.CONFIGURABLE }, description: 'Config Variable Update' }); resolve(response); }); } @@ -888,7 +975,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { writeBallerinaFileDidOpen(params.configFilePath, "\n"); } const response = await StateMachine.langClient().deleteConfigVariableV2(req) as BISourceCodeResponse; - await updateSourceCode({ textEdits: response.textEdits }, { artifactType: DIRECTORY_MAP.CONFIGURABLE }, 'Config Variable Deletion'); + await updateSourceCode({ textEdits: response.textEdits, artifactData: { artifactType: DIRECTORY_MAP.CONFIGURABLE }, description: 'Config Variable Deletion' }); resolve(response); }); } @@ -916,8 +1003,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return new Promise(async (resolve) => { const currentProject: BallerinaProject | undefined = await getCurrentBIProject(params.filePath); - const configFilePath = path.join(StateMachine.context().projectUri, "Config.toml"); - const ignoreFile = path.join(StateMachine.context().projectUri, ".gitignore"); + const configFilePath = path.join(StateMachine.context().projectPath, "Config.toml"); + const ignoreFile = path.join(StateMachine.context().projectPath, ".gitignore"); const docLink = "https://ballerina.io/learn/provide-values-to-configurable-variables/#provide-via-toml-syntax"; const uri = Uri.file(configFilePath); @@ -965,16 +1052,10 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } - async getReadmeContent(): Promise { + async getReadmeContent(params: ReadmeContentRequest): Promise { return new Promise((resolve) => { - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders || workspaceFolders.length === 0) { - resolve({ content: "" }); - return; - } - - const projectRoot = workspaceFolders[0].uri.fsPath; - const readmePath = path.join(projectRoot, "README.md"); + const projectPath = params.projectPath; + const readmePath = path.join(projectPath, "README.md"); if (!fs.existsSync(readmePath)) { resolve({ content: "" }); @@ -992,19 +1073,28 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } - openReadme(): void { - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders || workspaceFolders.length === 0) { - window.showErrorMessage("No workspace folder is open."); - return; - } - - const projectRoot = workspaceFolders[0].uri.fsPath; + openReadme(params: OpenReadmeRequest): void { + const projectRoot = params.projectPath; const readmePath = path.join(projectRoot, "README.md"); if (!fs.existsSync(readmePath)) { // Create README.md if it doesn't exist - fs.writeFileSync(readmePath, "# Project Overview\n\nAdd your project description here."); + + const projectInfo = StateMachine.context().projectInfo; + let content = ""; + + if (params.isWorkspaceReadme) { + const workspaceName = projectInfo?.title || projectInfo?.name; + content = `# ${workspaceName} Workspace\n\nAdd your workspace description here.`; + } else { + const project = projectInfo?.children && projectInfo?.children.length > 0 + ? projectInfo?.children.find((child) => child.projectPath === params.projectPath) + : projectInfo; + const projectName = project?.title || project?.name; + content = `# ${projectName} Integration\n\nAdd your integration description here.`; + } + + fs.writeFileSync(readmePath, content); } // Open README.md in the editor @@ -1013,8 +1103,6 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } - - async deployProject(params: DeploymentRequest): Promise { const scopes = params.integrationTypes; @@ -1025,7 +1113,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } else { // Show a quick pick to select deployment option const selectedScope = await window.showQuickPick(scopes, { - placeHolder: 'You have different types of artifacts within this project. Select the artifact type to be deployed' + placeHolder: 'You have different types of artifacts within this integration. Select the artifact type to be deployed' }); integrationType = selectedScope as SCOPE; } @@ -1037,8 +1125,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { const deployementParams: ICreateComponentCmdParams = { integrationType: integrationType as any, buildPackLang: "ballerina", // Example language - name: path.basename(StateMachine.context().projectUri), - componentDir: StateMachine.context().projectUri, + name: path.basename(StateMachine.context().projectPath), + componentDir: StateMachine.context().projectPath, extName: "Devant" }; commands.executeCommand(PlatformExtCommandIds.CreateNewComponent, deployementParams); @@ -1062,15 +1150,15 @@ export class BiDiagramRpcManager implements BIDiagramAPI { console.log(">>> requesting bi module nodes from ls"); return new Promise((resolve) => { const context = StateMachine.context(); - if (!context.projectUri) { - console.log(">>> projectUri not found in the context"); + if (!context.projectPath) { + console.log(">>> projectPath not found in the context"); return new Promise((resolve) => { resolve(undefined); }); } const params: BIModuleNodesRequest = { - filePath: context.projectUri, + filePath: context.projectPath, }; StateMachine.langClient() @@ -1148,7 +1236,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { buildCommand = path.join(ballerinaHome, 'bin', buildCommand); } - const execution = new ShellExecution(buildCommand); + // Use the current process environment which should have the updated PATH + const execution = new ShellExecution(buildCommand, { env: process.env as { [key: string]: string } }); const task = new Task( taskDefinition, @@ -1197,7 +1286,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async deleteByComponentInfo(params: BIDeleteByComponentInfoRequest): Promise { console.log(">>> requesting bi delete node from ls by componentInfo", params); - const projectDiags: Diagnostics[] = await checkProjectDiagnostics(StateMachine.langClient(), StateMachine.context().projectUri); + const projectDiags: Diagnostics[] = await checkProjectDiagnostics(StateMachine.langClient(), StateMachine.context().projectPath); const position: NodePosition = { startLine: params.component?.startLine, @@ -1207,10 +1296,10 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }; // Check if the filepath is only the filename or the full path if not concatenate the project uri let filePath = params.component?.filePath; - if (!filePath.includes(StateMachine.context().projectUri)) { - filePath = path.join(StateMachine.context().projectUri, filePath); + if (!filePath.includes(StateMachine.context().projectPath)) { + filePath = path.join(StateMachine.context().projectPath, filePath); } - const componentView = await getView(filePath, position, StateMachine.context().projectUri); + const componentView = await getView(filePath, position, StateMachine.context().projectPath); // Helper function to perform the actual delete operation const performDelete = async (): Promise => { return new Promise((resolve, reject) => { @@ -1218,7 +1307,11 @@ export class BiDiagramRpcManager implements BIDiagramAPI { .deleteByComponentInfo(params) .then(async (model) => { console.log(">>> bi delete node from ls by componentInfo", model); - await updateSourceCode({ textEdits: model.textEdits }, null, `${this.capitalizeFirstLetter(componentView.location.artifactType)} Deletion - ${componentView.location.identifier}`); + let description = 'Component Deletion'; + if (componentView?.location?.artifactType && componentView?.location?.identifier) { + description = `${this.capitalizeFirstLetter(componentView.location.artifactType)} Deletion - ${componentView.location.identifier}`; + } + await updateSourceCode({ textEdits: model.textEdits, description: description, skipPayloadCheck: true }); // Skip payload check because the component is deleted resolve(model); }) .catch((error) => { @@ -1249,6 +1342,21 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } } + async getFormDiagnostics(params: FormDiagnosticsRequest): Promise { + return new Promise((resolve, reject) => { + console.log(">>> requesting form diagnostics from ls", params); + StateMachine.langClient() + .getFormDiagnostics(params) + .then((diagnostics) => { + console.log(">>> form diagnostics response from ls", diagnostics); + resolve(diagnostics); + }) + .catch((error) => { + reject("Error fetching form diagnostics from ls"); + }); + }); + } + async getExpressionDiagnostics(params: ExpressionDiagnosticsRequest): Promise { return new Promise((resolve, reject) => { console.log(">>> requesting expression diagnostics from ls", params); @@ -1329,22 +1437,6 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } - async getAllImports(): Promise { - const projectUri = StateMachine.context().projectUri; - const ballerinaFiles = await getBallerinaFiles(Uri.file(projectUri).fsPath); - const imports: ImportStatements[] = []; - - for (const file of ballerinaFiles) { - const fileContent = fs.readFileSync(file, "utf8"); - const fileImports = await extractImports(fileContent, file); - imports.push(fileImports); - } - return { - projectPath: projectUri, - imports, - }; - } - async getEnclosedFunction(params: BIGetEnclosedFunctionRequest): Promise { console.log(">>> requesting parent functin definition", params); return new Promise((resolve) => { @@ -1421,10 +1513,10 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getDesignModel(): Promise { console.log(">>> requesting design model from ls"); return new Promise((resolve) => { - const projectUri = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; StateMachine.langClient() - .getDesignModel({ projectPath: projectUri }) + .getDesignModel({ projectPath }) .then((model) => { console.log(">>> design model from ls", model); resolve(model); @@ -1441,8 +1533,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getTypes(params: GetTypesRequest): Promise { - const projectUri = StateMachine.context().projectUri; - const ballerinaFiles = await getBallerinaFiles(Uri.file(projectUri).fsPath); + const projectPath = StateMachine.context().projectPath; + const ballerinaFiles = await getBallerinaFiles(Uri.file(projectPath).fsPath); return new Promise((resolve, reject) => { StateMachine.langClient() @@ -1457,15 +1549,15 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async updateType(params: UpdateTypeRequest): Promise { - const projectUri = StateMachine.context().projectUri; - const filePath = path.join(projectUri, params.filePath); + const projectPath = StateMachine.context().projectPath; + const filePath = path.join(projectPath, params.filePath); return new Promise((resolve, reject) => { console.log(">>> updating type request", params.type); StateMachine.langClient() .updateType({ filePath, type: params.type, description: "" }) .then(async (updateTypeResponse: UpdateTypeResponse) => { console.log(">>> update type response", updateTypeResponse); - await updateSourceCode({ textEdits: updateTypeResponse.textEdits }, null, 'Type Update'); + await updateSourceCode({ textEdits: updateTypeResponse.textEdits, description: 'Type Update', identifier: params.type.name }); resolve(updateTypeResponse); }).catch((error) => { console.log(">>> error fetching types from ls", error); @@ -1569,15 +1661,28 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); } + async getExpressionTokens(params: ExpressionTokensRequest): Promise { + return new Promise((resolve) => { + StateMachine.langClient().getExpressionTokens(params) + .then((response) => { + resolve(response?.data || []); + }) + .catch((error) => { + console.log(">>> Error getting expression tokens", error); + resolve(undefined); + }); + }); + } + async createGraphqlClassType(params: UpdateTypeRequest): Promise { - const projectUri = StateMachine.context().projectUri; - const filePath = path.join(projectUri, params.filePath); + const projectPath = StateMachine.context().projectPath; + const filePath = path.join(projectPath, params.filePath); return new Promise((resolve, reject) => { StateMachine.langClient() .createGraphqlClassType({ filePath, type: params.type, description: "" }) .then(async (updateTypeResponse: UpdateTypeResponse) => { console.log(">>> create graphql class type response", updateTypeResponse); - await updateSourceCode({ textEdits: updateTypeResponse.textEdits }, null, 'Graphql Class Type Creation'); + await updateSourceCode({ textEdits: updateTypeResponse.textEdits, description: 'Graphql Class Type Creation' }); resolve(updateTypeResponse); }).catch((error) => { console.log(">>> error fetching class type from ls", error); @@ -1601,7 +1706,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return new Promise(async (resolve) => { try { const res: SourceEditResponse = await StateMachine.langClient().updateClassField(params); - await updateSourceCode({ textEdits: res.textEdits }, null, 'Class Field Update'); + await updateSourceCode({ textEdits: res.textEdits, description: 'Class Field Update' }); resolve(res); } catch (error) { console.log(error); @@ -1613,7 +1718,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return new Promise(async (resolve) => { try { const res: SourceEditResponse = await StateMachine.langClient().updateServiceClass(params); - const artifacts = await updateSourceCode({ textEdits: res.textEdits }, null, 'Service Class Update'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, description: 'Service Class Update' }); resolve({ artifacts }); } catch (error) { console.log(error); @@ -1625,7 +1730,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return new Promise(async (resolve) => { try { const res: SourceEditResponse = await StateMachine.langClient().addClassField(params); - await updateSourceCode({ textEdits: res.textEdits }, null, 'Class Field Creation'); + await updateSourceCode({ textEdits: res.textEdits, description: 'Class Field Creation' }); resolve(res); } catch (error) { console.log(error); @@ -1634,8 +1739,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async renameIdentifier(params: RenameIdentifierRequest): Promise { - const projectUri = StateMachine.context().projectUri; - const filePath = path.join(projectUri, params.fileName); + const projectPath = StateMachine.context().projectPath; + const filePath = path.join(projectPath, params.fileName); const fileUri = Uri.file(filePath).toString(); const request: RenameRequest = { textDocument: { @@ -1647,7 +1752,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { try { const workspaceEdit = await StateMachine.langClient().rename(request); if (workspaceEdit && 'changes' in workspaceEdit && workspaceEdit.changes) { - await updateSourceCode({ textEdits: workspaceEdit.changes }, null, 'Rename for ' + params.newName); + await updateSourceCode({ textEdits: workspaceEdit.changes, description: 'Rename for ' + params.newName, isRenameOperation: true }); } } catch (error) { console.error('Error in renameIdentifier:', error); @@ -1709,8 +1814,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { let hasComponent = false; let hasLocalChanges = false; try { - const projectRoot = StateMachine.context().projectUri; - const repoRoot = getRepoRoot(projectRoot); + const projectPath = StateMachine.context().projectPath; + const repoRoot = getRepoRoot(projectPath); if (repoRoot) { const contextYamlPath = path.join(repoRoot, ".choreo", "context.yaml"); if (fs.existsSync(contextYamlPath)) { @@ -1723,10 +1828,10 @@ export class BiDiagramRpcManager implements BIDiagramAPI { return { hasComponent: hasContextYaml, isLoggedIn: false }; } const platformExtAPI: IWso2PlatformExtensionAPI = await platformExt.activate(); - hasLocalChanges = await platformExtAPI.localRepoHasChanges(projectRoot); + hasLocalChanges = await platformExtAPI.localRepoHasChanges(projectPath); isLoggedIn = platformExtAPI.isLoggedIn(); if (isLoggedIn) { - const components = platformExtAPI.getDirectoryComponents(projectRoot); + const components = platformExtAPI.getDirectoryComponents(projectPath); hasComponent = components.length > 0; return { isLoggedIn, hasComponent, hasLocalChanges }; } @@ -1784,15 +1889,15 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async updateTypes(params: UpdateTypesRequest): Promise { return new Promise((resolve, reject) => { - const projectUri = StateMachine.context().projectUri; - const completeFilePath = path.join(projectUri, params.filePath); + const projectPath = StateMachine.context().projectPath; + const completeFilePath = path.join(projectPath, params.filePath); StateMachine.langClient().updateTypes( { filePath: completeFilePath, types: params.types } ).then(async (updateTypesresponse: UpdateTypesResponse) => { console.log(">>> update type response", updateTypesresponse); if (updateTypesresponse.textEdits) { - await updateSourceCode({ textEdits: updateTypesresponse.textEdits }, null, 'Type Update'); + await updateSourceCode({ textEdits: updateTypesresponse.textEdits, description: 'Type Update' }); resolve(updateTypesresponse); } else { console.log(">>> error updating types", updateTypesresponse?.errorMsg); @@ -1828,7 +1933,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async generateOpenApiClient(params: OpenAPIClientGenerationRequest): Promise { return new Promise((resolve, reject) => { - const projectPath = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; const request: OpenAPIClientGenerationRequest = { openApiContractPath: params.openApiContractPath, projectPath: projectPath, @@ -1862,7 +1967,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getOpenApiGeneratedModules(params: OpenAPIGeneratedModulesRequest): Promise { return new Promise((resolve, reject) => { - const projectPath = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; const request: OpenAPIGeneratedModulesRequest = { projectPath: projectPath }; @@ -1877,7 +1982,7 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async deleteOpenApiGeneratedModules(params: OpenAPIClientDeleteRequest): Promise { return new Promise((resolve, reject) => { - const projectPath = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; const request: OpenAPIClientDeleteRequest = { projectPath: projectPath, module: params.module @@ -1912,8 +2017,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async getTypeFromJson(params: JsonToTypeRequest): Promise { return new Promise((resolve, reject) => { - const projectUri = StateMachine.context().projectUri; - const filePath = path.join(projectUri, 'types.bal'); + const projectPath = StateMachine.context().projectPath; + const filePath = path.join(projectPath, 'types.bal'); StateMachine.langClient().getTypeFromJson({ ...params, filePath }) .then((response) => { console.log(">>> type from json response", response); @@ -1928,12 +2033,12 @@ export class BiDiagramRpcManager implements BIDiagramAPI { async deleteType(params: DeleteTypeRequest): Promise { return new Promise((resolve, reject) => { - const projectUri = StateMachine.context().projectUri; - const filePath = path.join(projectUri, params.filePath); + const projectPath = StateMachine.context().projectPath; + const filePath = path.join(projectPath, params.filePath); StateMachine.langClient().deleteType({ filePath: filePath, lineRange: params.lineRange }) .then(async (deleteTypeResponse: DeleteTypeResponse) => { if (deleteTypeResponse.textEdits) { - await updateSourceCode({ textEdits: deleteTypeResponse.textEdits }, null, 'Type Deletion'); + await updateSourceCode({ textEdits: deleteTypeResponse.textEdits, description: 'Type Deletion' }); resolve(deleteTypeResponse); } else { reject(deleteTypeResponse.errorMsg); @@ -1945,8 +2050,8 @@ export class BiDiagramRpcManager implements BIDiagramAPI { } async verifyTypeDelete(params: VerifyTypeDeleteRequest): Promise { - const projectUri = StateMachine.context().projectUri; - const filePath = path.join(projectUri, params.filePath); + const projectPath = StateMachine.context().projectPath; + const filePath = path.join(projectPath, params.filePath); const request: VerifyTypeDeleteRequest = { filePath: filePath, @@ -1962,6 +2067,18 @@ export class BiDiagramRpcManager implements BIDiagramAPI { }); }); } + + async searchNodes(params: BISearchNodesRequest): Promise { + return new Promise((resolve, reject) => { + StateMachine.langClient().searchNodes(params).then((res) => { + resolve(res); + }).catch((error) => { + console.log(">>> error searching", error); + reject(error); + }); + }); + } + } export function getRepoRoot(projectRoot: string): string | undefined { @@ -1991,22 +2108,3 @@ export async function getBallerinaFiles(dir: string): Promise { } return files; } - -export async function extractImports(content: string, filePath: string): Promise { - const withoutSingleLineComments = content.replace(/\/\/.*$/gm, ""); - const withoutComments = withoutSingleLineComments.replace(/\/\*[\s\S]*?\*\//g, ""); - - const importRegex = /import\s+([\w\.\/]+)(?:\s+as\s+([\w]+))?;/g; - const imports: ImportStatement[] = []; - let match; - - while ((match = importRegex.exec(withoutComments)) !== null) { - const importStatement: ImportStatement = { moduleName: match[1] }; - if (match[2]) { - importStatement.alias = match[2]; - } - imports.push(importStatement); - } - - return { filePath, statements: imports }; -} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts index 82ab5d908c4..f618654ce4d 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-handler.ts @@ -20,26 +20,29 @@ import { BallerinaDiagnosticsRequest, CommandsRequest, - FileOrDirRequest, - GoToSourceRequest, - OpenExternalUrlRequest, - RunExternalCommandRequest, - ShowErrorMessageRequest, - WorkspaceFileRequest, + downloadSelectedSampleFromGithub, executeCommand, experimentalEnabled, + FileOrDirRequest, getBallerinaDiagnostics, getCurrentProjectTomlValues, getTypeCompletions, getWorkspaceFiles, getWorkspaceRoot, + getWorkspaceType, goToSource, + GoToSourceRequest, isNPSupported, openExternalUrl, + OpenExternalUrlRequest, runBackgroundTerminalCommand, + RunExternalCommandRequest, + SampleDownloadRequest, selectFileOrDirPath, selectFileOrFolderPath, - showErrorMessage + showErrorMessage, + ShowErrorMessageRequest, + WorkspaceFileRequest } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { CommonRpcManager } from "./rpc-manager"; @@ -60,4 +63,6 @@ export function registerCommonRpcHandlers(messenger: Messenger) { messenger.onRequest(getWorkspaceRoot, () => rpcManger.getWorkspaceRoot()); messenger.onNotification(showErrorMessage, (args: ShowErrorMessageRequest) => rpcManger.showErrorMessage(args)); messenger.onRequest(getCurrentProjectTomlValues, () => rpcManger.getCurrentProjectTomlValues()); + messenger.onRequest(getWorkspaceType, () => rpcManger.getWorkspaceType()); + messenger.onRequest(downloadSelectedSampleFromGithub, (args: SampleDownloadRequest) => rpcManger.downloadSelectedSampleFromGithub(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts index 5207d4d34a5..7afd0f10909 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/rpc-manager.ts @@ -31,26 +31,42 @@ import { FileOrDirResponse, GoToSourceRequest, OpenExternalUrlRequest, + PackageTomlValues, RunExternalCommandRequest, RunExternalCommandResponse, + SampleDownloadRequest, ShowErrorMessageRequest, SyntaxTree, - TomlValues, TypeResponse, WorkspaceFileRequest, WorkspaceRootResponse, WorkspacesFileResponse, + WorkspaceTypeResponse } from "@wso2/ballerina-core"; import child_process from 'child_process'; -import { Uri, commands, env, window, workspace, MarkdownString } from "vscode"; +import path from "path"; +import os from "os"; +import fs from "fs"; +import * as unzipper from 'unzipper'; +import { commands, env, MarkdownString, ProgressLocation, Uri, window, workspace } from "vscode"; import { URI } from "vscode-uri"; import { extension } from "../../BalExtensionContext"; import { StateMachine } from "../../stateMachine"; -import { goToSource } from "../../utils"; -import { askFileOrFolderPath, askFilePath, askProjectPath, BALLERINA_INTEGRATOR_ISSUES_URL, getUpdatedSource } from "./utils"; -import { parse } from 'toml'; -import * as fs from 'fs'; -import path from "path"; +import { + getProjectTomlValues, + goToSource +} from "../../utils"; +import { + askFileOrFolderPath, + askFilePath, + askProjectPath, + BALLERINA_INTEGRATOR_ISSUES_URL, + findWorkspaceTypeFromWorkspaceFolders, + getUpdatedSource, + handleDownloadFile, + selectSampleDownloadPath +} from "./utils"; +import { VisualizerWebview } from "../../views/visualizer/webview"; export class CommonRpcManager implements CommonRPCAPI { async getTypeCompletions(): Promise { @@ -78,8 +94,8 @@ export class CommonRpcManager implements CommonRPCAPI { async goToSource(params: GoToSourceRequest): Promise { const context = StateMachine.context(); let filePath = params?.filePath || context.documentUri!; - if (params?.fileName && context?.projectUri) { - filePath = path.join(context.projectUri, params.fileName); + if (params?.fileName && context?.projectPath) { + filePath = path.join(context.projectPath, params.fileName); } goToSource(params.position, filePath); } @@ -246,32 +262,157 @@ export class CommonRpcManager implements CommonRPCAPI { return extension.ballerinaExtInstance.isNPSupported; } - async getBallerinaProjectRoot(): Promise { - const workspaceFolders = workspace.workspaceFolders; - if (!workspaceFolders) { - throw new Error("No workspaces found."); + async getCurrentProjectTomlValues(): Promise> { + const tomlValues = await getProjectTomlValues(StateMachine.context().projectPath); + return tomlValues ?? {}; + } + + async getWorkspaceType(): Promise { + return await findWorkspaceTypeFromWorkspaceFolders(); + } + + + async downloadSelectedSampleFromGithub(params: SampleDownloadRequest): Promise { + const repoUrl = 'https://raw.githubusercontent.com/wso2/integration-samples/refs/heads/main/ballerina-integrator/samples/'; + const rawFileLink = repoUrl + params.zipFileName + '.zip'; + const defaultDownloadsPath = path.join(os.homedir(), 'Downloads'); // Construct the default downloads path + const pathFromDialog = await selectSampleDownloadPath(); + if (pathFromDialog === "") { + return false; } - const workspaceFolderPath = workspaceFolders[0].uri.fsPath; - // Check if workspaceFolderPath is a Ballerina project - // Assuming a Ballerina project must contain a 'Ballerina.toml' file - const ballerinaProjectFile = path.join(workspaceFolderPath, 'Ballerina.toml'); - if (fs.existsSync(ballerinaProjectFile)) { - return workspaceFolderPath; + const selectedPath = pathFromDialog === "" ? defaultDownloadsPath : pathFromDialog; + const filePath = path.join(selectedPath, params.zipFileName + '.zip'); + let isSuccess = false; + + if (fs.existsSync(filePath)) { + // already downloaded + isSuccess = true; + } else { + await window.withProgress({ + location: ProgressLocation.Notification, + title: 'Downloading file', + cancellable: true + }, async (progress, cancellationToken) => { + + let cancelled: boolean = false; + cancellationToken.onCancellationRequested(async () => { + cancelled = true; + // Clean up partial download + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); + } + }); + + try { + await handleDownloadFile(rawFileLink, filePath, progress); + isSuccess = true; + return; + } catch (error) { + window.showErrorMessage(`Error while downloading the file: ${error}`); + } + }); } - return null; - } - async getCurrentProjectTomlValues(): Promise { - const projectRoot = await this.getBallerinaProjectRoot(); - const ballerinaTomlPath = path.join(projectRoot, 'Ballerina.toml'); - if (fs.existsSync(ballerinaTomlPath)) { - const tomlContent = await fs.promises.readFile(ballerinaTomlPath, 'utf-8'); - try { - return parse(tomlContent); - } catch (error) { - console.error("Failed to load Ballerina.toml content", error); - return; + if (isSuccess) { + const successMsg = `The Integration sample file has been downloaded successfully to the following directory: ${filePath}.`; + const zipReadStream = fs.createReadStream(filePath); + if (fs.existsSync(path.join(selectedPath, params.zipFileName))) { + // already extracted + let uri = Uri.file(path.join(selectedPath, params.zipFileName)); + commands.executeCommand("vscode.openFolder", uri, true); + return true; } + + let extractionError: Error | null = null; + const parseStream = unzipper.Parse(); + + // Handle errors on the read stream + zipReadStream.on("error", (error) => { + extractionError = error; + window.showErrorMessage(`Failed to read zip file: ${error.message}`); + }); + + // Handle errors on the parse stream + parseStream.on("error", (error) => { + extractionError = error; + window.showErrorMessage(`Failed to parse zip file. The file may be corrupted: ${error.message}`); + }); + + parseStream.on("entry", function (entry) { + // Skip processing if we've already encountered an error + if (extractionError) { + entry.autodrain(); + return; + } + + var isDir = entry.type === "Directory"; + var fullpath = path.join(selectedPath, entry.path); + var directory = isDir ? fullpath : path.dirname(fullpath); + + try { + if (!fs.existsSync(directory)) { + fs.mkdirSync(directory, { recursive: true }); + } + } catch (error) { + extractionError = error as Error; + window.showErrorMessage(`Failed to create directory "${directory}": ${error instanceof Error ? error.message : String(error)}`); + entry.autodrain(); + return; + } + + if (!isDir) { + const writeStream = fs.createWriteStream(fullpath); + + // Handle write stream errors + writeStream.on("error", (error) => { + extractionError = error; + window.showErrorMessage(`Failed to write file "${fullpath}": ${error.message}. This may be due to insufficient disk space or permission issues.`); + entry.autodrain(); + }); + + // Handle entry stream errors + entry.on("error", (error) => { + extractionError = error; + window.showErrorMessage(`Failed to extract entry "${entry.path}": ${error.message}`); + writeStream.destroy(); + }); + + entry.pipe(writeStream); + } + }); + + parseStream.on("close", () => { + if (extractionError) { + console.error("Extraction failed:", extractionError); + window.showErrorMessage(`Sample extraction failed: ${extractionError.message}`); + return; + } + + console.log("Extraction complete!"); + window.showInformationMessage('Where would you like to open the project?', + { modal: true }, + 'Current Window', + 'New Window' + ).then(selection => { + if (selection === "Current Window") { + // Dispose the current webview + VisualizerWebview.currentPanel?.dispose(); + const folderUri = Uri.file(path.join(selectedPath, params.zipFileName)); + const workspaceFolders = workspace.workspaceFolders || []; + if (!workspaceFolders.some(folder => folder.uri.fsPath === folderUri.fsPath)) { + workspace.updateWorkspaceFolders(workspaceFolders.length, 0, { uri: folderUri }); + } + } else if (selection === "New Window") { + commands.executeCommand('vscode.openFolder', Uri.file(path.join(selectedPath, params.zipFileName))); + } + }); + }); + + zipReadStream.pipe(parseStream); + window.showInformationMessage( + successMsg, + ); } + return isSuccess; } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts index 73d9100ae37..fee5752c260 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/common/utils.ts @@ -16,13 +16,26 @@ * under the License. */ -import { NodePosition } from "@wso2/syntax-tree"; -import { Position, Range, Uri, window, workspace, WorkspaceEdit } from "vscode"; import * as os from 'os'; -import { TextEdit } from "@wso2/ballerina-core"; +import { NodePosition } from "@wso2/syntax-tree"; +import { Position, Progress, Range, Uri, window, workspace, WorkspaceEdit } from "vscode"; +import { PROJECT_KIND, ProjectInfo, TextEdit, WorkspaceTypeResponse } from "@wso2/ballerina-core"; +import axios from 'axios'; +import fs from 'fs'; +import { + checkIsBallerinaPackage, + checkIsBallerinaWorkspace, + getBallerinaPackages, + hasMultipleBallerinaPackages +} from '../../utils'; export const BALLERINA_INTEGRATOR_ISSUES_URL = "https://github.com/wso2/product-ballerina-integrator/issues"; +interface ProgressMessage { + message: string; + increment?: number; +} + export function getUpdatedSource( statement: string, currentFileContent: string, @@ -79,7 +92,7 @@ export async function askFilePath() { canSelectMany: false, defaultUri: Uri.file(os.homedir()), filters: { - 'Files': ['yaml', 'json', 'yml'] + 'Files': ['yaml', 'json', 'yml', 'graphql'] }, title: "Select a file", }); @@ -111,3 +124,129 @@ export async function applyBallerinaTomlEdit(tomlPath: Uri, textEdit: TextEdit) } }); } + +export async function selectSampleDownloadPath(): Promise { + const folderPath = await window.showOpenDialog({ title: 'Sample download directory', canSelectFolders: true, canSelectFiles: false, openLabel: 'Select Folder' }); + if (folderPath && folderPath.length > 0) { + const newlySelectedFolder = folderPath[0].fsPath; + return newlySelectedFolder; + } + return ""; +} + +async function downloadFile(url: string, filePath: string, progressCallback?: (downloadProgress: any) => void) { + const writer = fs.createWriteStream(filePath); + let totalBytes = 0; + try { + const response = await axios.get(url, { + responseType: 'stream', + headers: { + "User-Agent": "Mozilla/5.0" + }, + onDownloadProgress: (progressEvent) => { + totalBytes = progressEvent.total ?? 0; + if (totalBytes === 0) { + // Cannot calculate progress without total size + return; + } + const formatSize = (sizeInBytes: number) => { + const sizeInKB = sizeInBytes / 1024; + if (sizeInKB < 1024) { + return `${Math.floor(sizeInKB)} KB`; + } else { + return `${Math.floor(sizeInKB / 1024)} MB`; + } + }; + const progress = { + percentage: Math.round((progressEvent.loaded * 100) / totalBytes), + downloadedAmount: formatSize(progressEvent.loaded), + downloadSize: formatSize(totalBytes) + }; + if (progressCallback) { + progressCallback(progress); + } + } + }); + response.data.pipe(writer); + await new Promise((resolve, reject) => { + writer.on('finish', () => { + writer.close(); + resolve(); + }); + + writer.on('error', (error) => { + reject(error); + }); + }); + } catch (error) { + window.showErrorMessage(`Error while downloading the file: ${error}`); + throw error; + } +} + +export async function handleDownloadFile(rawFileLink: string, defaultDownloadsPath: string, progress: Progress) { + const handleProgress = (progressPercentage) => { + progress.report({ message: "Downloading file...", increment: progressPercentage }); + }; + try { + await downloadFile(rawFileLink, defaultDownloadsPath, handleProgress); + } catch (error) { + window.showErrorMessage(`Failed to download file: ${error}`); + } + progress.report({ message: "Download finished" }); +} + +export function findWorkspaceTypeFromProjectInfo(projectInfo: ProjectInfo): WorkspaceTypeResponse { + const projectType = projectInfo.projectKind; + switch (projectType) { + case PROJECT_KIND.WORKSPACE_PROJECT: + return { type: "BALLERINA_WORKSPACE" }; + case PROJECT_KIND.BUILD_PROJECT: + return { type: "SINGLE_PROJECT" }; + default: + return { type: "UNKNOWN" }; + } +} + +export async function findWorkspaceTypeFromWorkspaceFolders(): Promise { + const workspaceFolders = workspace.workspaceFolders; + if (!workspaceFolders) { + throw new Error("No workspaces found."); + } + + if (workspaceFolders.length > 1) { + let balPackagesCount = 0; + for (const folder of workspaceFolders) { + const packages = await getBallerinaPackages(folder.uri); + balPackagesCount += packages.length; + } + + const isWorkspaceFile = workspace.workspaceFile?.scheme === "file"; + if (balPackagesCount > 1) { + return isWorkspaceFile + ? { type: "VSCODE_WORKSPACE" } + : { type: "MULTIPLE_PROJECTS" }; + } + } else if (workspaceFolders.length === 1) { + const workspaceFolderPath = workspaceFolders[0].uri.fsPath; + + const isBallerinaWorkspace = await checkIsBallerinaWorkspace(Uri.file(workspaceFolderPath)); + if (isBallerinaWorkspace) { + return { type: "BALLERINA_WORKSPACE" }; + } + + const isBallerinaPackage = await checkIsBallerinaPackage(Uri.file(workspaceFolderPath)); + if (isBallerinaPackage) { + return { type: "SINGLE_PROJECT" }; + } + + const hasMultiplePackages = await hasMultipleBallerinaPackages(Uri.file(workspaceFolderPath)); + if (hasMultiplePackages) { + return { type: "MULTIPLE_PROJECTS" }; + } + + return { type: "UNKNOWN" }; + } + + return { type: "UNKNOWN" }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts index 98e04b388c2..d4d063a30e8 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-handler.ts @@ -24,7 +24,7 @@ import { addNewArrayElement, addSubMapping, AddSubMappingRequest, - AllDataMapperSourceRequest, + ClausePositionRequest, clearTypeCache, convertToQuery, ConvertToQueryRequest, @@ -37,12 +37,14 @@ import { deleteSubMapping, DeleteSubMappingRequest, DMModelRequest, - getAllDataMapperSource, + FieldPropertyRequest, + getClausePosition, getDataMapperCodedata, GetDataMapperCodedataRequest, getDataMapperModel, getDataMapperSource, getExpandedDMFromDMModel, + getFieldProperty, getInitialIDMSource, getProcessTypeReference, getProperty, @@ -55,7 +57,7 @@ import { mapWithTransformFn, ProcessTypeReferenceRequest, PropertyRequest, - VisualizableFieldsRequest + VisualizableFieldsRequest, } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { DataMapperRpcManager } from "./rpc-manager"; @@ -77,8 +79,9 @@ export function registerDataMapperRpcHandlers(messenger: Messenger) { messenger.onRequest(mapWithTransformFn, (args: MapWithFnRequest) => rpcManger.mapWithTransformFn(args)); messenger.onRequest(getDataMapperCodedata, (args: GetDataMapperCodedataRequest) => rpcManger.getDataMapperCodedata(args)); messenger.onRequest(getSubMappingCodedata, (args: GetSubMappingCodedataRequest) => rpcManger.getSubMappingCodedata(args)); - messenger.onRequest(getAllDataMapperSource, (args: AllDataMapperSourceRequest) => rpcManger.getAllDataMapperSource(args)); messenger.onRequest(getProperty, (args: PropertyRequest) => rpcManger.getProperty(args)); + messenger.onRequest(getFieldProperty, (args: FieldPropertyRequest) => rpcManger.getFieldProperty(args)); + messenger.onRequest(getClausePosition, (args: ClausePositionRequest) => rpcManger.getClausePosition(args)); messenger.onRequest(getExpandedDMFromDMModel, (args: DMModelRequest) => rpcManger.getExpandedDMFromDMModel(args)); messenger.onRequest(getProcessTypeReference, (args: ProcessTypeReferenceRequest) => rpcManger.getProcessTypeReference(args)); messenger.onRequest(clearTypeCache, () => rpcManger.clearTypeCache()); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts index a374db3a2b0..439a0d31391 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/rpc-manager.ts @@ -21,7 +21,8 @@ import { AddArrayElementRequest, AddClausesRequest, AddSubMappingRequest, - AllDataMapperSourceRequest, + ClausePositionRequest, + ClausePositionResponse, ClearTypeCacheResponse, ConvertToQueryRequest, DataMapperAPI, @@ -35,6 +36,7 @@ import { DMModelRequest, ExpandedDMModel, ExpandedDMModelResponse, + FieldPropertyRequest, GetDataMapperCodedataRequest, GetDataMapperCodedataResponse, GetSubMappingCodedataRequest, @@ -52,12 +54,8 @@ import { import { StateMachine } from "../../stateMachine"; import { - buildSourceRequests, - consolidateTextEdits, expandDMModel, - processSourceRequests, processTypeReference, - setHasStopped, updateAndRefreshDataMapper, updateSource } from "./utils"; @@ -228,27 +226,36 @@ export class DataMapperRpcManager implements DataMapperAPI { }); } - async getAllDataMapperSource(params: AllDataMapperSourceRequest): Promise { + async getProperty(params: PropertyRequest): Promise { return new Promise(async (resolve) => { - setHasStopped(false); + const property = await StateMachine + .langClient() + .getProperty(params) as PropertyResponse; - const sourceRequests = buildSourceRequests(params); - const responses = await processSourceRequests(sourceRequests); - const allTextEdits = consolidateTextEdits(responses, params.mappings.length); - resolve ({ textEdits: allTextEdits }); + resolve(property); }); } - async getProperty(params: PropertyRequest): Promise { + async getFieldProperty(params: FieldPropertyRequest): Promise { return new Promise(async (resolve) => { const property = await StateMachine .langClient() - .getProperty(params) as PropertyResponse; + .getFieldProperty(params) as PropertyResponse; resolve(property); }); } + async getClausePosition(params: ClausePositionRequest): Promise { + return new Promise(async (resolve) => { + const position: any = await StateMachine + .langClient() + .getClausePosition(params); + + resolve(position); + }); + } + async deleteMapping(params: DeleteMappingRequest): Promise { return new Promise(async (resolve) => { await StateMachine @@ -317,19 +324,8 @@ export class DataMapperRpcManager implements DataMapperAPI { async getExpandedDMFromDMModel(params: DMModelRequest): Promise { try { - const { model, rootViewId, options = {} } = params; - - // Validate input parameters - if (!model) { - throw new Error("DMModel is required for transformation"); - } - - if (!rootViewId) { - throw new Error("rootViewId is required for transformation"); - } - // Transform the model using the existing expansion logic - const expandedModel = expandDMModel(model, rootViewId); + const expandedModel = expandDMModel(params.model, params.rootViewId); return { expandedModel, @@ -421,4 +417,5 @@ export class DataMapperRpcManager implements DataMapperAPI { }); }); } + } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts index 471fc7261d5..b3357ad2696 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/data-mapper/utils.ts @@ -19,9 +19,6 @@ import { CodeData, ELineRange, Flow, - AllDataMapperSourceRequest, - DataMapperSourceRequest, - DataMapperSourceResponse, NodePosition, ProjectStructureArtifactResponse, TextEdit, @@ -33,7 +30,9 @@ import { IOTypeField, IORoot, ExpandModelOptions, - ExpandedDMModel + ExpandedDMModel, + MACHINE_VIEW, + IntermediateClauseType } from "@wso2/ballerina-core"; import { updateSourceCode, UpdateSourceCodeRequest } from "../../utils"; import { StateMachine, updateDataMapperView } from "../../stateMachine"; @@ -80,6 +79,12 @@ export async function fetchDataMapperCodeData( const response = await StateMachine .langClient() .getDataMapperCodedata({ filePath, codedata: modifiedCodeData, name: varName }); + if (response.codedata && StateMachine.context().view === MACHINE_VIEW.DataMapper) { + // Following is a temporary hack to remove the node property from the code data + // TODO: Remove this once the LS API is updated (https://github.com/wso2/product-ballerina-integrator/issues/1732) + const { node, ...cleanCodeData } = response.codedata; + return cleanCodeData; + } return response.codedata; } @@ -109,7 +114,7 @@ export async function updateSourceCodeIteratively(updateSourceCodeRequest: Updat const filePaths = Object.keys(textEdits); if (filePaths.length == 1) { - return await updateSourceCode(updateSourceCodeRequest, null, 'Data Mapper Update'); + return await updateSourceCode({ ...updateSourceCodeRequest, description: 'Data Mapper Update' }); } // TODO: Remove this once the designModelService/publishArtifacts API supports simultaneous file changes @@ -132,7 +137,7 @@ export async function updateSourceCodeIteratively(updateSourceCodeRequest: Updat let updatedArtifacts: ProjectStructureArtifactResponse[]; for (const request of requests) { - updatedArtifacts = await updateSourceCode(request, null, 'Data Mapper Update'); + updatedArtifacts = await updateSourceCode({ ...request, description: 'Data Mapper Update' }); } return updatedArtifacts; @@ -210,7 +215,7 @@ export async function updateSubMappingSource( name: string ): Promise { try { - await updateSourceCode({ textEdits }, null, 'Sub Mapping Update'); + await updateSourceCode({ textEdits: textEdits, description: 'Sub Mapping Update' }); return await fetchSubMappingCodeData(filePath, codedata, name); } catch (error) { console.error(`Failed to update source for sub mapping "${name}" in ${filePath}:`, error); @@ -291,6 +296,63 @@ function findVariableInFlowModel(flowModel: Flow, varName: string): CodeData | n return variableNode?.codedata || null; } +export async function extractVariableDefinitionSource( + filePath: string, + codeData: CodeData, + varName: string +): Promise { + try { + const variableCodeData = await fetchDataMapperCodeData(filePath, codeData, varName); + + if (!variableCodeData?.lineRange) { + return null; + } + + const fs = require('fs'); + const fileContent = fs.readFileSync(filePath, 'utf8'); + const lines = fileContent.split('\n'); + + const startLine = variableCodeData.lineRange.startLine.line; + const endLine = variableCodeData.lineRange.endLine.line; + + const variableLines = lines.slice(startLine, endLine + 1); + + const formattedCode = formatExtractedCode(variableLines); + return formattedCode; + } catch (error) { + console.error(`Failed to extract variable definition for "${varName}":`, error); + return null; + } +} + +// Formats extracted code lines by: +function formatExtractedCode(lines: string[]): string { + if (lines.length === 0) { + return ''; + } + + const nonEmptyLines = lines.filter(line => line.trim().length > 0); + if (nonEmptyLines.length === 0) { + return ''; + } + + const minIndent = Math.min( + ...nonEmptyLines.map(line => { + const match = line.match(/^(\s*)/); + return match ? match[1].length : 0; + }) + ); + + const formattedLines = lines.map(line => { + if (line.trim().length === 0) { + return ''; + } + return line.substring(minIndent); + }); + + return formattedLines.join('\n').trimEnd(); +} + /** * Applies a temporary hack to update the source code with a random string. * TODO: Remove this once the lang server is updated to return the new source code @@ -354,121 +416,6 @@ export async function refreshDataMapper( } } -/** - * Builds individual source requests from the provided parameters by mapping over each mapping. - */ -export function buildSourceRequests(params: AllDataMapperSourceRequest): DataMapperSourceRequest[] { - return params.mappings.map(mapping => ({ - filePath: params.filePath, - codedata: params.codedata, - varName: params.varName, - targetField: params.targetField, - mapping: mapping - })); -} - -/** - * Handles operation cancellation and error logging for each request. - */ -export async function processSourceRequests(requests: DataMapperSourceRequest[]): Promise[]> { - return Promise.allSettled( - requests.map(async (request) => { - if (getHasStopped()) { - throw new Error("Operation was stopped"); - } - try { - return await StateMachine.langClient().getDataMapperSource(request); - } catch (error) { - console.error("Error in getDataMapperSource:", error); - throw error; - } - }) - ); -} - -/** - * Consolidates text edits from multiple source responses into a single optimized collection. - */ -export function consolidateTextEdits( - responses: PromiseSettledResult[], - totalMappings: number -): { [key: string]: TextEdit[] } { - const allTextEdits: { [key: string]: TextEdit[] } = {}; - - responses.forEach((result, index) => { - if (result.status === 'fulfilled') { - console.log(`>>> Completed mapping ${index + 1}/${totalMappings}`); - mergeTextEdits(allTextEdits, result.value.textEdits); - } else { - console.error(`>>> Failed mapping ${index + 1}:`, result.reason); - } - }); - - return optimizeTextEdits(allTextEdits); -} - -/** - * Merges new text edits into the existing collection, grouping by file path. - */ -export function mergeTextEdits( - allTextEdits: { [key: string]: TextEdit[] }, - newTextEdits?: { [key: string]: TextEdit[] } -): void { - if (!newTextEdits) { return; } - - Object.entries(newTextEdits).forEach(([key, edits]) => { - if (!allTextEdits[key]) { - allTextEdits[key] = []; - } - allTextEdits[key].push(...edits); - }); -} - -/** - * Optimizes text edits by sorting and combining them into single edits per file. - */ -export function optimizeTextEdits(allTextEdits: { [key: string]: TextEdit[] }): { [key: string]: TextEdit[] } { - const optimizedEdits: { [key: string]: TextEdit[] } = {}; - - Object.entries(allTextEdits).forEach(([key, edits]) => { - if (edits.length === 0) { return; } - - const sortedEdits = sortTextEdits(edits); - const combinedEdit = combineTextEdits(sortedEdits); - - optimizedEdits[key] = [combinedEdit]; - }); - - return optimizedEdits; -} - -/** - * Sorts text edits by line number and character position to ensure proper ordering. - */ -export function sortTextEdits(edits: TextEdit[]): TextEdit[] { - return edits.sort((a, b) => { - if (a.range.start.line !== b.range.start.line) { - return a.range.start.line - b.range.start.line; - } - return a.range.start.character - b.range.start.character; - }); -} - -/** - * Combines multiple text edits into a single edit with comma-separated content. - */ -export function combineTextEdits(edits: TextEdit[]): TextEdit { - const formattedTexts = edits.map((edit, index) => { - const text = edit.newText.trim(); - return index < edits.length - 1 ? `${text},` : text; - }); - - return { - range: edits[0].range, - newText: formattedTexts.join('\n').trimStart() - }; -} - /** * Determines whether a variable declaration range is completely contained within an artifact's position range. */ @@ -518,7 +465,8 @@ export function expandDMModel( query: model.query, source: "", rootViewId, - triggerRefresh: model.triggerRefresh + triggerRefresh: model.triggerRefresh, + focusInputRootMap: model.focusInputRootMap }; } @@ -536,13 +484,18 @@ function processInputRoots(model: DMModel): IOType[] { inputs.push(input); } } + + model.focusInputRootMap = {}; const preProcessedModel: DMModel = { ...model, inputs, focusInputs }; - return inputs.map(input => processIORoot(input, preProcessedModel)); + return inputs.map(input => { + preProcessedModel.traversingRoot = input.name; + return processIORoot(input, preProcessedModel); + }); } /** @@ -591,7 +544,7 @@ function processTypeKind( /** * Processes an IORoot (input or output) into an IOType */ -function processIORoot(root: IORoot, model: DMModel): IOType { +export function processIORoot(root: IORoot, model: DMModel): IOType { const ioType = createBaseIOType(root); const typeSpecificProps = processTypeKind(root, root.name, model, new Set()); @@ -643,6 +596,9 @@ function processArray( let fieldId = generateFieldId(parentId, member.name); let isFocused = false; + let isGroupByIdUpdated = false; + const prevGroupById = model.groupById; + if (model.focusInputs) { const focusMember = model.focusInputs[parentId]; if (focusMember) { @@ -650,6 +606,15 @@ function processArray( parentId = member.name; fieldId = member.name; isFocused = true; + model.focusInputRootMap[fieldId] = model.traversingRoot; + + if(member.isSeq && model.query!.fromClause.properties.name === fieldId){ + const groupByClause = model.query!.intermediateClauses?.find(clause => clause.type === IntermediateClauseType.GROUP_BY); + if(groupByClause){ + model.groupById = groupByClause.properties.name; + isGroupByIdUpdated = true; + } + } } } @@ -666,6 +631,10 @@ function processArray( const typeSpecificProps = processTypeKind(member, parentId, model, visitedRefs); + if(isGroupByIdUpdated){ + model.groupById = prevGroupById; + } + return { ...ioType, ...typeSpecificProps @@ -759,13 +728,31 @@ function processTypeFields( if (!type.fields) { return []; } return type.fields.map(field => { - const fieldId = generateFieldId(parentId, field.name!); + let fieldId = generateFieldId(parentId, field.name!); + + let isFocused = false; + let isSeq = !!model.groupById; + if (model.focusInputs) { + const focusMember = model.focusInputs[fieldId]; + if (focusMember) { + field = focusMember; + fieldId = field.name; + isFocused = true; + model.focusInputRootMap[fieldId] = model.traversingRoot; + if (fieldId === model.groupById){ + isSeq = false; + } + } + } + const ioType: IOType = { id: fieldId, name: field.name, displayName: field.displayName, typeName: field.typeName, kind: field.kind, + ...(isFocused && { isFocused }), + ...(isSeq && { isSeq }), ...(field.optional !== undefined && { optional: field.optional }), ...(field.typeInfo && { typeInfo: field.typeInfo }) }; @@ -795,3 +782,4 @@ function processEnum( ...(member.optional !== undefined && { optional: member.optional }) })); } + diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts index 20a886773ef..4f73cf6b2c8 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/icp-service/rpc-manager.ts @@ -36,10 +36,10 @@ export class ICPServiceRpcManager implements ICPServiceAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectPath: string = context.projectUri; + const projectPath: string = context.projectPath; const param = { projectPath }; const res: TestSourceEditResponse = await context.langClient.addICP(param); - await updateSourceCode({ textEdits: res.textEdits }, null, 'ICP Creation'); + await updateSourceCode({ textEdits: res.textEdits, description: 'ICP Creation' }); const result: ICPEnabledResponse = await context.langClient.isIcpEnabled(param); resolve(result); } catch (error) { @@ -52,10 +52,10 @@ export class ICPServiceRpcManager implements ICPServiceAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectPath: string = context.projectUri; + const projectPath: string = context.projectPath; const param = { projectPath }; const res: TestSourceEditResponse = await context.langClient.disableICP(param); - await updateSourceCode({ textEdits: res.textEdits }, null, 'ICP Disable'); + await updateSourceCode({ textEdits: res.textEdits, description: 'ICP Disable' }); const result: ICPEnabledResponse = await context.langClient.isIcpEnabled(param); resolve(result); } catch (error) { @@ -69,7 +69,7 @@ export class ICPServiceRpcManager implements ICPServiceAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectPath: string = context.projectUri; + const projectPath: string = context.projectPath; const param = { projectPath }; const res: ICPEnabledResponse = await context.langClient.isIcpEnabled(param); resolve(res); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-handler.ts index 120e15d7bac..26e1871d0dc 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-handler.ts @@ -45,6 +45,7 @@ import { didOpen, getBallerinaProjectComponents, getBallerinaVersion, + isSupportedSLVersion, getCompletion, getDefinitionPosition, getDiagnostics, @@ -66,7 +67,8 @@ import { getTypesFromFnDefinition, rename, stModify, - updateFileContent + updateFileContent, + SemanticVersion } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { LangClientRpcManager } from "./rpc-manager"; @@ -78,6 +80,7 @@ export function registerLangClientRpcHandlers(messenger: Messenger) { messenger.onRequest(getSTByRange, (args: BallerinaSTParams) => rpcManger.getSTByRange(args)); messenger.onRequest(getBallerinaProjectComponents, (args: BallerinaPackagesParams) => rpcManger.getBallerinaProjectComponents(args)); messenger.onRequest(getBallerinaVersion, () => rpcManger.getBallerinaVersion()); + messenger.onRequest(isSupportedSLVersion, (args: SemanticVersion) => rpcManger.isSupportedSLVersion(args)); messenger.onRequest(getCompletion, (args: CompletionRequest) => rpcManger.getCompletion(args)); messenger.onRequest(getDiagnostics, (args: SyntaxTreeParams) => rpcManger.getDiagnostics(args)); messenger.onRequest(getProjectDiagnostics, (args: ProjectDiagnosticsRequest) => rpcManger.getProjectDiagnostics(args)); diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-manager.ts index c6d7f63b837..ce3f5d9ab22 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/lang-client/rpc-manager.ts @@ -22,6 +22,7 @@ import { BallerinaProjectComponents, BallerinaSTParams, BallerinaVersionResponse, + SemanticVersion, CodeActionRequest, CodeActionResponse, CompletionRequest, @@ -63,6 +64,7 @@ import { URI } from "vscode-uri"; import { extension } from "../../BalExtensionContext"; import { StateMachine } from "../../stateMachine"; import { modifyFileContent } from "../../utils/modification"; +import { isSupportedSLVersion as isSupportedSLVersionUtil } from "../../utils/config"; export class LangClientRpcManager implements LangClientAPI { @@ -283,6 +285,10 @@ export class LangClientRpcManager implements LangClientAPI { }); } + async isSupportedSLVersion(params: SemanticVersion): Promise { + return isSupportedSLVersionUtil(extension.ballerinaExtInstance, params); + } + async getPackageComponentModels(params: ComponentModelsParams): Promise { return new Promise(async (resolve) => { const components = await StateMachine.langClient().getPackageComponentModels(params) as ComponentModels; diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-handler.ts index 157bd86354d..b36acc83ff5 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-handler.ts @@ -26,19 +26,25 @@ import { MigrationToolPullRequest, openMigrationReport, OpenMigrationReportRequest, + openSubProjectReport, + OpenSubProjectReportRequest, pullMigrationTool, saveMigrationReport, - SaveMigrationReportRequest + SaveMigrationReportRequest, + storeSubProjectReports, + StoreSubProjectReportsRequest } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { MigrateIntegrationRpcManager } from "./rpc-manager"; export function registerMigrateIntegrationRpcHandlers(messenger: Messenger) { - const rpcManger = new MigrateIntegrationRpcManager(); + const rpcManger = MigrateIntegrationRpcManager.getInstance(); messenger.onRequest(getMigrationTools, () => rpcManger.getMigrationTools()); messenger.onNotification(pullMigrationTool, (args: MigrationToolPullRequest) => rpcManger.pullMigrationTool(args)); messenger.onRequest(importIntegration, (args: ImportIntegrationRPCRequest) => rpcManger.importIntegration(args)); messenger.onNotification(openMigrationReport, (args: OpenMigrationReportRequest) => rpcManger.openMigrationReport(args)); + messenger.onNotification(openSubProjectReport, (args: OpenSubProjectReportRequest) => rpcManger.openSubProjectReport(args)); + messenger.onNotification(storeSubProjectReports, (args: StoreSubProjectReportsRequest) => rpcManger.storeSubProjectReports(args)); messenger.onNotification(saveMigrationReport, (args: SaveMigrationReportRequest) => rpcManger.saveMigrationReport(args)); messenger.onNotification(migrateProject, (args: MigrateRequest) => rpcManger.migrateProject(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-manager.ts index 65d64dc91f5..9aaeedbe363 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/migrate-integration/rpc-manager.ts @@ -25,14 +25,31 @@ import { MigrateIntegrationAPI, MigrateRequest, OpenMigrationReportRequest, - SaveMigrationReportRequest + OpenSubProjectReportRequest, + SaveMigrationReportRequest, + StoreSubProjectReportsRequest } from "@wso2/ballerina-core"; +import os from "os"; +import path from "path"; +import vscode from "vscode"; import { StateMachine } from "../../stateMachine"; import { createBIProjectFromMigration, getUsername, sanitizeName } from "../../utils/bi"; import { pullMigrationTool } from "../../utils/migrate-integration"; import { MigrationReportWebview } from "../../views/migration-report/webview"; export class MigrateIntegrationRpcManager implements MigrateIntegrationAPI { + private static instance: MigrateIntegrationRpcManager; + private subProjectReports: Map = new Map(); + + private constructor() { } + + public static getInstance(): MigrateIntegrationRpcManager { + if (!MigrateIntegrationRpcManager.instance) { + MigrateIntegrationRpcManager.instance = new MigrateIntegrationRpcManager(); + } + return MigrateIntegrationRpcManager.instance; + } + async pullMigrationTool(args: { toolName: string; version: string }): Promise { try { await pullMigrationTool(args.toolName, args.version); @@ -70,22 +87,115 @@ export class MigrateIntegrationRpcManager implements MigrateIntegrationAPI { MigrationReportWebview.createOrShow(params.fileName, params.reportContent); } - async saveMigrationReport(params: SaveMigrationReportRequest): Promise { - const vscode = await import('vscode'); - - // Show save dialog - const saveUri = await vscode.window.showSaveDialog({ - defaultUri: vscode.Uri.file(params.defaultFileName), - filters: { - 'HTML files': ['html'], - 'All files': ['*'] + async openSubProjectReport(params: OpenSubProjectReportRequest): Promise { + let reportContent = this.subProjectReports.get(params.projectName); + + // If not found, try with _ballerina suffix + if (!reportContent) { + reportContent = this.subProjectReports.get(`${params.projectName}_ballerina`); + } + + // If still not found, try to find a fuzzy match by checking all keys + if (!reportContent) { + const matchingKeys = Array.from(this.subProjectReports.keys()).filter(key => + key.startsWith(params.projectName) + ); + if (matchingKeys.length > 0) { + reportContent = this.subProjectReports.get(matchingKeys[0]); } + } + + if (!reportContent) { + const availableKeys = Array.from(this.subProjectReports.keys()); + throw new Error(`Report for project '${params.projectName}' not found. Available projects: ${availableKeys.join(', ')}`); + } + MigrationReportWebview.createOrShow(params.projectName, reportContent); + } + + async storeSubProjectReports(params: StoreSubProjectReportsRequest): Promise { + this.subProjectReports.clear(); + Object.entries(params.reports).forEach(([projectName, reportContent]) => { + this.subProjectReports.set(projectName, reportContent); }); + } - if (saveUri) { - // Write the report content to the selected file - await vscode.workspace.fs.writeFile(saveUri, Buffer.from(params.reportContent, 'utf8')); - vscode.window.showInformationMessage(`Migration report saved to ${saveUri.fsPath}`); + async saveMigrationReport(params: SaveMigrationReportRequest): Promise { + + // Check if this is a multi-project save (has projectReports) + const hasMultipleProjects = params.projectReports && Object.keys(params.projectReports).length > 0; + + if (hasMultipleProjects) { + // For multi-project scenarios, show folder dialog + // Default to workspace root, or home directory as fallback (works on all OSes) + let defaultUri: any; + if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) { + defaultUri = vscode.workspace.workspaceFolders[0].uri; + } else { + // Fall back to user's home directory (cross-platform) + defaultUri = vscode.Uri.file(os.homedir()); + } + + const folderUri = await vscode.window.showOpenDialog({ + canSelectFolders: true, + canSelectFiles: false, + canSelectMany: false, + defaultUri: defaultUri, + title: 'Select folder to save migration reports' + }); + + if (!folderUri || folderUri.length === 0) { + return; + } + + const baseDir = folderUri[0]; + + try { + // Write the aggregate report at the root + const aggregateReportPath = path.join(baseDir.fsPath, params.defaultFileName); + await vscode.workspace.fs.writeFile( + vscode.Uri.file(aggregateReportPath), + Buffer.from(params.reportContent, 'utf8') + ); + console.log(`Aggregate migration report saved to ${aggregateReportPath}`); + + // Write per-project reports in subdirectories + for (const [projectName, reportContent] of Object.entries(params.projectReports)) { + const projectDir = path.join(baseDir.fsPath, projectName); + const projectReportPath = path.join(projectDir, 'migration_report.html'); + + // Create project subdirectory if it doesn't exist + await vscode.workspace.fs.createDirectory(vscode.Uri.file(projectDir)); + + // Write project report + await vscode.workspace.fs.writeFile( + vscode.Uri.file(projectReportPath), + Buffer.from(reportContent, 'utf8') + ); + console.log(`Project migration report saved to ${projectReportPath}`); + } + + vscode.window.showInformationMessage( + `Migration reports saved successfully to ${baseDir.fsPath}` + ); + } catch (error) { + console.error('Failed to save multi-project migration reports:', error); + vscode.window.showErrorMessage(`Failed to save migration reports: ${error instanceof Error ? error.message : String(error)}`); + } + } else { + // Single project - use simple save dialog + const saveUri = await vscode.window.showSaveDialog({ + defaultUri: vscode.Uri.file(params.defaultFileName), + filters: { + 'HTML files': ['html'], + 'All files': ['*'] + } + }); + + if (saveUri) { + // Write the report content to the selected file + await vscode.workspace.fs.writeFile(saveUri, Buffer.from(params.reportContent, 'utf8')); + vscode.window.showInformationMessage(`Migration report saved to ${saveUri.fsPath}`); + } } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/record-creator/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/record-creator/rpc-manager.ts index bfdc3950e64..16561f73fc1 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/record-creator/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/record-creator/rpc-manager.ts @@ -44,8 +44,8 @@ export class RecordCreatorRpcManager implements RecordCreatorAPI { } async convertJsonToRecordType(params: JsonToRecordParams): Promise { - const projectUri = StateMachine.context().projectUri; - const filePathUri = path.join(projectUri, 'types.bal'); + const projectPath = StateMachine.context().projectPath; + const filePathUri = path.join(projectPath, 'types.bal'); return new Promise(async (resolve) => { const response = await StateMachine.langClient().convertJsonToRecordType({ ...params, @@ -56,8 +56,8 @@ export class RecordCreatorRpcManager implements RecordCreatorAPI { } async convertXmlToRecordType(params: XMLToRecordParams): Promise { - const projectUri = StateMachine.context().projectUri; - const filePath = path.join(projectUri, 'types.bal'); + const projectPath = StateMachine.context().projectPath; + const filePath = path.join(projectPath, 'types.bal'); return new Promise(async (resolve) => { const response = await StateMachine.langClient().convertXmlToRecordType({ ...params, diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-handler.ts index 2dabb631e0f..291c9261086 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-handler.ts @@ -22,11 +22,13 @@ import { addListenerSourceCode, addResourceSourceCode, addServiceSourceCode, + createServiceAndListener, exportOASFile, ExportOASRequest, FunctionFromSourceRequest, FunctionModelRequest, FunctionSourceCodeRequest, + generateExamplePayloadJson, getFunctionFromSource, getFunctionModel, getHttpResourceModel, @@ -34,6 +36,7 @@ import { getListenerModelFromCode, getListeners, getResourceReturnTypes, + getServiceInitModel, getServiceModel, getServiceModelFromCode, getTriggerModels, @@ -42,7 +45,9 @@ import { ListenerModelRequest, ListenerSourceCodeRequest, ListenersRequest, + PayloadContext, ResourceReturnTypesRequest, + ServiceInitSourceRequest, ServiceModelFromCodeRequest, ServiceModelRequest, ServiceSourceCodeRequest, @@ -74,4 +79,7 @@ export function registerServiceDesignerRpcHandlers(messenger: Messenger) { messenger.onRequest(addResourceSourceCode, (args: FunctionSourceCodeRequest) => rpcManger.addResourceSourceCode(args)); messenger.onRequest(addFunctionSourceCode, (args: FunctionSourceCodeRequest) => rpcManger.addFunctionSourceCode(args)); messenger.onRequest(updateResourceSourceCode, (args: FunctionSourceCodeRequest) => rpcManger.updateResourceSourceCode(args)); + messenger.onRequest(getServiceInitModel, (args: ServiceModelRequest) => rpcManger.getServiceInitModel(args)); + messenger.onRequest(createServiceAndListener, (args: ServiceInitSourceRequest) => rpcManger.createServiceAndListener(args)); + messenger.onRequest(generateExamplePayloadJson, (args: PayloadContext) => rpcManger.generateExamplePayloadJson(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts index c180b7d875a..040e97d28cb 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/service-designer/rpc-manager.ts @@ -37,18 +37,22 @@ import { ListenersRequest, ListenersResponse, OpenAPISpec, + PayloadContext, ResourceReturnTypesRequest, - ResourceReturnTypesResponse, ResourceSourceCodeResponse, ServiceDesignerAPI, + ServiceInitSourceRequest, ServiceModelFromCodeRequest, ServiceModelFromCodeResponse, + ServiceModelInitResponse, ServiceModelRequest, ServiceModelResponse, ServiceSourceCodeRequest, + SourceEditResponse, TriggerModelsRequest, TriggerModelsResponse, - UpdatedArtifactsResponse + UpdatedArtifactsResponse, + VisibleTypesResponse } from "@wso2/ballerina-core"; import * as fs from 'fs'; import * as yaml from 'js-yaml'; @@ -57,6 +61,7 @@ import { window, workspace } from "vscode"; import { extension } from "../../BalExtensionContext"; import { StateMachine } from "../../stateMachine"; import { updateSourceCode } from "../../utils/source-utils"; +import { generateExamplePayload } from "../../features/ai/service/editor/payload-json/payload_json"; export class ServiceDesignerRpcManager implements ServiceDesignerAPI { @@ -96,8 +101,8 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectDir = path.join(StateMachine.context().projectUri); - const targetFile = path.join(projectDir, `main.bal`); + const projectPath = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectPath, `main.bal`); this.ensureFileExists(targetFile); params.filePath = targetFile; const res: ListenersResponse = await context.langClient.getListeners(params); @@ -124,12 +129,12 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectDir = path.join(StateMachine.context().projectUri); - const targetFile = path.join(projectDir, `main.bal`); + const projectPath = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectPath, `main.bal`); this.ensureFileExists(targetFile); params.filePath = targetFile; const res: ListenerSourceCodeResponse = await context.langClient.addListenerSourceCode(params); - const artifacts = await updateSourceCode({ textEdits: res.textEdits, resolveMissingDependencies: true }, { artifactType: DIRECTORY_MAP.LISTENER }, params.listener.name + ' Creation'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, resolveMissingDependencies: true, artifactData: { artifactType: DIRECTORY_MAP.LISTENER }, description: params.listener.name + ' Creation' }); const result: UpdatedArtifactsResponse = { artifacts: artifacts }; @@ -161,12 +166,12 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectDir = path.join(StateMachine.context().projectUri); - const targetFile = path.join(projectDir, `main.bal`); + const projectPath = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectPath, `main.bal`); this.ensureFileExists(targetFile); params.filePath = targetFile; const res: ListenerSourceCodeResponse = await context.langClient.updateListenerSourceCode(params); - const artifacts = await updateSourceCode(res, { artifactType: DIRECTORY_MAP.LISTENER }, params.listener.name + ' Update'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, artifactData: { artifactType: DIRECTORY_MAP.LISTENER }, description: params.listener.name + ' Update' }); const result: UpdatedArtifactsResponse = { artifacts: artifacts }; @@ -181,8 +186,8 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectDir = path.join(StateMachine.context().projectUri); - const targetFile = path.join(projectDir, `main.bal`); + const projectPath = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectPath, `main.bal`); this.ensureFileExists(targetFile); params.filePath = targetFile; const res: ServiceModelResponse = await context.langClient.getServiceModel(params); @@ -197,8 +202,8 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectDir = path.join(StateMachine.context().projectUri); - const targetFile = path.join(projectDir, `main.bal`); + const projectPath = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectPath, `main.bal`); this.ensureFileExists(targetFile); params.filePath = targetFile; const identifiers = []; @@ -221,7 +226,7 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { } } const res: ListenerSourceCodeResponse = await context.langClient.addServiceSourceCode(params); - const artifacts = await updateSourceCode(res, { artifactType: DIRECTORY_MAP.SERVICE }, params.service.name + ' Creation'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, artifactData: { artifactType: DIRECTORY_MAP.SERVICE }, description: params.service.name + ' Creation' }); let result: UpdatedArtifactsResponse = { artifacts: artifacts }; @@ -236,8 +241,8 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectDir = path.join(StateMachine.context().projectUri); - const targetFile = path.join(projectDir, `main.bal`); + const projectPath = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectPath, `main.bal`); this.ensureFileExists(targetFile); params.filePath = targetFile; const identifiers = []; @@ -248,7 +253,7 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { } } const res: ListenerSourceCodeResponse = await context.langClient.updateServiceSourceCode(params); - const artifacts = await updateSourceCode(res, { artifactType: DIRECTORY_MAP.SERVICE }, params.service.name + ' Update'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, artifactData: { artifactType: DIRECTORY_MAP.SERVICE }, description: params.service.name + ' Update' }); const result: UpdatedArtifactsResponse = { artifacts: artifacts }; @@ -293,14 +298,14 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { return new Promise(async (resolve) => { const context = StateMachine.context(); try { - const projectDir = path.join(StateMachine.context().projectUri); + const projectPath = path.join(StateMachine.context().projectPath); if (!params.filePath) { - const targetFile = path.join(projectDir, `main.bal`); + const targetFile = path.join(projectPath, `main.bal`); this.ensureFileExists(targetFile); params.filePath = targetFile; } const res: ResourceSourceCodeResponse = await context.langClient.addResourceSourceCode(params); - const artifacts = await updateSourceCode(res, { artifactType: DIRECTORY_MAP.SERVICE }, 'Resource Creation'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, artifactData: { artifactType: DIRECTORY_MAP.SERVICE }, description: 'Resource Creation' }); const result: UpdatedArtifactsResponse = { artifacts: artifacts }; @@ -316,7 +321,7 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { const context = StateMachine.context(); try { const res: ResourceSourceCodeResponse = await context.langClient.updateResourceSourceCode(params); - const artifacts = await updateSourceCode(res, null, 'Resource Update'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, artifactData: params.artifactType ? { artifactType: params.artifactType } : null, description: 'Resource Update' }); const result: UpdatedArtifactsResponse = { artifacts: artifacts }; @@ -344,7 +349,7 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { const context = StateMachine.context(); try { const res: ResourceSourceCodeResponse = await context.langClient.addFunctionSourceCode(params); - const artifacts = await updateSourceCode(res, null, 'Function Creation'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, artifactData: params.artifactType ? { artifactType: params.artifactType } : { artifactType: DIRECTORY_MAP.FUNCTION }, description: 'Function Creation' }); const result: UpdatedArtifactsResponse = { artifacts: artifacts }; @@ -388,13 +393,12 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { } } - async getResourceReturnTypes(params: ResourceReturnTypesRequest): Promise { + async getResourceReturnTypes(params: ResourceReturnTypesRequest): Promise { return new Promise(async (resolve) => { const context = StateMachine.context(); - params.filePath = StateMachine.context().projectUri; - params.context = "HTTP_STATUS_CODE"; + params.filePath = params.filePath || context.projectPath; try { - const res: ResourceReturnTypesResponse = await context.langClient.getResourceReturnTypes(params); + const res: VisibleTypesResponse = await context.langClient.getResourceReturnTypes(params); resolve(res); } catch (error) { console.log(">>> error fetching resource return types", error); @@ -413,4 +417,67 @@ export class ServiceDesignerRpcManager implements ServiceDesignerAPI { } }); } + + async getServiceInitModel(params: ServiceModelRequest): Promise { + return new Promise(async (resolve) => { + const context = StateMachine.context(); + try { + const projectDir = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectDir, `main.bal`); + this.ensureFileExists(targetFile); + params.filePath = targetFile; + const res: ServiceModelInitResponse = await context.langClient.getServiceInitModel(params); + resolve(res); + } catch (error) { + console.log(error); + } + }); + } + + async createServiceAndListener(params: ServiceInitSourceRequest): Promise { + return new Promise(async (resolve) => { + const context = StateMachine.context(); + try { + const projectDir = path.join(StateMachine.context().projectPath); + const targetFile = path.join(projectDir, `main.bal`); + this.ensureFileExists(targetFile); + params.filePath = targetFile; + const identifiers = []; + for (let property in params.serviceInitModel.properties) { + const value = params.serviceInitModel.properties[property].value + || params.serviceInitModel.properties[property].values?.at(0); + if (value) { + identifiers.push(value); + } + if (params.serviceInitModel.properties[property].choices) { + params.serviceInitModel.properties[property].choices.forEach(choice => { + if (choice.properties) { + Object.keys(choice.properties).forEach(subProperty => { + const subPropertyValue = choice.properties[subProperty].value; + if (subPropertyValue) { + identifiers.push(subPropertyValue); + } + }); + } + }); + } + } + const res: SourceEditResponse = await context.langClient.createServiceAndListener(params); + + const edits = { textEdits: res.textEdits, resolveMissingDependencies: false }; + + const artifacts = await updateSourceCode({ ...edits, artifactData: { artifactType: DIRECTORY_MAP.SERVICE }, description: 'Service and Listener Creation' }); + let result: UpdatedArtifactsResponse = { + artifacts: artifacts + }; + resolve(result); + } catch (error) { + console.log(error); + } + }); + } + + async generateExamplePayloadJson(params: PayloadContext): Promise { + return await generateExamplePayload(params); + } } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts index ec0030b8398..40bf18f8eb5 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/test-manager/rpc-manager.ts @@ -44,7 +44,7 @@ export class TestServiceManagerRpcManager implements TestManagerServiceAPI { startColumn: params.function.codedata.lineRange.startLine.offset }; const res: TestSourceEditResponse = await context.langClient.updateTestFunction(params); - const artifacts = await updateSourceCode({ textEdits: res.textEdits }, null, 'Test Function Update'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, description: 'Test Function Update' }); const result: SourceUpdateResponse = { artifacts: artifacts }; @@ -63,7 +63,7 @@ export class TestServiceManagerRpcManager implements TestManagerServiceAPI { const targetFile = params.filePath; params.filePath = targetFile; const res: TestSourceEditResponse = await context.langClient.addTestFunction(params); - const artifacts = await updateSourceCode({ textEdits: res.textEdits }, null, 'Test Function Creation'); + const artifacts = await updateSourceCode({ textEdits: res.textEdits, description: 'Test Function Creation' }); const result: SourceUpdateResponse = { artifacts: artifacts }; diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts index 72023e8f11a..dc8dee2b991 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-handler.ts @@ -28,11 +28,15 @@ import { goSelected, HistoryEntry, joinProjectPath, + JoinProjectPathRequest, openView, OpenViewRequest, redo, + resetUndoRedoStack, undo, - undoRedoState + undoRedoState, + updateCurrentArtifactLocation, + UpdatedArtifactsResponse } from "@wso2/ballerina-core"; import { Messenger } from "vscode-messenger"; import { VisualizerRpcManager } from "./rpc-manager"; @@ -49,6 +53,8 @@ export function registerVisualizerRpcHandlers(messenger: Messenger) { messenger.onRequest(redo, (count: number) => rpcManger.redo(count)); messenger.onNotification(addToUndoStack, (args: AddToUndoStackRequest) => rpcManger.addToUndoStack(args)); messenger.onRequest(undoRedoState, () => rpcManger.undoRedoState()); - messenger.onRequest(joinProjectPath, (args: string | string[]) => rpcManger.joinProjectPath(args)); + messenger.onNotification(resetUndoRedoStack, () => rpcManger.resetUndoRedoStack()); + messenger.onRequest(joinProjectPath, (args: JoinProjectPathRequest) => rpcManger.joinProjectPath(args)); messenger.onRequest(getThemeKind, () => rpcManger.getThemeKind()); + messenger.onRequest(updateCurrentArtifactLocation, (args: UpdatedArtifactsResponse) => rpcManger.updateCurrentArtifactLocation(args)); } diff --git a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts index 2d67a76554c..810097dd469 100644 --- a/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts +++ b/workspaces/ballerina/ballerina-extension/src/rpc-managers/visualizer/rpc-manager.ts @@ -20,24 +20,26 @@ import { ColorThemeKind, EVENT_TYPE, HistoryEntry, + JoinProjectPathRequest, + JoinProjectPathResponse, MACHINE_VIEW, OpenViewRequest, PopupVisualizerLocation, + ProjectStructureArtifactResponse, SHARED_COMMANDS, + undo, UndoRedoStateResponse, - UpdateUndoRedoMangerRequest, + UpdatedArtifactsResponse, VisualizerAPI, - VisualizerLocation, - vscode, + VisualizerLocation } from "@wso2/ballerina-core"; +import fs from "fs"; import { commands, Range, Uri, window, workspace, WorkspaceEdit } from "vscode"; import { URI, Utils } from "vscode-uri"; -import fs from "fs"; +import { notifyCurrentWebview } from "../../RPCLayer"; import { history, openView, StateMachine, undoRedoManager, updateView } from "../../stateMachine"; import { openPopupView } from "../../stateMachinePopup"; import { ArtifactNotificationHandler, ArtifactsUpdated } from "../../utils/project-artifacts-handler"; -import { notifyCurrentWebview } from "../../RPCLayer"; -import { updateCurrentArtifactLocation } from "../../utils/state-machine-utils"; import { refreshDataMapper } from "../data-mapper/utils"; export class VisualizerRpcManager implements VisualizerAPI { @@ -46,7 +48,7 @@ export class VisualizerRpcManager implements VisualizerAPI { return new Promise(async (resolve) => { if (params.isPopup) { const view = params.location.view; - if (view && view === MACHINE_VIEW.Overview) { + if (view && view === MACHINE_VIEW.PackageOverview) { openPopupView(EVENT_TYPE.CLOSE_VIEW, params.location as PopupVisualizerLocation); } else { openPopupView(params.type, params.location as PopupVisualizerLocation); @@ -68,8 +70,17 @@ export class VisualizerRpcManager implements VisualizerAPI { goHome(): void { history.clear(); + const isWithinBallerinaWorkspace = !!StateMachine.context().workspacePath; commands.executeCommand(SHARED_COMMANDS.FORCE_UPDATE_PROJECT_ARTIFACTS).then(() => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.Overview }, true); + openView( + EVENT_TYPE.OPEN_VIEW, + { + view: isWithinBallerinaWorkspace + ? MACHINE_VIEW.WorkspaceOverview + : MACHINE_VIEW.PackageOverview + }, + true + ); }); } @@ -109,9 +120,13 @@ export class VisualizerRpcManager implements VisualizerAPI { // Subscribe to artifact updated notifications let unsubscribe = notificationHandler.subscribe(ArtifactsUpdated.method, undefined, async (payload) => { console.log("Received notification:", payload); - updateCurrentArtifactLocation({ artifacts: payload.data }); + const currentArtifact = await this.updateCurrentArtifactLocation({ artifacts: payload.data }); clearTimeout(timeoutId); StateMachine.setReadyMode(); + if (!currentArtifact && StateMachine.context().view !== MACHINE_VIEW.InlineDataMapper) { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.PackageOverview }); + resolve("Undo successful"); // resolve the undo string + } notifyCurrentWebview(); await this.refreshDataMapperView(); unsubscribe(); @@ -123,7 +138,7 @@ export class VisualizerRpcManager implements VisualizerAPI { console.log("No artifact update notification received within 10 seconds"); unsubscribe(); StateMachine.setReadyMode(); - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.Overview }); + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.PackageOverview }); reject(new Error("Operation timed out. Please try again.")); }, 10000); @@ -154,7 +169,7 @@ export class VisualizerRpcManager implements VisualizerAPI { // Subscribe to artifact updated notifications let unsubscribe = notificationHandler.subscribe(ArtifactsUpdated.method, undefined, async (payload) => { console.log("Received notification:", payload); - updateCurrentArtifactLocation({ artifacts: payload.data }); + await this.updateCurrentArtifactLocation({ artifacts: payload.data }); clearTimeout(timeoutId); StateMachine.setReadyMode(); notifyCurrentWebview(); @@ -168,7 +183,7 @@ export class VisualizerRpcManager implements VisualizerAPI { console.log("No artifact update notification received within 10 seconds"); unsubscribe(); StateMachine.setReadyMode(); - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.Overview }); + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.PackageOverview }); reject(new Error("Operation timed out. Please try again.")); }, 10000); @@ -189,20 +204,91 @@ export class VisualizerRpcManager implements VisualizerAPI { undoRedoManager.commitBatchOperation(params.description); } + resetUndoRedoStack(): void { + undoRedoManager.reset(); + } + async getThemeKind(): Promise { return new Promise((resolve) => { resolve(window.activeColorTheme.kind); }); } - async joinProjectPath(segments: string | string[]): Promise { + async joinProjectPath(params: JoinProjectPathRequest): Promise { return new Promise((resolve) => { - const projectPath = StateMachine.context().projectUri; - const filePath = Array.isArray(segments) ? Utils.joinPath(URI.file(projectPath), ...segments) : Utils.joinPath(URI.file(projectPath), segments); - resolve(filePath.fsPath); + let projectPath = StateMachine.context().projectPath; + // If code data is provided, try to find the project path from the project structure + if (params.codeData && params.codeData.packageName) { + const packageInfo = StateMachine.context().projectStructure.projects.find(project => { + console.log(">>> project", project); + return project.projectName === params.codeData.packageName; + }); + if (packageInfo) { + projectPath = packageInfo.projectPath; + } + } + if (!projectPath) { + resolve({ filePath: "", projectPath: "" }); + return; + } + const filePath = Array.isArray(params.segments) ? Utils.joinPath(URI.file(projectPath), ...params.segments) : Utils.joinPath(URI.file(projectPath), params.segments); + resolve({ filePath: filePath.fsPath, projectPath: projectPath }); }); } async undoRedoState(): Promise { return undoRedoManager.getUIState(); } + + async updateCurrentArtifactLocation(params: UpdatedArtifactsResponse): Promise { + return new Promise((resolve) => { + if (params.artifacts.length === 0) { + resolve(undefined); + return; + } + console.log(">>> Updating current artifact location", { artifacts: params.artifacts }); + // Get the updated component and update the location + const currentIdentifier = StateMachine.context().identifier; + const currentType = StateMachine.context().type; + const parentIdentifier = StateMachine.context().parentIdentifier; + + // Find the correct artifact by currentIdentifier (id) + let currentArtifact = undefined; + for (const artifact of params.artifacts) { + if (currentType && currentType.codedata.node === "CLASS" && currentType.name === artifact.name) { + currentArtifact = artifact; + if (artifact.resources && artifact.resources.length > 0) { + const resource = artifact.resources.find( + (resource) => resource.id === currentIdentifier || resource.name === currentIdentifier + ); + if (resource) { + currentArtifact = resource; + break; + } + } + + } else if (artifact.id === currentIdentifier || artifact.name === currentIdentifier) { + currentArtifact = artifact; + } + + // Check if parent artifact is matched and has resources and find within those + if (parentIdentifier && artifact.name === parentIdentifier && artifact.resources && artifact.resources.length > 0) { + const resource = artifact.resources.find( + (resource) => resource.id === currentIdentifier || resource.name === currentIdentifier + ); + if (resource) { + currentArtifact = resource; + } + } + } + + if (currentArtifact) { + openView(EVENT_TYPE.UPDATE_PROJECT_LOCATION, { + documentUri: currentArtifact.path, + position: currentArtifact.position, + identifier: currentIdentifier, + }); + } + resolve(currentArtifact); + }); + } } diff --git a/workspaces/ballerina/ballerina-extension/src/stateMachine.ts b/workspaces/ballerina/ballerina-extension/src/stateMachine.ts index 2c5c895700f..16586c0b920 100644 --- a/workspaces/ballerina/ballerina-extension/src/stateMachine.ts +++ b/workspaces/ballerina/ballerina-extension/src/stateMachine.ts @@ -2,35 +2,81 @@ import { ExtendedLangClient } from './core'; import { createMachine, assign, interpret } from 'xstate'; import { activateBallerina } from './extension'; -import { EVENT_TYPE, SyntaxTree, History, HistoryEntry, MachineStateValue, STByRangeRequest, SyntaxTreeResponse, IUndoRedoManager, VisualizerLocation, webviewReady, MACHINE_VIEW, DIRECTORY_MAP, SCOPE, ProjectStructureResponse, ArtifactData, ProjectStructureArtifactResponse, CodeData, getVisualizerLocation, ProjectDiagnosticsResponse } from "@wso2/ballerina-core"; +import { + EVENT_TYPE, + SyntaxTree, + History, + MachineStateValue, + IUndoRedoManager, + VisualizerLocation, + webviewReady, + MACHINE_VIEW, + DIRECTORY_MAP, + SCOPE, + ProjectStructureResponse, + ProjectStructureArtifactResponse, + CodeData, + ProjectDiagnosticsResponse, + Type, + dependencyPullProgress, + BI_COMMANDS, + NodePosition, + ProjectInfo +} from "@wso2/ballerina-core"; import { fetchAndCacheLibraryData } from './features/library-browser'; import { VisualizerWebview } from './views/visualizer/webview'; -import { commands, extensions, ShellExecution, Task, TaskDefinition, tasks, Uri, window, workspace, WorkspaceFolder } from 'vscode'; +import { commands, extensions, Uri, window, workspace, WorkspaceFolder } from 'vscode'; import { notifyCurrentWebview, RPCLayer } from './RPCLayer'; -import { generateUid, getComponentIdentifier, getNodeByIndex, getNodeByName, getNodeByUid, getView } from './utils/state-machine-utils'; +import { + generateUid, + getComponentIdentifier, + getNodeByIndex, + getNodeByName, + getNodeByUid, + getView +} from './utils/state-machine-utils'; import * as path from 'path'; -import * as fs from 'fs'; import { extension } from './BalExtensionContext'; -import { BiDiagramRpcManager } from './rpc-managers/bi-diagram/rpc-manager'; import { AIStateMachine } from './views/ai-panel/aiMachine'; import { StateMachinePopup } from './stateMachinePopup'; -import { checkIsBallerina, checkIsBI, fetchScope, getOrgPackageName, UndoRedoManager } from './utils'; -import { buildProjectArtifactsStructure } from './utils/project-artifacts'; +import { + checkIsBallerinaPackage, + checkIsBallerinaWorkspace, + checkIsBI, + fetchScope, + getOrgPackageName, + UndoRedoManager, + getOrgAndPackageName +} from './utils'; import { activateDevantFeatures } from './features/devant/activator'; +import { buildProjectsStructure } from './utils/project-artifacts'; +import { runCommandWithOutput } from './utils/runCommand'; +import { buildOutputChannel } from './utils/logger'; + +export interface ProjectMetadata { + readonly isBI: boolean; + readonly workspacePath?: string; + readonly projectPath?: string; + readonly scope?: SCOPE; + readonly orgName?: string; + readonly packageName?: string; +} interface MachineContext extends VisualizerLocation { langClient: ExtendedLangClient | null; isBISupported: boolean; errorCode: string | null; dependenciesResolved?: boolean; + isInDevant: boolean; } export let history: History; export let undoRedoManager: IUndoRedoManager; +let pendingProjectRootUpdateResolvers: Array<() => void> = []; const stateMachine = createMachine( { - /** @xstate-layout N4IgpgJg5mDOIC5QDUCWsCuBDANqgXmAE4DEASgKIDKFAKgPq0Dy9FAGrRQHJUCSTXepQCCAEQCaAbQAMAXUSgADgHtYqAC6plAOwUgAnogC0ARgDsAVgB0AZgvSHANhPS7Ji44BMAGhAAPRHsAFgBfEN80TFwCYitUbQ1UaMISCB0wOO0AN2UAawzI7DxCIkzE5LAEeJyAYyxNHRlZJr0VNQbdJH9ETyCgqwAOO2legE4gxwtLTxtfQwQTT1HpW1G18aCLAaCZsIj0IpjS+PLisBJiImVSxRx6gDNrgFsrQorjhM0KquzlOo6mi0um1Ejo9AEEL1+kN7GMJlMLDM5sYTHYrI5LA4bNILOYpgM9iA3mdSlgaposvUwAAZKipdKZHL5V4Hd5WMkUqm0n61epabSAuStVSgzqgCF2UZWIJmTyIkwDcYDcxBZELGzjaVjUYWUbbbEmUaE4lHdnk1CU9Q0umXa5WW4PZ4sqIks2cq3c6p-PmNORApQijrgxCS6Wy+WKoLKsyqgyIExBPXSxNrSwuBXSAnhIms104WAUIhXUiUWhkKRC4GB-nBhYDTxWQ2LMwKpUqnxx9WanYp3X66SG42501gPxW7RqHRkMBYCD6EhMAAK3HoyF4FAA6v6QCCg10Ib0BtLhjYXPZpMsBo41QmLNZPAMY2tXI4caMzEOXaasqgwAB3YRzSyDIf3-XhPnpbQMi9ZkTRKKxQIAoCQN-P9wI0HlvQBP1KwDdoay6eZz2ldYBgsbFT0TCxfAlcwrA8R8PBcNwPE-Q54MQwCKQyP8wAAIzQf9qWUWd4igSDoN+WDhw41CuItHj+MEv9hNE7QoEw-5+UFeQq3wsF9x6bZ6McRjnFcXEPDVTYGxTPVyNcBMdTYtlOOQqxeIE1DVIgSAJMZPIChk2I3O4jylO8kTfIgTSfQFHDdLw0VayWBshkxUZ3ERMwbD6azpH6OyyIopyLBc11QoUhDUOnWd5yXFc103bddwI8UelPVYbEsbFcUsMwBjVO8j1y7q7BKqjyu-OT3MQ2q5xIJqN3oABVRdRGETgWurAz2shTqNW6hy+vxNVHEmWxHyjPUBmkAavCm2T-3k4Dqv-eb5wAMV4akKFYUReFobb9LFbp9pMLqepxPEBrVMxZWPRY+k2bZdmzOCQpmsLEIoCBEnUkgKABhhRAEChgeSwz9scKwzFGI7NnhxwbAxDt5kfKUZTsl83w-QltGUXz4C6DGiGFEHayMUZr07IxPGZqwRnPZYJnfPoyvR4KPlOGJxcpvbTClSZegGs8FTlDEhqjEi1mKxzJs1r94I5C0uSoPW9wNw10URGVlWh+sPDMOHsUbFMr3rZYH1CR32NifNC2LD22rBw2fZN-3cUDy3O0yiG6dtmFEzumxHtiUdx0nbQPuT3bU+942-bN7Pg87FwJisTwn2WRwgm6uU+f2J3Mee5Da9BiEjCjNVTxp+sUxsB8KMHnNh9KSrXsQ9D1HH2tpCGhwbfsibnNj1ysaqzzlJ8sTd6p-fO1MhsnL1J+o+2Mv14v16r8i2dIDvntYyUZHymRsGRFszhZidgGLAzuSMBo9nsCzT+b0kLYxqjOOcgCwYP3mO3awfRbY3TuleTwqCN4oX-LjfGUAcEQjwfGcwUpRjak8CYRw0sCqODCGEIAA */ + /** @xstate-layout N4IgpgJg5mDOIC5QDUCWsCuBDANqgXmAE4DEASgKIDKFAKgPq0Dy9FAGrRQHJUCSTXepQCCAEQCaAbQAMAXUSgADgHtYqAC6plAOwUgAHogDsRgDQgAnogCMADgBsAVgB0ATkcAmawGZX0owAsRrYBtgC+YeZomLgExCQAqgAKosKc9ElkTABSFADCDFS0ZAkFCZQy8kggKmqaOnqGCNYervbOtkbW0gG+AR4B0t7mVs3Sts4Bjt7Wg66uAdZd9q4RUejYeISkyanpmTn5DFlMtJV6tRpautVNPl7OM-beL0Hjsx4jNgsTU17e0mk9ls81WkRA0U2cR2KTSFAyWVyBXoABkmHk0vwuOdqpd6jdQHcAQFnNIPEYPPYuk93GZLDYPGsIRtYtsSFQAOq8Wh5AASCMOBRxSlUVwatxs-i+zQ8HhcQNc3lsMzs5McRiZkNZxGcsAA7hoAMYAC3oiiIygAVmBDeoSBAdGBnKhtAA3ZQAaydWq2Ov1RtN5qtNvUCBd7sNWHxlWFNVF+MaiCC1jcPnmnm8rUc0kc0us1j8znz9mswL89iG5M1LN9RGd2iu2vtjvr7q9zh90Prjd9Ybdykj0bksbx10TCA8DlJ9jlOaC3lCM+lXQm3QWbXJRgXmerMVr3c0TYd2id4c93prXZdPbifYjUeuMesVRFdTHEonU6Bs8c88Xn3pBB1RJbxHAWQEjBLbpgV3KFtgPVAm2IC060UHAowAM2UIgAFsO0veDr0PXsz0HR9hzkC543fQlEHJdpv2zX8t3-aUQW8ZxHFsMCQVLCkjC42DtTrIgwG0CBiF4BtiLQMA9WbE9W3PfC9y7UTxMk6TEJwWS9TvAcHx0GNKNxajxVohBFQ4ycWgBVwQjlLjl0CR5QJBewgnJVxrEcIT93UiSiCkntdJIZDsOcNDMOwvDO3ggLNJC1A5P0sijIol84zfcyDEQKznBsjw7IcxwnMAil2mVCsVknPxxl88E4p1LBbVQV0ozAFEqAU09+3bJq6xazR2vUTqqFSwztGMzLRxyu5+lcDp7NAgIAkVNbHHsZdWkmbjXCMfw5RWJY-K7Ia2o6rqwqIFDIvQ9QsNwlS4Oa1qRrGiah1kEczIJXLLLpUZZnsdpNsVPw+l-AJTvgjCwHUE0kgta1bSodQiAwW0MFEnqlP6gidThhHjSR4NUfRzH1GxsBPvI76TNfMU-qafoOKmOzoJWRxSzzA6PAK0JbFsHNFSK0qYcJ+HEeRkM0YxrGcfC1D7se2KCbrInpbJ9Q5cp6nafS+mZt+8dWcmaZpG8oEuZ5wDS3GZwjHcIWunJVb8wluscFgCgbuw8g6DIKQGaypnx28QG6JmDowN8bjbFlOUE895wwH0UbtDUHQyDALAIAsEgmCSbh6GQXgKA5H7suZvKhkeXonGeYIneVXn-Dcey2kBfwwNWlPXWSvVhDep0B7k4K7WPXq2wvVT4LHoeR+cBeJ4NqaMqo6vxx8IEluVOxuK3YEtrt7mSR6CsIOFpUq0a9Xl8H4fhtHweJ9xs98bnnUF6ftqX-H6Sa8nzGy3h+HelVloH3VN4Y+eZG6Oy7iqYEgwXj90fkvUSsBlA4FdGAAAsugNQ2goCiDAIoMSEltCGmSrAd+fVZ4vTrD-DBcBsG4IIbAIhJCyEULEtQuAQCN6mVARZAsk5SQBCpO8LoPRXB5jWimBUixIK+AjjBO+X8mHoOfs4PUYAABGukUTKDzi6KAdCZ7PWEg-OSv9cG6IMUYkxEAzGCKNpvMOH4Bj5jcMCHiSwgixzgYsR2LRgQmBzBSeYaDbFLz0YYwexi86QAscpAaNjF46PiU45JEA3FV08RZbxKY2h7VsAEgSio8wLhJFxCsiowLTAjuEDRjCMl2P-nqHOecC5FxLmXCuBSExeOth0HonhZGZhWCfIGC4XDlMVA4ASHlLYtPWJo9pS8F7dPziQAZHJ6C7DhEMmi-1im+LKRUoJp8pgFTAjOcpXgE4CRiZkv+GSdkFwAGK8BRPCCgohuQnLmnRRYJS-H2SuVUu2rRz4OH8ICCO0gfJrOZBs5hOiF4UBcZoYhJAAXcnoKIAQFBgU1wnL0CYAx7ITP2isSOMpeicXhZIoIDhFkRHBNoZQEl4DVAGh44ZFkAC0+Z5EgVjm0FBNTOgp39MTM0MtbSCtOU0AERgY4+VlJmUCFI8weDJNOBpzxgRKlcIyVp1iiLaTiCqkFYwGXqgmEqMCfhFi9AEha9ZbSEpBS0rgXSdryVdBJMEFo7qarmoAqMZYzL7mUkTgWBq3rrHnXel1IN29Zi-DTIEDc2ZgjSldW4Pa2ZJEHXzF6tFbTNYkyVTrCmCswCZo-OauBDxPADDLb4ckIQU7e19ihFtFktwpmmHVJYcpBh6rtm5SYq1QIFkGNxQSlr9xpwzlnbQnzh3-S3PzToCjSzlMpTMmwo7JgCV-DMRcryOm7ruEMFwcdWhUmCK0QIeYfIMT2k7JYPl9rJurdYjF7yV7SQfZKZUjx7KvpMAnfaAR5GdAkRWSRwsgjmrvSwrBOD8GELMaQ8hGkqE0Mg80EsGqDVZgGJmZZthkOLV-P4qkThIJAfSaB+x2TEnOLMeR2UpYY5RorAa+yq04FLAKmE4+yLzUR2w1kxxvHckCd7kWUI5IyT7SdqVPMjSOgRwEvmQERUQaKbA4PHdwjClnIGKuezq0-G9DkbOks0nyRLoEk8Cz9isU4v4zZoVZz1PZq0x+3TuYYUglJGSDykqqQNQiEAA */ id: "Visualizer", initial: 'initialize', predictableActionArguments: true, @@ -38,12 +84,13 @@ const stateMachine = createMachine( langClient: null, errorCode: null, isBISupported: false, - view: MACHINE_VIEW.Overview, - dependenciesResolved: false + view: MACHINE_VIEW.PackageOverview, + dependenciesResolved: false, + isInDevant: !!process.env.CLOUD_STS_TOKEN }, on: { RESET_TO_EXTENSION_READY: { - target: "extensionReady", + target: "extensionReady" }, UPDATE_PROJECT_STRUCTURE: { actions: [ @@ -53,11 +100,68 @@ const stateMachine = createMachine( () => { // Use queueMicrotask to ensure context is updated before command execution queueMicrotask(() => { + console.log('Refreshing BI project explorer'); commands.executeCommand("BI.project-explorer.refresh"); + console.log('Notifying current webview'); + // Check if the current view is Service desginer and if so don't notify the webview + if (StateMachine.context().view !== MACHINE_VIEW.ServiceDesigner && StateMachine.context().view !== MACHINE_VIEW.BIDiagram) { + notifyCurrentWebview(); + } }); } ] }, + UPDATE_PROJECT_ROOT_AND_INFO: { + actions: [ + assign({ + projectPath: (context, event) => event.projectPath, + projectInfo: (context, event) => event.projectInfo + }), + async (context, event) => { + await buildProjectsStructure(event.projectInfo, StateMachine.langClient(), true); + notifyCurrentWebview(); + notifyTreeView(event.projectPath, context.documentUri, context.position, context.view); + // Resolve the next pending promise waiting for project root update completion + pendingProjectRootUpdateResolvers.shift()?.(); + } + ] + }, + REFRESH_PROJECT_INFO: { + actions: [ + async (context, event) => { + try { + const projectPath = context.workspacePath || context.projectPath; + if (!projectPath) { + console.warn("No project path available for refreshing project info"); + return; + } + + // Fetch updated project info from language server + const projectInfo = await context.langClient.getProjectInfo({ projectPath }); + + // Update context with new project info + stateService.send({ + type: 'UPDATE_PROJECT_INFO', + projectInfo + }); + } catch (error) { + console.error("Error refreshing project info:", error); + } + } + ] + }, + UPDATE_PROJECT_INFO: { + actions: [ + assign({ + projectInfo: (context, event) => event.projectInfo + }), + async (context, event) => { + // Rebuild project structure with updated project info + await buildProjectsStructure(event.projectInfo, StateMachine.langClient(), true); + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.WorkspaceOverview }); + } + ] + }, UPDATE_PROJECT_LOCATION: { actions: [ assign({ @@ -65,62 +169,60 @@ const stateMachine = createMachine( position: (context, event) => event.viewLocation.position ? event.viewLocation.position : context.position, identifier: (context, event) => event.viewLocation.identifier ? event.viewLocation.identifier : context.identifier, addType: (context, event) => event.viewLocation?.addType !== undefined ? event.viewLocation.addType : context?.addType, - }) + }), + (context, event) => notifyTreeView( + context.projectPath, + event.viewLocation.documentUri || context.documentUri, + event.viewLocation.position || context.position, + context.view + ) ] - }, - SWITCH_PROJECT: { - target: "switch_project" } }, states: { - switch_project: { + initialize: { invoke: { - src: checkForProjects, + src: (context, event) => checkForProjects, onDone: [ { - target: "viewActive.viewReady", + target: "renderInitialView", + cond: (context, event) => event.data && event.data.isBI, actions: [ assign({ isBI: (context, event) => event.data.isBI, - projectUri: (context, event) => event.data.projectPath, + projectPath: (context, event) => event.data.projectPath, + workspacePath: (context, event) => event.data.workspacePath, scope: (context, event) => event.data.scope, org: (context, event) => event.data.orgName, - package: (context, event) => event.data.packageName, + package: (context, event) => event.data.packageName }), - async (context, event) => { - await buildProjectArtifactsStructure(event.data.projectPath, StateMachine.langClient(), true); - notifyCurrentWebview(); - } + (context, event) => notifyTreeView( + event.data.projectPath, + context.documentUri, + context.position, + context.view + ) ] - } - ], - } - }, - initialize: { - invoke: { - src: checkForProjects, - onDone: [ - { - target: "renderInitialView", - cond: (context, event) => event.data && event.data.isBI, - actions: assign({ - isBI: (context, event) => event.data.isBI, - projectUri: (context, event) => event.data.projectPath, - scope: (context, event) => event.data.scope, - org: (context, event) => event.data.orgName, - package: (context, event) => event.data.packageName, - }) }, { target: "activateLS", cond: (context, event) => event.data && event.data.isBI === false, - actions: assign({ - isBI: (context, event) => event.data.isBI, - projectUri: (context, event) => event.data.projectPath, - scope: (context, event) => event.data.scope, - org: (context, event) => event.data.orgName, - package: (context, event) => event.data.packageName, - }) + actions: [ + assign({ + isBI: (context, event) => event.data.isBI, + projectPath: (context, event) => event.data.projectPath, + workspacePath: (context, event) => event.data.workspacePath, + scope: (context, event) => event.data.scope, + org: (context, event) => event.data.orgName, + package: (context, event) => event.data.packageName + }), + (context, event) => notifyTreeView( + event.data.projectPath, + context.documentUri, + context.position, + context.view + ) + ] } ], onError: { @@ -143,7 +245,7 @@ const stateMachine = createMachine( invoke: { src: 'activateLanguageServer', onDone: { - target: "fetchProjectStructure", + target: "fetchProjectInfo", actions: assign({ langClient: (context, event) => event.data.langClient, isBISupported: (context, event) => event.data.isBISupported @@ -157,6 +259,23 @@ const stateMachine = createMachine( } } }, + fetchProjectInfo: { + invoke: { + src: 'fetchProjectInfo', + onDone: { + target: "fetchProjectStructure", + actions: assign({ + projectInfo: (context, event) => event.data.projectInfo + }) + }, + onError: { + target: "lsError", + actions: () => { + console.error("Error occurred while fetching project info."); + } + } + } + }, fetchProjectStructure: { invoke: { src: 'registerProjectArtifactsStructure', @@ -183,19 +302,31 @@ const stateMachine = createMachine( on: { OPEN_VIEW: { target: "viewActive", - actions: assign({ - view: (context, event) => event.viewLocation.view, - documentUri: (context, event) => event.viewLocation.documentUri, - position: (context, event) => event.viewLocation.position, - identifier: (context, event) => event.viewLocation.identifier, - serviceType: (context, event) => event.viewLocation.serviceType, - type: (context, event) => event.viewLocation?.type, - isGraphql: (context, event) => event.viewLocation?.isGraphql, - metadata: (context, event) => event.viewLocation?.metadata, - addType: (context, event) => event.viewLocation?.addType, - rootDiagramId: (context, event) => event.viewLocation?.rootDiagramId, - dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata - }) + actions: [ + assign({ + org: (context, event) => event.viewLocation?.org, + package: (context, event) => event.viewLocation?.package, + view: (context, event) => event.viewLocation.view, + documentUri: (context, event) => event.viewLocation.documentUri, + position: (context, event) => event.viewLocation.position, + projectPath: (context, event) => event.viewLocation?.projectPath || context?.projectPath, + identifier: (context, event) => event.viewLocation.identifier, + serviceType: (context, event) => event.viewLocation.serviceType, + type: (context, event) => event.viewLocation?.type, + isGraphql: (context, event) => event.viewLocation?.isGraphql, + metadata: (context, event) => event.viewLocation?.metadata, + addType: (context, event) => event.viewLocation?.addType, + dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata, + artifactInfo: (context, event) => event.viewLocation?.artifactInfo, + rootDiagramId: (context, event) => event.viewLocation?.rootDiagramId + }), + (context, event) => notifyTreeView( + context.projectPath, + event.viewLocation?.documentUri, + event.viewLocation?.position, + event.viewLocation?.view + ) + ] } } }, @@ -256,38 +387,58 @@ const stateMachine = createMachine( on: { OPEN_VIEW: { target: "viewInit", - actions: assign({ - view: (context, event) => event.viewLocation.view, - documentUri: (context, event) => event.viewLocation.documentUri, - position: (context, event) => event.viewLocation.position, - identifier: (context, event) => event.viewLocation.identifier, - serviceType: (context, event) => event.viewLocation.serviceType, - type: (context, event) => event.viewLocation?.type, - isGraphql: (context, event) => event.viewLocation?.isGraphql, - metadata: (context, event) => event.viewLocation?.metadata, - addType: (context, event) => event.viewLocation?.addType, - rootDiagramId: (context, event) => event.viewLocation?.rootDiagramId, - dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata - }) + actions: [ + assign({ + view: (context, event) => event.viewLocation.view, + documentUri: (context, event) => event.viewLocation.documentUri, + position: (context, event) => event.viewLocation.position, + identifier: (context, event) => event.viewLocation.identifier, + serviceType: (context, event) => event.viewLocation.serviceType, + projectPath: (context, event) => event.viewLocation?.projectPath || context?.projectPath, + org: (context, event) => event.viewLocation?.org || context?.org, + package: (context, event) => event.viewLocation?.package || context?.package, + type: (context, event) => event.viewLocation?.type, + isGraphql: (context, event) => event.viewLocation?.isGraphql, + metadata: (context, event) => event.viewLocation?.metadata, + addType: (context, event) => event.viewLocation?.addType, + dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata, + artifactInfo: (context, event) => event.viewLocation?.artifactInfo, + rootDiagramId: (context, event) => event.viewLocation?.rootDiagramId + }), + (context, event) => notifyTreeView( + event.viewLocation?.projectPath || context?.projectPath, + event.viewLocation?.documentUri, + event.viewLocation?.position, + event.viewLocation?.view + ) + ] }, VIEW_UPDATE: { target: "webViewLoaded", - actions: assign({ - documentUri: (context, event) => event.viewLocation.documentUri, - position: (context, event) => event.viewLocation.position, - view: (context, event) => event.viewLocation.view, - identifier: (context, event) => event.viewLocation.identifier, - serviceType: (context, event) => event.viewLocation.serviceType, - type: (context, event) => event.viewLocation?.type, - isGraphql: (context, event) => event.viewLocation?.isGraphql, - addType: (context, event) => event.viewLocation?.addType, - dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata - }) + actions: [ + assign({ + documentUri: (context, event) => event.viewLocation.documentUri, + position: (context, event) => event.viewLocation.position, + view: (context, event) => event.viewLocation.view, + identifier: (context, event) => event.viewLocation.identifier, + serviceType: (context, event) => event.viewLocation.serviceType, + type: (context, event) => event.viewLocation?.type, + isGraphql: (context, event) => event.viewLocation?.isGraphql, + addType: (context, event) => event.viewLocation?.addType, + dataMapperMetadata: (context, event) => event.viewLocation?.dataMapperMetadata + }), + (context, event) => notifyTreeView( + context.projectPath, + event.viewLocation?.documentUri, + event.viewLocation?.position, + event.viewLocation?.view + ) + ] }, FILE_EDIT: { target: "viewEditing" }, - } + }, }, viewEditing: { on: { @@ -320,18 +471,33 @@ const stateMachine = createMachine( } }); }, + fetchProjectInfo: (context, event) => { + return new Promise(async (resolve, reject) => { + try { + const projectPath = context.workspacePath || context.projectPath; + if (!projectPath) { + resolve({ projectInfo: undefined }); + } else { + const projectInfo = await context.langClient.getProjectInfo({ projectPath }); + resolve({ projectInfo }); + } + } catch (error) { + throw new Error("Error occurred while fetching project info.", error); + } + }); + }, registerProjectArtifactsStructure: (context, event) => { return new Promise(async (resolve, reject) => { try { - // If the project uri is not set, we don't need to build the project structure - if (context.projectUri) { + // Register the event driven listener to get the artifact changes + context.langClient.registerPublishArtifacts(); + // IF the project info is not set, we don't need to build the project structure + if (context.projectInfo) { // Add a 2 second delay before registering artifacts await new Promise(resolve => setTimeout(resolve, 1000)); - // Register the event driven listener to get the artifact changes - context.langClient.registerPublishArtifacts(); // Initial Project Structure - const projectStructure = await buildProjectArtifactsStructure(context.projectUri, context.langClient); + const projectStructure = await buildProjectsStructure(context.projectInfo, context.langClient); resolve({ projectStructure }); } else { resolve({ projectStructure: undefined }); @@ -369,10 +535,10 @@ const stateMachine = createMachine( }, resolveMissingDependencies: (context, event) => { return new Promise(async (resolve, reject) => { - if (context?.projectUri) { + if (context?.projectPath) { const diagnostics: ProjectDiagnosticsResponse = await StateMachine.langClient().getProjectDiagnostics({ projectRootIdentifier: { - uri: Uri.file(context.projectUri).toString(), + uri: Uri.file(context.projectPath).toString(), } }); @@ -390,11 +556,7 @@ const stateMachine = createMachine( return; } - const taskDefinition: TaskDefinition = { - type: 'shell', - task: 'run' - }; - + // Construct the build command let buildCommand = 'bal build'; const config = workspace.getConfiguration('ballerina'); @@ -403,43 +565,46 @@ const stateMachine = createMachine( buildCommand = path.join(ballerinaHome, 'bin', buildCommand); } - const execution = new ShellExecution(buildCommand); - - if (!workspace.workspaceFolders || workspace.workspaceFolders.length === 0) { - resolve(true); - return; - } - - - const task = new Task( - taskDefinition, - workspace.workspaceFolders![0], - 'Ballerina Build', - 'ballerina', - execution - ); - try { - const taskExecution = await tasks.executeTask(task); - - // Wait for task completion - await new Promise((taskResolve) => { - // Listen for task completion - const disposable = tasks.onDidEndTask((taskEndEvent) => { - if (taskEndEvent.execution === taskExecution) { - console.log('Build task completed'); + // Execute the build command with output streaming + const result = await runCommandWithOutput( + buildCommand, + context.projectPath, + buildOutputChannel, + (message: string) => { + // Send progress notification to the visualizer + RPCLayer._messenger.sendNotification( + dependencyPullProgress, + { type: 'webview', webviewType: VisualizerWebview.viewType }, + message + ); + } + ); - // Close the terminal pane on completion - commands.executeCommand('workbench.action.closePanel'); + if (result.success) { + console.log('Build task completed successfully'); - disposable.dispose(); - taskResolve(); + // Retry resolving missing dependencies after build is successful. This is a temporary solution to ensure the project is reloaded with new dependencies. + const projectUri = Uri.file(context.projectPath).toString(); + await StateMachine.langClient().resolveMissingDependencies({ + documentIdentifier: { + uri: projectUri } }); - }); + + + // Close the output panel on successful completion + commands.executeCommand('workbench.action.closePanel'); + } else { + const errorMsg = `Failed to build Ballerina package. Exit code: ${result.exitCode}`; + console.error(errorMsg); + window.showErrorMessage(errorMsg); + } } catch (error) { - window.showErrorMessage(`Failed to build Ballerina package: ${error}`); + const errorMsg = `Failed to build Ballerina package: ${error}`; + console.error(errorMsg, error); + window.showErrorMessage(errorMsg); } } @@ -448,12 +613,30 @@ const stateMachine = createMachine( }, findView(context, event): Promise { return new Promise(async (resolve, reject) => { + const { orgName, packageName } = getOrgAndPackageName(context.projectInfo, context.projectPath); if (!context.view && context.langClient) { if (!context.position || ("groupId" in context.position)) { - history.push({ location: { view: MACHINE_VIEW.Overview, documentUri: context.documentUri } }); + if (!context.projectPath && context.workspacePath) { + history.push({ + location: { + view: MACHINE_VIEW.WorkspaceOverview + } + }); + } else { + history.push({ + location: { + view: MACHINE_VIEW.PackageOverview, + documentUri: context.documentUri, + org: orgName || context.org, + package: packageName || context.package, + } + }); + } return resolve(); } - const view = await getView(context.documentUri, context.position, context?.projectUri); + const view = await getView(context.documentUri, context.position, context?.projectPath); + view.location.package = packageName || context.package; + view.location.package = packageName || context.package; history.push(view); return resolve(); } else { @@ -463,6 +646,8 @@ const stateMachine = createMachine( documentUri: context.documentUri, position: context.position, identifier: context.identifier, + org: orgName || context.org, + package: packageName || context.package, type: context?.type, isGraphql: context?.isGraphql, addType: context?.addType, @@ -479,9 +664,13 @@ const stateMachine = createMachine( const selectedEntry = getLastHistory(); if (!context.langClient) { if (!selectedEntry) { - return resolve({ view: MACHINE_VIEW.Overview, documentUri: context.documentUri }); + return resolve( + context.workspacePath + ? { view: MACHINE_VIEW.WorkspaceOverview } + : { view: MACHINE_VIEW.PackageOverview, documentUri: context.documentUri } + ); } - return resolve({ ...selectedEntry.location, view: selectedEntry.location.view ? selectedEntry.location.view : MACHINE_VIEW.Overview }); + return resolve({ ...selectedEntry.location, view: selectedEntry.location.view ? selectedEntry.location.view : MACHINE_VIEW.PackageOverview }); } if (selectedEntry && (selectedEntry.location.view === MACHINE_VIEW.ERDiagram || selectedEntry.location.view === MACHINE_VIEW.ServiceDesigner || selectedEntry.location.view === MACHINE_VIEW.BIDiagram)) { @@ -507,7 +696,11 @@ const stateMachine = createMachine( }) as SyntaxTree; if (!selectedEntry?.location.view) { - return resolve({ view: MACHINE_VIEW.Overview, documentUri: context.documentUri }); + return resolve( + context.workspacePath + ? { view: MACHINE_VIEW.WorkspaceOverview } + : { view: MACHINE_VIEW.PackageOverview, documentUri: context.documentUri } + ); } let selectedST; @@ -615,6 +808,15 @@ export const StateMachine = { }, sendEvent: (eventType: EVENT_TYPE) => { stateService.send({ type: eventType }); }, updateProjectStructure: (payload: ProjectStructureResponse) => { stateService.send({ type: "UPDATE_PROJECT_STRUCTURE", payload }); }, + updateProjectRootAndInfo: (projectPath: string, projectInfo: ProjectInfo): Promise => { + return new Promise((resolve) => { + pendingProjectRootUpdateResolvers.push(resolve); + stateService.send({ type: "UPDATE_PROJECT_ROOT_AND_INFO", projectPath, projectInfo }); + }); + }, + refreshProjectInfo: () => { + stateService.send({ type: 'REFRESH_PROJECT_INFO' }); + }, resetToExtensionReady: () => { stateService.send({ type: 'RESET_TO_EXTENSION_READY' }); }, @@ -627,10 +829,14 @@ export function openView(type: EVENT_TYPE, viewLocation: VisualizerLocation, res } extension.hasPullModuleResolved = false; extension.hasPullModuleNotification = false; + const projectPath = viewLocation.projectPath || StateMachine.context().projectPath; + const { orgName, packageName } = getOrgAndPackageName(StateMachine.context().projectInfo, projectPath); + viewLocation.org = orgName; + viewLocation.package = packageName; stateService.send({ type: type, viewLocation: viewLocation }); } -export function updateView(refreshTreeView?: boolean, projectUri?: string) { +export function updateView(refreshTreeView?: boolean) { let lastView = getLastHistory(); // Step over to the next location if the last view is skippable if (!refreshTreeView && lastView?.location.view.includes("SKIP")) { @@ -639,6 +845,7 @@ export function updateView(refreshTreeView?: boolean, projectUri?: string) { } let newLocation: VisualizerLocation = lastView?.location; + let newLocationFound = false; if (lastView && lastView.location?.artifactType && lastView.location?.identifier) { newLocation = { ...lastView.location }; const currentIdentifier = lastView.location?.identifier; @@ -650,8 +857,11 @@ export function updateView(refreshTreeView?: boolean, projectUri?: string) { targetedArtifactType = DIRECTORY_MAP.SERVICE; } + const projectPath = StateMachine.context().projectPath; + const project = StateMachine.context().projectStructure.projects.find(project => project.projectPath === projectPath); + // These changes will be revisited in the revamp - StateMachine.context().projectStructure.directoryMap[targetedArtifactType].forEach((artifact) => { + project.directoryMap[targetedArtifactType].forEach((artifact) => { if (artifact.id === currentIdentifier || artifact.name === currentIdentifier) { currentArtifact = artifact; } @@ -671,12 +881,46 @@ export function updateView(refreshTreeView?: boolean, projectUri?: string) { ...lastView, location: newLocation }); + newLocationFound = true; + } + + // Check for service class model in the new location + if (!newLocationFound && lastView?.location?.type) { + let currentArtifact: ProjectStructureArtifactResponse; + + const projectPath = StateMachine.context().projectPath; + const project = StateMachine.context().projectStructure.projects.find(project => project.projectPath === projectPath); + + project.directoryMap[DIRECTORY_MAP.TYPE].forEach((artifact) => { + if (artifact.id === lastView.location.type.name || artifact.name === lastView.location.type.name) { + currentArtifact = artifact; + } + }); + const newPosition = currentArtifact?.position || lastView.location.position; + const updatedType: Type = { + ...lastView.location.type, + codedata: { + ...lastView.location.type.codedata, + lineRange: { + ...lastView.location.type.codedata.lineRange, + startLine: { line: newPosition.startLine, offset: newPosition.startColumn }, + endLine: { line: newPosition.endLine, offset: newPosition.endColumn } + } + } + }; + + newLocation = { ...lastView.location, position: newPosition, type: updatedType }; + history.updateCurrentEntry({ + ...lastView, + location: newLocation + }); + } stateService.send({ type: "VIEW_UPDATE", viewLocation: lastView ? newLocation : { view: "Overview" } }); if (refreshTreeView) { - buildProjectArtifactsStructure(projectUri || StateMachine.context().projectUri, StateMachine.langClient(), true); + buildProjectsStructure(StateMachine.context().projectInfo, StateMachine.langClient(), true); } notifyCurrentWebview(); } @@ -711,63 +955,101 @@ function getLastHistory() { return historyStack?.[historyStack?.length - 1]; } -async function checkForProjects(): Promise<{ isBI: boolean, projectPath: string, scope?: SCOPE }> { +async function checkForProjects() { const workspaceFolders = workspace.workspaceFolders; if (!workspaceFolders) { - return { isBI: false, projectPath: '' }; + return { isBI: false, projects: [] }; } if (workspaceFolders.length > 1) { - return await handleMultipleWorkspaces(workspaceFolders); + return await handleMultipleWorkspaceFolders(workspaceFolders); } - return await handleSingleWorkspace(workspaceFolders[0].uri); + return await handleSingleWorkspaceFolder(workspaceFolders[0].uri); } -async function handleMultipleWorkspaces(workspaceFolders: readonly WorkspaceFolder[]) { - const balProjects = workspaceFolders.filter(folder => checkIsBallerina(folder.uri)); +async function handleMultipleWorkspaceFolders(workspaceFolders: readonly WorkspaceFolder[]): Promise { + const balProjectChecks = await Promise.all( + workspaceFolders.map(async folder => ({ + folder, + isBallerinaPackage: await checkIsBallerinaPackage(folder.uri) + })) + ); + const balProjects = balProjectChecks + .filter(result => result.isBallerinaPackage) + .map(result => result.folder); - if (balProjects.length > 1) { - const projectPaths = balProjects.map(folder => folder.uri.fsPath); - let selectedProject = await window.showQuickPick(projectPaths, { - placeHolder: 'Select a project to load the WSO2 Integrator' + if (balProjects.length > 1 && workspace.workspaceFile?.scheme === "file") { + // Show notification to guide users to use Ballerina workspaces instead of VSCode workspaces + window.showInformationMessage( + 'Multiple Ballerina projects detected in VSCode workspace. Please use Ballerina workspaces for better project management and native support.', + 'Learn More' + ).then(selection => { + if (selection === 'Learn More') { + commands.executeCommand('vscode.open', Uri.parse('https://ballerina.io/learn/workspaces')); + } }); - if (!selectedProject) { - // Pick the first project if the user cancels the selection - selectedProject = projectPaths[0]; - } - - const isBI = checkIsBI(Uri.file(selectedProject)); - const scope = isBI && fetchScope(Uri.file(selectedProject)); - const { orgName, packageName } = getOrgPackageName(selectedProject); - setBIContext(isBI); - return { isBI, projectPath: selectedProject, scope, orgName, packageName }; + // Return empty result to indicate no project should be loaded + return { isBI: false }; } else if (balProjects.length === 1) { const isBI = checkIsBI(balProjects[0].uri); const scope = isBI && fetchScope(balProjects[0].uri); const { orgName, packageName } = getOrgPackageName(balProjects[0].uri.fsPath); setBIContext(isBI); - return { isBI, projectPath: balProjects[0].uri.fsPath, scope, orgName, packageName }; + const projectPath = balProjects[0].uri.fsPath; + return { isBI, projectPath, scope, orgName, packageName }; } - return { isBI: false, projectPath: '' }; + return { isBI: false }; } -async function handleSingleWorkspace(workspaceURI: any) { - const isBallerina = checkIsBallerina(workspaceURI); - const isBI = isBallerina && checkIsBI(workspaceURI); - const scope = fetchScope(workspaceURI); - const projectPath = isBallerina ? workspaceURI.fsPath : ""; - const { orgName, packageName } = getOrgPackageName(projectPath); +async function handleSingleWorkspaceFolder(workspaceURI: Uri): Promise { + const isBallerinaWorkspace = await checkIsBallerinaWorkspace(workspaceURI); + + if (isBallerinaWorkspace) { + const isBI = checkIsBI(workspaceURI); + setBIContext(isBI); - setBIContext(isBI); - if (!isBI) { - console.error("No BI enabled workspace found"); + return { isBI, workspacePath: workspaceURI.fsPath }; + } else { + const isBallerinaPackage = await checkIsBallerinaPackage(workspaceURI); + const isBI = isBallerinaPackage && checkIsBI(workspaceURI); + const scope = fetchScope(workspaceURI); + const projectPath = isBallerinaPackage ? workspaceURI.fsPath : ""; + const { orgName, packageName } = getOrgPackageName(projectPath); + + setBIContext(isBI); + if (!isBI) { + console.error("No BI enabled workspace found"); + } + + return { isBI, projectPath, scope, orgName, packageName }; } +} - return { isBI, projectPath, scope, orgName, packageName }; +function notifyTreeView( + projectPath?: string, + documentUri?: string, + position?: NodePosition, + view?: MACHINE_VIEW +) { + try { + const biExtension = extensions.getExtension('wso2.ballerina-integrator'); + if (biExtension && !biExtension.isActive) { + return; + } + + commands.executeCommand(BI_COMMANDS.NOTIFY_PROJECT_EXPLORER, { + projectPath, + documentUri, + position, + view + }); + } catch (error) { + console.error('Error notifying tree view:', error); + } } function setBIContext(isBI: boolean) { diff --git a/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts b/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts index a9e3022be13..b0506e90673 100644 --- a/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts +++ b/workspaces/ballerina/ballerina-extension/src/stateMachinePopup.ts @@ -146,7 +146,7 @@ const stateMachinePopup = createMachine({ initializeData: (context, event) => { // Get context values from the project storage so that we can restore the earlier state when user reopens vscode return new Promise((resolve, reject) => { - const documentUri = StateMachine.context().projectUri; + const documentUri = StateMachine.context().projectPath; resolve({ documentUri }); }); }, diff --git a/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts b/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts index 8362212b370..ae521dc1807 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/ai/auth.ts @@ -18,11 +18,12 @@ import * as vscode from 'vscode'; import { extension } from "../../BalExtensionContext"; -import { AUTH_CLIENT_ID, AUTH_ORG } from '../../features/ai/utils'; +import { AUTH_CLIENT_ID, AUTH_ORG, getDevantExchangeUrl } from '../../features/ai/utils'; import axios from 'axios'; import { jwtDecode, JwtPayload } from 'jwt-decode'; -import { AuthCredentials, LoginMethod } from '@wso2/ballerina-core'; +import { AuthCredentials, DevantEnvSecrets, LoginMethod } from '@wso2/ballerina-core'; import { checkDevantEnvironment } from '../../views/ai-panel/utils'; +import { getDevantStsToken } from '../../features/devant/activator'; export const REFRESH_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE = "Refresh token is not available."; export const TOKEN_REFRESH_ONLY_SUPPORTED_FOR_BI_INTEL = "Token refresh is only supported for BI Intelligence authentication"; @@ -302,3 +303,66 @@ export const getRefreshedAccessToken = async (): Promise => { } }); }; + +// ================================== +// Devant STS Token Exchange Utils +// ================================== + +/** + * Exchanges a Choreo STS token for a Devant Bearer token + * @param choreoStsToken The Choreo STS token to exchange + * @returns DevantEnvSecrets containing the access token and calculated expiry time + */ +export const exchangeStsToken = async (choreoStsToken: string): Promise => { + try { + const response = await axios.post(getDevantExchangeUrl(), { + choreo_sts_token: choreoStsToken + }, { + headers: { + 'Content-Type': 'application/json' + } + }); + + const { access_token, expires_in } = response.data; + const devantEnv: DevantEnvSecrets = { + accessToken: access_token, + expiresAt: Date.now() + (expires_in * 1000) // Convert seconds to milliseconds + }; + + await storeAuthCredentials({ + loginMethod: LoginMethod.DEVANT_ENV, + secrets: devantEnv + }); + return devantEnv; + } catch (error: any) { + console.error('Error exchanging STS token:', error); + throw new Error(`Failed to exchange STS token: ${error.message}`); + } +}; + +/** + * Refreshes the Devant token by fetching a new STS token and exchanging it + * This is called when a 401 error occurs during DEVANT_ENV authentication + * @returns The new access token + */ +export const refreshDevantToken = async (): Promise => { + try { + // Get fresh STS token from platform extension + const newStsToken = await getDevantStsToken(); + + if (!newStsToken) { + throw new Error('Failed to retrieve STS token from platform extension'); + } + + // Exchange for new Bearer token + const newSecrets = await exchangeStsToken(newStsToken); + + // Update stored credentials (this is in-memory only for DEVANT_ENV) + // Note: checkDevantEnvironment already handles the storage, so we just return the token + + return newSecrets.accessToken; + } catch (error: any) { + console.error('Error refreshing Devant token:', error); + throw error; + } +}; diff --git a/workspaces/ballerina/ballerina-extension/src/utils/bi.ts b/workspaces/ballerina/ballerina-extension/src/utils/bi.ts index 07e0521f36c..80c0c7859b5 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/bi.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/bi.ts @@ -15,22 +15,48 @@ * specific language governing permissions and limitations * under the License. */ - -import { exec } from "child_process"; -import { window, commands, workspace, Uri } from "vscode"; +import { commands, workspace, Uri } from "vscode"; import * as fs from 'fs'; import path from "path"; -import { BallerinaProjectComponents, ComponentRequest, CreateComponentResponse, createFunctionSignature, EVENT_TYPE, MigrateRequest, NodePosition, ProjectRequest, STModification, SyntaxTreeResponse } from "@wso2/ballerina-core"; +import { + AddProjectToWorkspaceRequest, + BallerinaProjectComponents, + ComponentRequest, + CreateComponentResponse, + createFunctionSignature, + EVENT_TYPE, + MigrateRequest, + NodePosition, + ProjectMigrationResult, + ProjectRequest, + STModification, + SyntaxTreeResponse, + WorkspaceTomlValues +} from "@wso2/ballerina-core"; import { StateMachine, history, openView } from "../stateMachine"; import { applyModifications, modifyFileContent, writeBallerinaFileDidOpen } from "./modification"; import { ModulePart, STKindChecker } from "@wso2/syntax-tree"; import { URI } from "vscode-uri"; import { debug } from "./logger"; +import { parse } from "@iarna/toml"; +import { getProjectTomlValues } from "./config"; export const README_FILE = "readme.md"; export const FUNCTIONS_FILE = "functions.bal"; export const DATA_MAPPING_FILE = "data_mappings.bal"; +/** + * Interface for the processed project information + */ +interface ProcessedProjectInfo { + sanitizedPackageName: string; + projectRoot: string; + finalOrgName: string; + finalVersion: string; + packageName: string; + integrationName: string; +} + const settingsJsonContent = ` { "ballerina.isBI": true @@ -86,54 +112,6 @@ generated/ Config.toml `; -export function openBIProject() { - window.showOpenDialog({ canSelectFolders: true, canSelectFiles: false, openLabel: 'Open Integration' }) - .then(uri => { - if (uri && uri[0]) { - commands.executeCommand('vscode.openFolder', uri[0]); - } - }); -} - -export function createBIProject(name: string, isService: boolean) { - window.showOpenDialog({ canSelectFolders: true, canSelectFiles: false, openLabel: 'Select Project Location' }) - .then(uri => { - if (uri && uri[0]) { - const projectLocation = uri[0].fsPath; - - const command = isService ? `bal new -t service ${name}` : `bal new ${name}`; - const options = { cwd: projectLocation }; - - exec(command, options, (error, stdout, stderr) => { - if (error) { - console.error(`Error creating BI project: ${error.message}`); - return; - } - - console.log(`BI project created successfully at ${projectLocation}`); - console.log(`stdout: ${stdout}`); - console.error(`stderr: ${stderr}`); - - // Update Ballerina.toml file in the created project folder - const tomlFilePath = `${projectLocation}/${name}/Ballerina.toml`; - hackToUpdateBallerinaToml(tomlFilePath); - - if (isService) { - const filePath = `${projectLocation}/${name}/service.bal`; - hackToUpdateService(filePath); - } else { - const filePath = `${projectLocation}/${name}/main.bal`; - hackToUpdateMain(filePath); - } - - const newProjectUri = Uri.joinPath(uri[0], name); - commands.executeCommand('vscode.openFolder', newProjectUri); - - }); - } - }); -} - export function getUsername(): string { // Get current username from the system across different OS platforms let username: string; @@ -147,23 +125,90 @@ export function getUsername(): string { return username; } -function setupProjectInfo(projectRequest: ProjectRequest) { - const sanitizedPackageName = sanitizeName(projectRequest.packageName); - - const projectRoot = projectRequest.createDirectory - ? path.join(projectRequest.projectPath, sanitizedPackageName) - : projectRequest.projectPath; +/** + * Generic function to resolve directory paths and create directories if needed + * Can be used for both project and workspace directory creation + * @param basePath - Base directory path + * @param directoryName - Name of the directory to create (optional) + * @param shouldCreateDirectory - Whether to create a new directory + * @returns The resolved directory path + */ +function resolveDirectoryPath(basePath: string, directoryName?: string, shouldCreateDirectory: boolean = true): string { + const resolvedPath = directoryName + ? path.join(basePath, directoryName) + : basePath; - // Create project root directory if needed - if (projectRequest.createDirectory && !fs.existsSync(projectRoot)) { - fs.mkdirSync(projectRoot, { recursive: true }); + if (shouldCreateDirectory && !fs.existsSync(resolvedPath)) { + fs.mkdirSync(resolvedPath, { recursive: true }); } - let finalOrgName = projectRequest.orgName; - if (!finalOrgName) { - finalOrgName = getUsername(); + return resolvedPath; +} + +/** + * Creates .vscode folder and settings.json file + * @param projectRoot - Root directory of the project + */ +function createVSCodeSettings(projectRoot: string): void { + const vscodeDir = path.join(projectRoot, '.vscode'); + if (!fs.existsSync(vscodeDir)) { + fs.mkdirSync(vscodeDir); } + const settingsPath = path.join(vscodeDir, 'settings.json'); + fs.writeFileSync(settingsPath, settingsJsonContent); +} + +/** + * Creates .vscode folder with both settings.json and launch.json files + * @param projectRoot - Root directory of the project + */ +function createVSCodeSettingsWithLaunch(projectRoot: string): void { + createVSCodeSettings(projectRoot); + + const vscodeDir = path.join(projectRoot, '.vscode'); + const launchPath = path.join(vscodeDir, 'launch.json'); + fs.writeFileSync(launchPath, launchJsonContent.trim()); +} + +/** + * Resolves the project root path and creates the directory if needed + * @param projectPath - Base project path + * @param sanitizedPackageName - Sanitized package name for directory creation + * @param createDirectory - Whether to create a new directory + * @returns The resolved project root path + */ +function resolveProjectPath(projectPath: string, sanitizedPackageName: string, createDirectory: boolean): string { + return resolveDirectoryPath( + projectPath, + createDirectory ? sanitizedPackageName : undefined, + createDirectory + ); +} + +/** + * Resolves the workspace root path and creates the directory + * @param basePath - Base path where workspace should be created + * @param workspaceName - Name of the workspace directory + * @returns The resolved workspace root path + */ +function resolveWorkspacePath(basePath: string, workspaceName: string): string { + return resolveDirectoryPath(basePath, workspaceName, true); +} + +/** + * Orchestrates the setup of project information + * @param projectRequest - The project request containing all necessary information + * @returns Processed project information ready for use + */ +function setupProjectInfo(projectRequest: ProjectRequest): ProcessedProjectInfo { + const sanitizedPackageName = sanitizeName(projectRequest.packageName); + const projectRoot = resolveProjectPath( + projectRequest.projectPath, + sanitizedPackageName, + projectRequest.createDirectory + ); + const finalOrgName = projectRequest.orgName || getUsername(); const finalVersion = projectRequest.version || "0.1.0"; return { @@ -176,7 +221,31 @@ function setupProjectInfo(projectRequest: ProjectRequest) { }; } -export function createBIProjectPure(projectRequest: ProjectRequest) { +export function createBIWorkspace(projectRequest: ProjectRequest): string { + const ballerinaTomlContent = ` +[workspace] +packages = ["${projectRequest.packageName}"] + +`; + + // Use the workspace-specific directory resolver + const workspaceRoot = resolveWorkspacePath(projectRequest.projectPath, projectRequest.workspaceName); + + // Create Ballerina.toml file + const ballerinaTomlPath = path.join(workspaceRoot, 'Ballerina.toml'); + writeBallerinaFileDidOpen(ballerinaTomlPath, ballerinaTomlContent); + + // Create Ballerina Package + createBIProjectPure({ ...projectRequest, projectPath: workspaceRoot, createDirectory: true }); + + // create settings.json file + createVSCodeSettings(workspaceRoot); + + console.log(`BI workspace created successfully at ${workspaceRoot}`); + return workspaceRoot; +} + +export function createBIProjectPure(projectRequest: ProjectRequest): string { const projectInfo = setupProjectInfo(projectRequest); const { projectRoot, finalOrgName, finalVersion, packageName: finalPackageName, integrationName } = projectInfo; @@ -194,8 +263,6 @@ sticky = true `; - - // Create Ballerina.toml file const ballerinaTomlPath = path.join(projectRoot, 'Ballerina.toml'); writeBallerinaFileDidOpen(ballerinaTomlPath, ballerinaTomlContent); @@ -232,25 +299,175 @@ sticky = true const datamappingsBalPath = path.join(projectRoot, 'data_mappings.bal'); writeBallerinaFileDidOpen(datamappingsBalPath, EMPTY); - // Create a .vscode folder - const vscodeDir = path.join(projectRoot, '.vscode'); - if (!fs.existsSync(vscodeDir)) { - fs.mkdirSync(vscodeDir); - } - - // Create launch.json file - const launchPath = path.join(vscodeDir, 'launch.json'); - fs.writeFileSync(launchPath, launchJsonContent.trim()); - - // Create settings.json file - const settingsPath = path.join(vscodeDir, 'settings.json'); - fs.writeFileSync(settingsPath, settingsJsonContent); + // Create .vscode configuration files + createVSCodeSettingsWithLaunch(projectRoot); // Create .gitignore file const gitignorePath = path.join(projectRoot, '.gitignore'); fs.writeFileSync(gitignorePath, gitignoreContent.trim()); console.log(`BI project created successfully at ${projectRoot}`); + return projectRoot; +} + +export async function convertProjectToWorkspace(params: AddProjectToWorkspaceRequest) { + const currentProjectPath = StateMachine.context().projectPath; + const tomlValues = await getProjectTomlValues(currentProjectPath); + const currentPackageName = tomlValues?.package?.name; + if (!currentPackageName) { + throw new Error('No package name found in Ballerina.toml'); + } + + const newDirectory = path.join(path.dirname(currentProjectPath), params.workspaceName); + + if (!fs.existsSync(newDirectory)) { + fs.mkdirSync(newDirectory, { recursive: true }); + } + + const updatedProjectPath = path.join(newDirectory, path.basename(currentProjectPath)); + fs.renameSync(currentProjectPath, updatedProjectPath); + + createWorkspaceToml(newDirectory, currentPackageName); + addToWorkspaceToml(newDirectory, params.packageName); + + createProjectInWorkspace(params, newDirectory); + + // create settings.json file + createVSCodeSettings(newDirectory); + + openInVSCode(newDirectory); +} + +export async function addProjectToExistingWorkspace(params: AddProjectToWorkspaceRequest): Promise { + const workspacePath = StateMachine.context().workspacePath; + addToWorkspaceToml(workspacePath, params.packageName); + + createProjectInWorkspace(params, workspacePath); +} + +function createWorkspaceToml(workspacePath: string, packageName: string) { + const ballerinaTomlContent = ` +[workspace] +packages = ["${packageName}"] +`; + const ballerinaTomlPath = path.join(workspacePath, 'Ballerina.toml'); + writeBallerinaFileDidOpen(ballerinaTomlPath, ballerinaTomlContent); +} + +function addToWorkspaceToml(workspacePath: string, packageName: string) { + const ballerinaTomlPath = path.join(workspacePath, 'Ballerina.toml'); + + if (!fs.existsSync(ballerinaTomlPath)) { + return; + } + + try { + const ballerinaTomlContent = fs.readFileSync(ballerinaTomlPath, 'utf8'); + const tomlData = parse(ballerinaTomlContent) as Partial; + const existingPackages: string[] = tomlData?.workspace?.packages ?? []; + + if (existingPackages.includes(packageName)) { + return; // Package already exists + } + + const updatedContent = addPackageToToml(ballerinaTomlContent, packageName); + fs.writeFileSync(ballerinaTomlPath, updatedContent); + } catch (error) { + console.error('Failed to update workspace Ballerina.toml:', error); + } +} + +export function deleteProjectFromWorkspace(workspacePath: string, packagePath: string) { + const relativeProjectPath = path.relative(workspacePath, packagePath); + console.log(">>> relative project path", relativeProjectPath); + + const ballerinaTomlPath = path.join(workspacePath, 'Ballerina.toml'); + if (!fs.existsSync(ballerinaTomlPath)) { + return; + } + + try { + const ballerinaTomlContent = fs.readFileSync(ballerinaTomlPath, 'utf8'); + const tomlData = parse(ballerinaTomlContent) as Partial; + const existingPackages: string[] = tomlData?.workspace?.packages ?? []; + + if (!existingPackages.includes(relativeProjectPath)) { + return; // Package not found + } + + const updatedContent = removePackageFromToml(ballerinaTomlContent, relativeProjectPath); + fs.writeFileSync(ballerinaTomlPath, updatedContent); + + // send didChange event to the language server + StateMachine.langClient().didChange({ + contentChanges: [ + { + text: updatedContent + } + ], + textDocument: { + uri: Uri.file(ballerinaTomlPath).toString(), + version: 1 + } + }); + + // delete the project directory + fs.rmdirSync(packagePath, { recursive: true }); + } catch (error) { + console.error(">>> error deleting project from workspace", error); + } +} + +function addPackageToToml(tomlContent: string, packageName: string): string { + const packagesRegex = /packages\s*=\s*\[([\s\S]*?)\]/; + const match = tomlContent.match(packagesRegex); + + if (match) { + const currentArrayContent = match[1].trim(); + const newArrayContent = currentArrayContent === '' + ? `"${packageName}"` + : `${currentArrayContent}, "${packageName}"`; + + return tomlContent.replace(packagesRegex, `packages = [${newArrayContent}]`); + } else { + return tomlContent + `\npackages = ["${packageName}"]\n`; + } +} + +function removePackageFromToml(tomlContent: string, packagePath: string): string { + const packagesRegex = /packages\s*=\s*\[([\s\S]*?)\]/; + const match = tomlContent.match(packagesRegex); + + if (match) { + const currentArrayContent = match[1].trim(); + + // Split by comma, trim whitespace, and filter out the package to remove + const packages = currentArrayContent + .split(',') + .map(pkg => pkg.trim()) + .filter(pkg => pkg && pkg !== `"${packagePath}"`); + + const newArrayContent = packages.length > 0 ? packages.join(', ') : ''; + return tomlContent.replace(packagesRegex, `packages = [${newArrayContent}]`); + } else { + return tomlContent; + } +} + +function createProjectInWorkspace(params: AddProjectToWorkspaceRequest, workspacePath: string): string { + const projectRequest: ProjectRequest = { + projectName: params.projectName, + packageName: params.packageName, + projectPath: workspacePath, + createDirectory: true, + orgName: params.orgName, + version: params.version + }; + + return createBIProjectPure(projectRequest); +} + +export function openInVSCode(projectRoot: string) { commands.executeCommand('vscode.openFolder', Uri.file(path.resolve(projectRoot))); } @@ -273,19 +490,12 @@ export async function createBIProjectFromMigration(params: MigrateRequest) { writeBallerinaFileDidOpen(filePath, content || EMPTY); } - // Create a .vscode folder - const vscodeDir = path.join(projectRoot, '.vscode'); - if (!fs.existsSync(vscodeDir)) { - fs.mkdirSync(vscodeDir); - } - - // Create launch.json file - const launchPath = path.join(vscodeDir, 'launch.json'); - fs.writeFileSync(launchPath, launchJsonContent.trim()); + params.projects?.forEach(project => { + createProjectFiles(project, projectRoot); + }); - // Create settings.json file - const settingsPath = path.join(vscodeDir, 'settings.json'); - fs.writeFileSync(settingsPath, settingsJsonContent); + // Create .vscode configuration files + createVSCodeSettingsWithLaunch(projectRoot); // Create .gitignore file const gitignorePath = path.join(projectRoot, '.gitignore'); @@ -295,11 +505,28 @@ export async function createBIProjectFromMigration(params: MigrateRequest) { commands.executeCommand('vscode.openFolder', Uri.file(path.resolve(projectRoot))); } +async function createProjectFiles(project: ProjectMigrationResult, projectRoot: string) { + for (const [fileName, fileContent] of Object.entries(project.textEdits)) { + const filePath = path.join(projectRoot, project.projectName, fileName); + const fileDir = path.dirname(filePath); + if (!fs.existsSync(fileDir)) { + fs.mkdirSync(fileDir, { recursive: true }); + } + writeBallerinaFileDidOpen(filePath, fileContent || "\n"); + } + + // Save migration report for this project + if (project.report) { + const reportPath = path.join(projectRoot, project.projectName, 'migration_report.html'); + fs.writeFileSync(reportPath, project.report); + } +} + export async function createBIAutomation(params: ComponentRequest): Promise { return new Promise(async (resolve) => { const functionFile = await handleAutomationCreation(params); const components = await StateMachine.langClient().getBallerinaProjectComponents({ - documentIdentifiers: [{ uri: URI.file(StateMachine.context().projectUri).toString() }] + documentIdentifiers: [{ uri: URI.file(StateMachine.context().projectPath).toString() }] }) as BallerinaProjectComponents; const position: NodePosition = {}; for (const pkg of components.packages) { @@ -321,9 +548,9 @@ export async function createBIAutomation(params: ComponentRequest): Promise { return new Promise(async (resolve) => { const isExpressionBodied = params.functionType.isExpressionBodied; - const projectDir = path.join(StateMachine.context().projectUri); + const projectPath = StateMachine.context().projectPath; // Hack to create trasformation function (Use LS API to create the function when available) - const targetFile = path.join(projectDir, isExpressionBodied ? DATA_MAPPING_FILE : FUNCTIONS_FILE); + const targetFile = path.join(projectPath, isExpressionBodied ? DATA_MAPPING_FILE : FUNCTIONS_FILE); if (!fs.existsSync(targetFile)) { writeBallerinaFileDidOpen(targetFile, ''); } @@ -367,9 +594,9 @@ ${funcSignature} } } `; - const projectDir = path.join(StateMachine.context().projectUri); + const projectPath = StateMachine.context().projectPath; // Create foo.bal file within services directory - const taskFile = path.join(projectDir, `automation.bal`); + const taskFile = path.join(projectPath, `automation.bal`); writeBallerinaFileDidOpen(taskFile, balContent); console.log('Task Created.', `automation.bal`); return taskFile; @@ -424,77 +651,3 @@ export async function handleFunctionCreation(targetFile: string, params: Compone export function sanitizeName(name: string): string { return name.replace(/[^a-z0-9]_./gi, '_').toLowerCase(); // Replace invalid characters with underscores } - -// ------------------- HACKS TO MANIPULATE PROJECT FILES ----------------> -function hackToUpdateBallerinaToml(filePath: string) { - fs.readFile(filePath, 'utf8', (err, data) => { - if (err) { - console.error(`Error reading Ballerina.toml file: ${err.message}`); - return; - } - - // Append "bi=true" to the Ballerina.toml content - const updatedContent = `${data.trim()}\nbi = true\n`; - - // Write the updated content back to the Ballerina.toml file - fs.writeFile(filePath, updatedContent, 'utf8', (err) => { - if (err) { - console.error(`Error updating Ballerina.toml file: ${err.message}`); - } else { - console.log('Ballerina.toml file updated successfully'); - } - }); - }); -} - -function hackToUpdateService(filePath: string) { - fs.readFile(filePath, 'utf8', (err, data) => { - if (err) { - console.error(`Error reading Ballerina.toml file: ${err.message}`); - return; - } - - // Append "bi=true" to the Ballerina.toml content - const newContent = `import ballerina/http; - - service /hello on new http:Listener(9090) { - resource function get greeting(string name) returns string|error { - - } - } - `; - - // Write the updated content back to the Ballerina.toml file - fs.writeFile(filePath, newContent, 'utf8', (err) => { - if (err) { - console.error(`Error updating Ballerina.toml file: ${err.message}`); - } else { - console.log('Ballerina.toml file updated successfully'); - } - }); - }); -} - -function hackToUpdateMain(filePath: string) { - fs.readFile(filePath, 'utf8', (err, data) => { - if (err) { - console.error(`Error reading Ballerina.toml file: ${err.message}`); - return; - } - - // Append "bi=true" to the Ballerina.toml content - const newContent = `public function main() { - - } - `; - - // Write the updated content back to the Ballerina.toml file - fs.writeFile(filePath, newContent, 'utf8', (err) => { - if (err) { - console.error(`Error updating Ballerina.toml file: ${err.message}`); - } else { - console.log('Ballerina.toml file updated successfully'); - } - }); - }); -} diff --git a/workspaces/ballerina/ballerina-extension/src/utils/command-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/command-utils.ts new file mode 100644 index 00000000000..81a7365205e --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/src/utils/command-utils.ts @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { window } from "vscode"; +import { MACHINE_VIEW, ProjectInfo } from "@wso2/ballerina-core"; + +export function requiresPackageSelection( + workspacePath: string | undefined, + view: MACHINE_VIEW | undefined, + projectPath: string | undefined, + isWebviewOpen: boolean, + hasActiveTextEditor: boolean +): boolean { + return !!( + workspacePath && + (view === MACHINE_VIEW.WorkspaceOverview || !projectPath || !isWebviewOpen) && + !hasActiveTextEditor + ); +} + +export async function promptPackageSelection( + availablePackages: string[], + placeHolder?: string +): Promise { + return window.showQuickPick(availablePackages, { + placeHolder: placeHolder || "Select a package", + ignoreFocusOut: false + }); +} + +export function needsProjectDiscovery( + projectInfo: ProjectInfo, + projectRoot: string | undefined, + projectPath: string | undefined +): boolean { + return !projectInfo || (!!projectRoot && projectPath !== projectRoot); +} diff --git a/workspaces/ballerina/ballerina-extension/src/utils/config.ts b/workspaces/ballerina/ballerina-extension/src/utils/config.ts index 53073684086..f9ea67888bc 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/config.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/config.ts @@ -16,11 +16,12 @@ * under the License. */ -import { SCOPE } from '@wso2/ballerina-core'; +import { SemanticVersion, PackageTomlValues, SCOPE, WorkspaceTomlValues, ProjectInfo } from '@wso2/ballerina-core'; import { BallerinaExtension } from '../core'; -import { WorkspaceConfiguration, workspace, Uri } from 'vscode'; +import { WorkspaceConfiguration, workspace, Uri, RelativePattern } from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; +import { parse } from '@iarna/toml'; export enum VERSION { BETA = 'beta', @@ -97,18 +98,92 @@ export function isSupportedVersion(ballerinaExtInstance: BallerinaExtension, sup return false; } -export function isSupportedSLVersion(ballerinaExtInstance: BallerinaExtension, minSupportedVersion: number) { +/** + * Creates a version object for comparison. + * + * @param major Major version number + * @param minor Minor version number + * @param patch Patch version number + * @returns A version object with major, minor, and patch components + * + * @example + * // Version 2201.1.30 + * createVersionNumber(2201, 1, 30) + * // Version 2201.12.10 + * createVersionNumber(2201, 12, 10) + */ +export function createVersionNumber( + major: number, + minor: number, + patch: number +): SemanticVersion { + return { major, minor, patch }; +} + +/** + * Compares two versions using semantic versioning rules. + * Returns true if current version >= minimum version. + * + * @param current Current version components + * @param minimum Minimum required version components + * @returns true if current >= minimum + */ +function compareVersions( + current: SemanticVersion, + minimum: SemanticVersion +): boolean { + // Compare major version first + if (current.major !== minimum.major) { + return current.major > minimum.major; + } + + // Major versions are equal, compare minor + if (current.minor !== minimum.minor) { + return current.minor > minimum.minor; + } + + // Major and minor are equal, compare patch + return current.patch >= minimum.patch; +} + +/** + * Compares the current Ballerina version against a minimum required version. + * Only returns true for GA (non-preview/alpha/beta) versions that meet or exceed the minimum. + * + * @param ballerinaExtInstance The Ballerina extension instance + * @param minSupportedVersion Minimum version (use createVersionNumber helper to generate) + * @returns true if current version is GA and meets minimum requirement + * + * @example + * // Check if version is at least 2201.1.30 + * isSupportedSLVersion(ext, createVersionNumber(2201, 1, 30)) + */ +export function isSupportedSLVersion( + ballerinaExtInstance: BallerinaExtension, + minSupportedVersion: SemanticVersion +) { const ballerinaVersion: string = ballerinaExtInstance.ballerinaVersion.toLocaleLowerCase(); const isGA: boolean = !ballerinaVersion.includes(VERSION.ALPHA) && !ballerinaVersion.includes(VERSION.BETA) && !ballerinaVersion.includes(VERSION.PREVIEW); + if (!isGA) { + return false; + } + + // Parse current version const regex = /(\d+)\.(\d+)\.(\d+)/; const match = ballerinaVersion.match(regex); - const currentVersionNumber = match ? Number(match.slice(1).join("")) : 0; - - if (minSupportedVersion <= currentVersionNumber && isGA) { - return true; + if (!match) { + return false; } - return false; + + const currentVersion = { + major: Number(match[1]), + minor: Number(match[2]), + patch: Number(match[3]) + }; + + // Compare versions component by component + return compareVersions(currentVersion, minSupportedVersion); } export function checkIsBI(uri: Uri): boolean { @@ -126,9 +201,81 @@ export function checkIsBI(uri: Uri): boolean { return false; // Return false if isBI is not set } -export function checkIsBallerina(uri: Uri): boolean { +export async function checkIsBallerinaPackage(uri: Uri): Promise { const ballerinaTomlPath = path.join(uri.fsPath, 'Ballerina.toml'); - return fs.existsSync(ballerinaTomlPath); + + // First check if the file exists + if (!fs.existsSync(ballerinaTomlPath)) { + return false; + } + + try { + const tomlValues = await getProjectTomlValues(uri.fsPath); + return tomlValues?.package !== undefined; + } catch (error) { + // If there's an error reading the file, it's not a valid Ballerina project + console.error(`Error reading package Ballerina.toml: ${error}`); + return false; + } +} + + +export async function checkIsBallerinaWorkspace(uri: Uri): Promise { + const ballerinaTomlPath = path.join(uri.fsPath, 'Ballerina.toml'); + + // First check if the file exists + if (!fs.existsSync(ballerinaTomlPath)) { + return false; + } + + try { + const tomlValues = await getWorkspaceTomlValues(uri.fsPath); + return tomlValues?.workspace !== undefined && tomlValues.workspace?.packages !== undefined; + } catch (error) { + // If there's an error reading the file, it's not a valid Ballerina workspace + console.error(`Error reading workspace Ballerina.toml: ${error}`); + return false; + } +} + +export async function hasMultipleBallerinaPackages(uri: Uri): Promise { + const packages = await getBallerinaPackages(uri); + return packages.length > 1; +} + +export async function getBallerinaPackages(uri: Uri): Promise { + try { + const ballerinaTomlPattern = `**${path.sep}Ballerina.toml`; + const tomls = await workspace.findFiles( + new RelativePattern(uri.fsPath, ballerinaTomlPattern) + ); + + if (tomls.length === 0) { + return []; + } + + // Collect valid package paths (Ballerina.toml files with [package] section) + const packagePaths: string[] = []; + + for (const toml of tomls) { + const projectRoot = path.dirname(toml.fsPath); + try { + const tomlValues = await getProjectTomlValues(projectRoot); + // Only count as a package if it has a package section + if (tomlValues?.package !== undefined) { + packagePaths.push(projectRoot); + } + } catch (error) { + // Skip invalid TOML files + console.error(`Error reading Ballerina.toml at ${toml.fsPath}: ${error}`); + } + } + + return packagePaths; + } catch (error) { + console.error(`Error checking for multiple Ballerina packages: ${error}`); + return []; + } } export function getOrgPackageName(projectPath: string): { orgName: string, packageName: string } { @@ -156,6 +303,32 @@ export function getOrgPackageName(projectPath: string): { orgName: string, packa } } +export async function getProjectTomlValues(projectPath: string): Promise | undefined> { + const ballerinaTomlPath = path.join(projectPath, 'Ballerina.toml'); + if (fs.existsSync(ballerinaTomlPath)) { + const tomlContent = await fs.promises.readFile(ballerinaTomlPath, 'utf-8'); + try { + return parse(tomlContent) as Partial; + } catch (error) { + console.error("Failed to load Ballerina.toml content for project at path: ", projectPath, error); + return; + } + } +} + +export async function getWorkspaceTomlValues(workspacePath: string): Promise | undefined> { + const ballerinaTomlPath = path.join(workspacePath, 'Ballerina.toml'); + if (fs.existsSync(ballerinaTomlPath)) { + const tomlContent = await fs.promises.readFile(ballerinaTomlPath, 'utf-8'); + try { + return parse(tomlContent) as Partial; + } catch (error) { + console.error("Failed to load Ballerina.toml content for workspace at path: ", workspacePath, error); + return; + } + } +} + export function fetchScope(uri: Uri): SCOPE { const config = workspace.getConfiguration('ballerina', uri); const inspected = config.inspect('scope'); @@ -183,3 +356,27 @@ export function setupBIFiles(projectDir: string): void { } }); } + +export function getOrgAndPackageName(projectInfo: ProjectInfo, projectPath: string): { orgName: string, packageName: string } { + if (!projectPath || !projectInfo) { + return { orgName: '', packageName: '' }; + } + + if (projectInfo.children?.length) { + const matchedProject = projectInfo.children.find( + (child) => child.projectPath === projectPath + ); + + if (matchedProject) { + return { + orgName: matchedProject.org || matchedProject.orgName, + packageName: matchedProject.title || matchedProject.name + }; + } + } + + return { + orgName: projectInfo.org || projectInfo.orgName, + packageName: projectInfo.title || projectInfo.name + }; +} diff --git a/workspaces/ballerina/ballerina-extension/src/utils/file-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/file-utils.ts index 9bc57e70ffa..97bc039886a 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/file-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/file-utils.ts @@ -38,6 +38,7 @@ import { } from "../features/telemetry"; import { NodePosition } from "@wso2/syntax-tree"; import { existsSync } from "fs"; +import { checkIsBallerinaPackage } from "./config"; interface ProgressMessage { message: string; increment?: number; @@ -47,7 +48,6 @@ const ALLOWED_ORG_LIST = ['ballerina-platform', 'ballerina-guides', 'ballerinax' const GIT_DOMAIN = "github.com"; const GIST_OWNER = "ballerina-github-bot"; const NEXT_STARTING_UP_FILE = "next-starting-up-file"; -const BALLERINA_TOML = "Ballerina.toml"; const REPO_LOCATIONS = "repository-locations"; const buildStatusItem = window.createStatusBarItem(StatusBarAlignment.Left, 100); @@ -384,8 +384,8 @@ function getGitHubRawFileUrl(githubFileUrl) { } async function resolveModules(langClient: ExtendedLangClient, pathValue) { - const isBallerinProject = findBallerinaTomlFile(pathValue); - if (isBallerinProject) { + const ballerinProjectPath = await findBallerinaPackageRoot(pathValue); + if (ballerinProjectPath) { // Create a status bar item for the build notification buildStatusItem.text = "$(sync~spin) Pulling modules..."; buildStatusItem.tooltip = "Pulling the missing ballerina modules."; @@ -427,19 +427,28 @@ async function resolveModules(langClient: ExtendedLangClient, pathValue) { } } -function findBallerinaTomlFile(filePath) { +export async function findBallerinaPackageRoot(filePath: string) { + if (!filePath) { + return null; + } + let currentFolderPath = path.dirname(filePath); while (currentFolderPath !== path.sep) { - const tomlFilePath = path.join(currentFolderPath, BALLERINA_TOML); - if (fs.existsSync(tomlFilePath)) { + const isBallerinaPackage = await checkIsBallerinaPackage(Uri.parse(currentFolderPath)); + if (isBallerinaPackage) { return currentFolderPath; } - currentFolderPath = path.dirname(currentFolderPath); + const parentPath = path.dirname(currentFolderPath); + // Prevent infinite loop + if (parentPath === currentFolderPath) { + break; + } + currentFolderPath = parentPath; } - return null; // Ballerina.toml not found in any parent folder + return null; } export async function handleResolveMissingDependencies(ballerinaExtInstance: BallerinaExtension) { @@ -514,6 +523,14 @@ function urlToUniqueID(url) { return hash.digest('hex'); } +export function getProjectWorkingDirectory(projectPath: string): string { + try { + return fs.statSync(projectPath).isFile() ? path.dirname(projectPath) : projectPath; + } catch (error) { + throw error; + } +} + export async function goToSource(nodePosition: NodePosition, documentUri: string) { const { startLine, startColumn, endLine, endColumn } = nodePosition; if (!existsSync(documentUri)) { diff --git a/workspaces/ballerina/ballerina-extension/src/utils/logger.ts b/workspaces/ballerina/ballerina-extension/src/utils/logger.ts index cc8be1a259a..d507c28b191 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/logger.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/logger.ts @@ -23,6 +23,7 @@ import os from 'os'; import fs from 'fs'; export const outputChannel = vscode.window.createOutputChannel("Ballerina"); +export const buildOutputChannel = vscode.window.createOutputChannel("Ballerina Build"); const logLevelDebug: boolean = getPluginConfig().get('debugLog') === true; function withNewLine(value: string) { diff --git a/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts b/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts index 5851b19636c..02da6e72759 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/migrate-integration.ts @@ -131,7 +131,7 @@ export async function pullMigrationTool(migrationToolName: string, version: stri // Extract download info from progress line if available const sizeMatch = lastLine.match(/(\d+)\/(\d+)\s+KB/); - let message = `Downloading... ${currentPercentage}%`; + let message = `Downloading...`; if (sizeMatch) { const downloaded = parseInt(sizeMatch[1], 10); diff --git a/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts b/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts index 185bc617958..9269a352017 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/project-artifacts.ts @@ -16,16 +16,58 @@ * under the License. */ import * as vscode from "vscode"; +import * as path from 'path'; import { URI, Utils } from "vscode-uri"; -import { ARTIFACT_TYPE, Artifacts, ArtifactsNotification, BaseArtifact, DIRECTORY_MAP, NodePosition, ProjectStructureArtifactResponse, ProjectStructureResponse } from "@wso2/ballerina-core"; +import { ARTIFACT_TYPE, Artifacts, ArtifactsNotification, BaseArtifact, DIRECTORY_MAP, PROJECT_KIND, ProjectInfo, ProjectStructure, ProjectStructureArtifactResponse, ProjectStructureResponse } from "@wso2/ballerina-core"; import { StateMachine } from "../stateMachine"; import { ExtendedLangClient } from "../core/extended-language-client"; import { ArtifactsUpdated, ArtifactNotificationHandler } from "./project-artifacts-handler"; -import { CommonRpcManager } from "../rpc-managers/common/rpc-manager"; -export async function buildProjectArtifactsStructure(projectDir: string, langClient: ExtendedLangClient, isUpdate: boolean = false): Promise { - const result: ProjectStructureResponse = { - projectName: "", +export async function buildProjectsStructure( + projectInfo: ProjectInfo, + langClient: ExtendedLangClient, + isUpdate: boolean = false +): Promise { + + const isWorkspace = projectInfo.projectKind === PROJECT_KIND.WORKSPACE_PROJECT; + + const packages = isWorkspace ? projectInfo.children : [projectInfo]; + + const projects: ProjectStructure[] = []; + for (const packageInfo of packages) { + const project = await buildProjectArtifactsStructure( + packageInfo.projectPath, + packageInfo.name, + packageInfo.title, + langClient + ); + projects.push(project); + } + + const response: ProjectStructureResponse = { + workspaceName: isWorkspace ? projectInfo.name : undefined, + workspacePath: isWorkspace ? projectInfo.projectPath : undefined, + workspaceTitle: isWorkspace ? projectInfo.title : undefined, + projects: projects + }; + + if (isUpdate) { + StateMachine.updateProjectStructure({ ...response }); + } + + return response; +} + +async function buildProjectArtifactsStructure( + projectPath: string, + packageName: string, + packageTitle: string, + langClient: ExtendedLangClient +): Promise { + const result: ProjectStructure = { + projectName: packageName, + projectPath: projectPath, + projectTitle: packageTitle, directoryMap: { [DIRECTORY_MAP.AUTOMATION]: [], [DIRECTORY_MAP.SERVICE]: [], @@ -40,34 +82,23 @@ export async function buildProjectArtifactsStructure(projectDir: string, langCli [DIRECTORY_MAP.LOCAL_CONNECTORS]: [], } }; - const designArtifacts = await langClient.getProjectArtifacts({ projectPath: projectDir }); + const designArtifacts = await langClient.getProjectArtifacts({ projectPath }); console.log("designArtifacts", designArtifacts); if (designArtifacts?.artifacts) { - traverseComponents(designArtifacts.artifacts, result); - await populateLocalConnectors(projectDir, result); + traverseComponents(designArtifacts.artifacts, projectPath, result); + await populateLocalConnectors(projectPath, result); } - // Attempt to get the project name from the workspace folder as a fallback if not found in Ballerina.toml - const workspace = vscode.workspace.workspaceFolders?.find(folder => folder.uri.fsPath === projectDir); - let projectName = workspace?.name; - // Get the project name from the ballerina.toml file - const commonRpcManager = new CommonRpcManager(); - const tomlValues = await commonRpcManager.getCurrentProjectTomlValues(); - if (tomlValues && tomlValues.package.title) { - projectName = tomlValues.package.title; - } - result.projectName = projectName; - if (isUpdate) { - StateMachine.updateProjectStructure({ ...result }); - } return result; } export async function updateProjectArtifacts(publishedArtifacts: ArtifactsNotification): Promise { // Current project structure const currentProjectStructure: ProjectStructureResponse = StateMachine.context().projectStructure; - const projectUri = URI.file(StateMachine.context().projectUri); - const isWithinProject = URI.parse(publishedArtifacts.uri).fsPath.toLowerCase().includes(projectUri.fsPath.toLowerCase()); + const projectUri = URI.file(StateMachine.context().projectPath) || URI.file(StateMachine.context().workspacePath); + const isWithinProject = URI + .parse(publishedArtifacts.uri).fsPath.toLowerCase() + .includes(projectUri.fsPath.toLowerCase()); if (currentProjectStructure && isWithinProject) { const entryLocations = await traverseUpdatedComponents(publishedArtifacts.artifacts, currentProjectStructure); const notificationHandler = ArtifactNotificationHandler.getInstance(); @@ -87,19 +118,26 @@ export async function updateProjectArtifacts(publishedArtifacts: ArtifactsNotifi } } -async function traverseComponents(artifacts: Artifacts, response: ProjectStructureResponse) { - response.directoryMap[DIRECTORY_MAP.AUTOMATION].push(...await getComponents(artifacts[ARTIFACT_TYPE.EntryPoints], DIRECTORY_MAP.AUTOMATION, "task")); - response.directoryMap[DIRECTORY_MAP.SERVICE].push(...await getComponents(artifacts[ARTIFACT_TYPE.EntryPoints], DIRECTORY_MAP.SERVICE, "http-service")); - response.directoryMap[DIRECTORY_MAP.LISTENER].push(...await getComponents(artifacts[ARTIFACT_TYPE.Listeners], DIRECTORY_MAP.LISTENER, "http-service")); - response.directoryMap[DIRECTORY_MAP.FUNCTION].push(...await getComponents(artifacts[ARTIFACT_TYPE.Functions], DIRECTORY_MAP.FUNCTION, "function")); - response.directoryMap[DIRECTORY_MAP.DATA_MAPPER].push(...await getComponents(artifacts[ARTIFACT_TYPE.DataMappers], DIRECTORY_MAP.DATA_MAPPER, "dataMapper")); - response.directoryMap[DIRECTORY_MAP.CONNECTION].push(...await getComponents(artifacts[ARTIFACT_TYPE.Connections], DIRECTORY_MAP.CONNECTION, "connection")); - response.directoryMap[DIRECTORY_MAP.TYPE].push(...await getComponents(artifacts[ARTIFACT_TYPE.Types], DIRECTORY_MAP.TYPE, "type")); - response.directoryMap[DIRECTORY_MAP.CONFIGURABLE].push(...await getComponents(artifacts[ARTIFACT_TYPE.Configurations], DIRECTORY_MAP.CONFIGURABLE, "config")); - response.directoryMap[DIRECTORY_MAP.NP_FUNCTION].push(...await getComponents(artifacts[ARTIFACT_TYPE.NaturalFunctions], DIRECTORY_MAP.NP_FUNCTION, "function")); +async function traverseComponents(artifacts: Artifacts, projectPath: string, response: ProjectStructure) { + response.directoryMap[DIRECTORY_MAP.AUTOMATION].push(...await getComponents(artifacts[ARTIFACT_TYPE.EntryPoints], projectPath, DIRECTORY_MAP.AUTOMATION, "task")); + response.directoryMap[DIRECTORY_MAP.SERVICE].push(...await getComponents(artifacts[ARTIFACT_TYPE.EntryPoints], projectPath, DIRECTORY_MAP.SERVICE, "http-service")); + response.directoryMap[DIRECTORY_MAP.LISTENER].push(...await getComponents(artifacts[ARTIFACT_TYPE.Listeners], projectPath, DIRECTORY_MAP.LISTENER, "http-service")); + response.directoryMap[DIRECTORY_MAP.FUNCTION].push(...await getComponents(artifacts[ARTIFACT_TYPE.Functions], projectPath, DIRECTORY_MAP.FUNCTION, "function")); + response.directoryMap[DIRECTORY_MAP.DATA_MAPPER].push(...await getComponents(artifacts[ARTIFACT_TYPE.DataMappers], projectPath, DIRECTORY_MAP.DATA_MAPPER, "dataMapper")); + response.directoryMap[DIRECTORY_MAP.CONNECTION].push(...await getComponents(artifacts[ARTIFACT_TYPE.Connections], projectPath, DIRECTORY_MAP.CONNECTION, "connection")); + response.directoryMap[DIRECTORY_MAP.TYPE].push(...await getComponents(artifacts[ARTIFACT_TYPE.Types], projectPath, DIRECTORY_MAP.TYPE, "type")); + response.directoryMap[DIRECTORY_MAP.CONFIGURABLE].push(...await getComponents(artifacts[ARTIFACT_TYPE.Configurations], projectPath, DIRECTORY_MAP.CONFIGURABLE, "config")); + response.directoryMap[DIRECTORY_MAP.NP_FUNCTION].push(...await getComponents(artifacts[ARTIFACT_TYPE.NaturalFunctions], projectPath, DIRECTORY_MAP.NP_FUNCTION, "function")); } -async function getComponents(artifacts: Record, artifactType: DIRECTORY_MAP, icon: string, moduleName?: string): Promise { +async function getComponents( + artifacts: Record, + projectPath: string, + artifactType: DIRECTORY_MAP, + icon: string, + moduleName?: string +): Promise { + const entries: ProjectStructureArtifactResponse[] = []; if (!artifacts) { return entries; @@ -110,14 +148,14 @@ async function getComponents(artifacts: Record, artifactTy if (artifact.type !== artifactType) { continue; } - const entryValue = await getEntryValue(artifact, icon, moduleName); + const entryValue = await getEntryValue(artifact, projectPath, icon, moduleName); entries.push(entryValue); } return entries; } -async function getEntryValue(artifact: BaseArtifact, icon: string, moduleName?: string) { - const targetFile = Utils.joinPath(URI.file(StateMachine.context().projectUri), artifact.location.fileName).fsPath; +async function getEntryValue(artifact: BaseArtifact, projectPath: string, icon: string, moduleName?: string) { + const targetFile = Utils.joinPath(URI.file(projectPath), artifact.location.fileName).fsPath; const entryValue: ProjectStructureArtifactResponse = { id: artifact.id, name: artifact.name, @@ -154,17 +192,17 @@ async function getEntryValue(artifact: BaseArtifact, icon: string, moduleName?: }; } else { // Get the children of the service - const resourceFunctions = await getComponents(artifact.children, DIRECTORY_MAP.RESOURCE, icon, artifact.module); - const remoteFunctions = await getComponents(artifact.children, DIRECTORY_MAP.REMOTE, icon, artifact.module); - const privateFunctions = await getComponents(artifact.children, DIRECTORY_MAP.FUNCTION, icon, artifact.module); + const resourceFunctions = await getComponents(artifact.children, projectPath, DIRECTORY_MAP.RESOURCE, icon, artifact.module); + const remoteFunctions = await getComponents(artifact.children, projectPath, DIRECTORY_MAP.REMOTE, icon, artifact.module); + const privateFunctions = await getComponents(artifact.children, projectPath, DIRECTORY_MAP.FUNCTION, icon, artifact.module); entryValue.resources = [...resourceFunctions, ...remoteFunctions, ...privateFunctions]; } break; case DIRECTORY_MAP.TYPE: if (artifact.children && Object.keys(artifact.children).length > 0) { - const resourceFunctions = await getComponents(artifact.children, DIRECTORY_MAP.RESOURCE, icon, artifact.module); - const remoteFunctions = await getComponents(artifact.children, DIRECTORY_MAP.REMOTE, icon, artifact.module); - const privateFunctions = await getComponents(artifact.children, DIRECTORY_MAP.FUNCTION, icon, artifact.module); + const resourceFunctions = await getComponents(artifact.children, projectPath, DIRECTORY_MAP.RESOURCE, icon, artifact.module); + const remoteFunctions = await getComponents(artifact.children, projectPath, DIRECTORY_MAP.REMOTE, icon, artifact.module); + const privateFunctions = await getComponents(artifact.children, projectPath, DIRECTORY_MAP.FUNCTION, icon, artifact.module); entryValue.resources = [...resourceFunctions, ...remoteFunctions, ...privateFunctions]; } break; @@ -257,8 +295,10 @@ function getDirectoryMapKeyAndIcon(artifact: BaseArtifact, artifactCategoryKey: function processDeletion(artifact: BaseArtifact, artifactCategoryKey: string, projectStructure: ProjectStructureResponse): void { const mapping = getDirectoryMapKeyAndIcon(artifact, artifactCategoryKey); if (mapping) { - projectStructure.directoryMap[mapping.mapKey] = - projectStructure.directoryMap[mapping.mapKey]?.filter(value => value.id !== artifact.id) ?? []; + const projectPath = StateMachine.context().projectPath; + const project = projectStructure.projects.find(project => project.projectPath === projectPath); + project.directoryMap[mapping.mapKey] = + project.directoryMap[mapping.mapKey]?.filter(value => value.id !== artifact.id) ?? []; } else { console.error(`Could not determine directory map key for deletion of artifact ${artifact.id} in category ${artifactCategoryKey}`); } @@ -275,13 +315,16 @@ async function processAddition(artifact: BaseArtifact, artifactCategoryKey: stri const mapping = getDirectoryMapKeyAndIcon(artifact, artifactCategoryKey); if (mapping) { try { - const entryValue = await getEntryValue(artifact, mapping.icon); + const projectPath = StateMachine.context().projectPath; + const entryValue = await getEntryValue(artifact, projectPath, mapping.icon); + + const project = projectStructure.projects.find(project => project.projectPath === projectPath); // Ensure the array exists before pushing - if (!projectStructure.directoryMap[mapping.mapKey]) { - projectStructure.directoryMap[mapping.mapKey] = []; + if (!project.directoryMap[mapping.mapKey]) { + project.directoryMap[mapping.mapKey] = []; } entryValue.isNew = true; // This is a flag to identify the new artifact - projectStructure.directoryMap[mapping.mapKey]?.push(entryValue); + project.directoryMap[mapping.mapKey]?.push(entryValue); return entryValue; } catch (error) { console.error(`Error processing addition for artifact ${artifact.id} in category ${artifactCategoryKey}:`, error); @@ -304,18 +347,20 @@ async function processUpdate(artifact: BaseArtifact, artifactCategoryKey: string const mapping = getDirectoryMapKeyAndIcon(artifact, artifactCategoryKey); if (mapping) { try { - const entryValue = await getEntryValue(artifact, mapping.icon); + const projectPath = StateMachine.context().projectPath; + const entryValue = await getEntryValue(artifact, projectPath, mapping.icon); + const project = projectStructure.projects.find(project => project.projectPath === projectPath); // Ensure the array exists - if (!projectStructure.directoryMap[mapping.mapKey]) { - projectStructure.directoryMap[mapping.mapKey] = []; + if (!project.directoryMap[mapping.mapKey]) { + project.directoryMap[mapping.mapKey] = []; } - const index = projectStructure.directoryMap[mapping.mapKey]?.findIndex(value => value.id === artifact.id); + const index = project.directoryMap[mapping.mapKey]?.findIndex(value => value.id === artifact.id); if (index !== undefined && index !== -1) { - projectStructure.directoryMap[mapping.mapKey][index] = entryValue; + project.directoryMap[mapping.mapKey][index] = entryValue; } else { // Artifact not found for update, add it instead (matches original logic) console.warn(`Artifact ${artifact.id} not found for update in ${mapping.mapKey}, adding it instead.`); - projectStructure.directoryMap[mapping.mapKey]?.push(entryValue); + project.directoryMap[mapping.mapKey]?.push(entryValue); } return entryValue; } catch (error) { @@ -359,9 +404,12 @@ async function traverseUpdatedComponents(publishedArtifacts: Artifacts, currentP // Wait for all additions and updates to complete const results = await Promise.all(promises); - for (const key of Object.keys(currentProjectStructure.directoryMap)) { - if (currentProjectStructure.directoryMap[key]) { - currentProjectStructure.directoryMap[key].sort((a, b) => a.name.localeCompare(b.name)); + const projectPath = StateMachine.context().projectPath; + const project = currentProjectStructure.projects.find(project => project.projectPath === projectPath); + + for (const key of Object.keys(project.directoryMap)) { + if (project.directoryMap[key]) { + project.directoryMap[key].sort((a, b) => a.name.localeCompare(b.name)); } } @@ -374,9 +422,9 @@ async function traverseUpdatedComponents(publishedArtifacts: Artifacts, currentP return entryLocations; } -async function populateLocalConnectors(projectDir: string, response: ProjectStructureResponse) { +async function populateLocalConnectors(projectDir: string, response: ProjectStructure) { const filePath = `${projectDir}/Ballerina.toml`; - const localConnectors = (await StateMachine.langClient().getOpenApiGeneratedModules({ projectPath: projectDir })).modules; + const localConnectors = (await StateMachine.langClient().getOpenApiGeneratedModules({ projectPath: projectDir })).modules || []; const mappedEntries: ProjectStructureArtifactResponse[] = localConnectors.map(moduleName => ({ id: moduleName, name: moduleName, @@ -426,6 +474,10 @@ function getCustomEntryNodeIcon(type: string) { return "bi-ftp"; case "file": return "bi-file"; + case "mcp": + return "bi-mcp"; + case "solace": + return "bi-solace"; default: return "bi-globe"; } diff --git a/workspaces/ballerina/ballerina-extension/src/utils/project-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/project-utils.ts index 55bf802e4b1..919ae05e7be 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/project-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/project-utils.ts @@ -17,16 +17,36 @@ */ import { extension } from "../BalExtensionContext"; -import { Uri, window, workspace } from "vscode"; +import { Uri, window, workspace, RelativePattern, WorkspaceFolder } from "vscode"; import * as path from 'path'; -import { isSupportedVersion, VERSION } from "./config"; +import { checkIsBallerinaPackage, isSupportedVersion, VERSION } from "./config"; import { BallerinaProject } from "@wso2/ballerina-core"; +import { readFileSync } from 'fs'; +import { dirname, sep } from 'path'; +import { parseTomlToConfig } from '../features/config-generator/utils'; +import { PROJECT_TYPE } from "../features/project"; +import { StateMachine } from "../stateMachine"; -function getCurrentBallerinaProject(file?: string): Promise { +const BALLERINA_TOML_REGEX = `**${sep}Ballerina.toml`; +const BALLERINA_FILE_REGEX = `**${sep}*.bal`; + +export interface BALLERINA_TOML { + package: PACKAGE; + "build-options": any; +} + +export interface PACKAGE { + org: string; + name: string; + version: string; + distribution: string; +} + +function getCurrentBallerinaProject(projectPath?: string): Promise { return new Promise((resolve, reject) => { const activeEditor = window.activeTextEditor; // get path of the current bal file - const uri = file ? Uri.file(file) : activeEditor.document.uri; + const uri = projectPath ? Uri.file(projectPath) : activeEditor.document.uri; // if currently opened file is a bal file if (extension.ballerinaExtInstance.langClient && isSupportedVersion(extension.ballerinaExtInstance, VERSION.BETA, 1)) { // get Ballerina Project path for current Ballerina file @@ -78,4 +98,134 @@ function addToWorkspace(url: string) { workspace.updateWorkspaceFolders(workspace.workspaceFolders ? workspace.workspaceFolders.length : 0, null, { uri: Uri.parse(url) }); } -export { addToWorkspace, getCurrentBallerinaProject, getCurrentBallerinaFile, getCurrenDirectoryPath }; +async function selectBallerinaProjectForDebugging(workspaceFolder?: WorkspaceFolder): Promise { + const tomls = await workspace.findFiles(workspaceFolder ? new RelativePattern(workspaceFolder, BALLERINA_TOML_REGEX) : BALLERINA_TOML_REGEX); + const projects: { project: BallerinaProject; balFile: Uri; relativePath: string }[] = []; + + for (const toml of tomls) { + const projectRoot = dirname(toml.fsPath); + const balFiles = await workspace.findFiles(new RelativePattern(projectRoot, BALLERINA_FILE_REGEX), undefined, 1); + if (balFiles.length > 0) { + const tomlContent: string = readFileSync(toml.fsPath, 'utf8'); + const tomlObj: BALLERINA_TOML = parseTomlToConfig(tomlContent) as BALLERINA_TOML; + const relativePath = workspace.asRelativePath(projectRoot); + // Add only if package name is present in Ballerina.toml (this is to exclude workspace projects) + if (tomlObj.package && tomlObj.package.name) { + projects.push({ project: { packageName: tomlObj.package.name }, balFile: balFiles[0], relativePath }); + } + } + } + + if (projects.length === 1) { + return projects[0].balFile.fsPath; + } else if (projects.length > 1) { + const selectedProject = await window.showQuickPick(projects.map((project) => { + return { + label: project.project.packageName, + description: project.relativePath + }; + }), { placeHolder: "Detected multiple Ballerina projects within the workspace. Select one to debug.", canPickMany: false }); + + if (selectedProject) { + const foundProject = projects.find((project) => project.project.packageName === selectedProject.label); + if (foundProject) { + return foundProject.balFile.fsPath; + } + } + throw new Error("Project selection cancelled"); + } else { + extension.ballerinaExtInstance.showMessageInvalidProject(); + throw new Error("No valid Ballerina projects found"); + } +} + + +/** + * Determines and returns the current project root directory. + * + * Resolution order: + * 1. State machine context (when working within a webview) + * 2. Open Ballerina file's project root + * 3. Workspace root (if it's a valid Ballerina package) + * + * @returns The current project root path + * @throws Error if unable to determine a valid Ballerina project root + */ +async function getCurrentProjectRoot(): Promise { + const currentFilePath = tryGetCurrentBallerinaFile(); + const contextProjectRoot = StateMachine.context()?.projectPath; + + // Use state machine context only when not in a regular text editor (e.g., within a webview) + if (contextProjectRoot && !currentFilePath) { + return contextProjectRoot; + } + + // Resolve project root from the currently open Ballerina file + if (currentFilePath) { + const projectRoot = await resolveProjectRootFromFile(currentFilePath); + if (projectRoot) { + return projectRoot; + } + } + + // Fallback to workspace root if it's a valid Ballerina package + const workspaceRoot = getWorkspaceRoot(); + if (!workspaceRoot) { + throw new Error("Unable to determine the current workspace root."); + } + + if (await checkIsBallerinaPackage(Uri.file(workspaceRoot))) { + return workspaceRoot; + } + + throw new Error(`No valid Ballerina project found`); +} + +/** + * Safely attempts to get the current Ballerina file without throwing errors. + * @returns The current Ballerina file path or undefined if not available + */ +export function tryGetCurrentBallerinaFile(): string | undefined { + try { + return getCurrentBallerinaFile(); + } catch { + return undefined; + } +} + +/** + * Resolves the project root from the given Ballerina file. + * @param filePath The Ballerina file path + * @returns The project root path or undefined if unable to resolve + */ +async function resolveProjectRootFromFile(filePath: string): Promise { + try { + const project = await getCurrentBallerinaProject(filePath); + + if (project.kind === PROJECT_TYPE.SINGLE_FILE) { + return filePath; + } + + return project.path; + } catch { + return undefined; + } +} + +/** + * Gets the workspace root directory. + * @returns The workspace root path or undefined if not available + */ +function getWorkspaceRoot(): string | undefined { + return workspace.workspaceFolders?.[0]?.uri.fsPath; +} + +export { + addToWorkspace, + getCurrentBallerinaProject, + getCurrentBallerinaFile, + getCurrenDirectoryPath, + selectBallerinaProjectForDebugging, + getCurrentProjectRoot, + getWorkspaceRoot +}; diff --git a/workspaces/ballerina/ballerina-extension/src/utils/runCommand.ts b/workspaces/ballerina/ballerina-extension/src/utils/runCommand.ts index 49dddf0f045..ee791f5075e 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/runCommand.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/runCommand.ts @@ -38,6 +38,93 @@ export async function runBackgroundTerminalCommand(command: string) { }); } +/** + * Run a command with output streamed to an output channel + * @param command Command to execute + * @param cwd Working directory for the command + * @param outputChannel VSCode output channel to stream output to + * @param onProgress Optional callback to report progress (e.g., module being pulled) + * @returns Promise that resolves with success status and exit code + */ +export function runCommandWithOutput( + command: string, + cwd: string, + outputChannel: vscode.OutputChannel, + onProgress?: (message: string) => void +): Promise<{ success: boolean; exitCode: number | null }> { + return new Promise((resolve) => { + console.log(`[runCommandWithOutput] Executing: ${command} in ${cwd}`); + + // Show the output channel + outputChannel.show(true); + outputChannel.appendLine(`Running: ${command}`); + outputChannel.appendLine(`Working directory: ${cwd}`); + outputChannel.appendLine(''); + + // Spawn the process + const proc = child_process.spawn(command, [], { + shell: true, + cwd: cwd, + env: process.env as { [key: string]: string } + }); + + // Handle stdout + proc.stdout?.on('data', (data: Buffer) => { + const text = data.toString(); + outputChannel.append(text); + + // Parse module names from output for progress reporting + if (onProgress) { + // Look for patterns like "ballerinax/redis:3.1.0 [central.ballerina.io..." + const moduleMatch = text.match(/(\w+\/[\w-]+:\d+\.\d+\.\d+)\s+\[/); + if (moduleMatch) { + const moduleName = moduleMatch[1]; + onProgress(`Pulling ${moduleName} ...`); + } + + // Also check for "pulled from central successfully" messages + const successMatch = text.match(/(\w+\/[\w-]+:\d+\.\d+\.\d+)\s+pulled from central successfully/); + if (successMatch) { + const moduleName = successMatch[1]; + onProgress(`${moduleName} pulled successfully`); + } + } + }); + + // Handle stderr + proc.stderr?.on('data', (data: Buffer) => { + const text = data.toString(); + outputChannel.append(text); + console.log(`[runCommandWithOutput] stderr: ${text}`); + onProgress(`Something went wrong. check the output for more details.`); + }); + + // Handle process errors + proc.on('error', (error) => { + const errorMsg = `Process error: ${error.message}`; + outputChannel.appendLine(errorMsg); + console.error(`[runCommandWithOutput] ${errorMsg}`, error); + onProgress(`Something went wrong. check the output for more details.`); + resolve({ success: false, exitCode: null }); + }); + + // Handle process exit + proc.on('close', (code) => { + const exitMsg = `\nProcess exited with code ${code}`; + outputChannel.appendLine(exitMsg); + console.log(`[runCommandWithOutput] ${exitMsg}`); + + const success = code === 0; + if (success) { + onProgress(`All dependencies pulled successfully`); + } else { + onProgress(`Something went wrong. check the output for more details.`); + } + resolve({ success, exitCode: code }); + }); + }); +} + export function openExternalUrl(url:string){ vscode.env.openExternal(vscode.Uri.parse(url)); } diff --git a/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts b/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts index df95ea9b0e0..d817676ef4c 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/server/server.ts @@ -21,7 +21,7 @@ import { debug, log } from '../logger'; import { ServerOptions, ExecutableOptions } from 'vscode-languageclient/node'; import { isWindows } from '..'; import { BallerinaExtension } from '../../core'; -import { isSupportedSLVersion } from '../config'; +import { isSupportedSLVersion, createVersionNumber } from '../config'; import * as fs from 'fs'; import * as path from 'path'; import { orderBy } from 'lodash'; @@ -150,7 +150,7 @@ export function findHighestVersionJdk(directory: string): string | null { export function getServerOptions(extension: BallerinaExtension): ServerOptions { debug('Getting server options.'); // Check if user wants to use Ballerina CLI language server or if version requires it - const BI_SUPPORTED_MINIMUM_VERSION = 2201123; // 2201.12.3 + const BI_SUPPORTED_MINIMUM_VERSION = createVersionNumber(2201, 12, 3); // Version 2201.12.3 if (extension?.useDistributionLanguageServer() || !isSupportedSLVersion(extension, BI_SUPPORTED_MINIMUM_VERSION)) { return getServerOptionsUsingCLI(extension); } else { diff --git a/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts index 3b8e653b3c3..dc3b1ffbc95 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/source-utils.ts @@ -19,9 +19,8 @@ import * as vscode from 'vscode'; import * as fs from 'fs'; import { workspace } from 'vscode'; -import { Uri, Position } from 'vscode'; -import { ArtifactData, EVENT_TYPE, LinePosition, MACHINE_VIEW, ProjectStructureArtifactResponse, STModification, SyntaxTree, TextEdit } from '@wso2/ballerina-core'; -import path from 'path'; +import { Uri } from 'vscode'; +import { ArtifactData, EVENT_TYPE, MACHINE_VIEW, ProjectStructureArtifactResponse, STModification, TextEdit } from '@wso2/ballerina-core'; import { openView, StateMachine, undoRedoManager } from '../stateMachine'; import { ArtifactsUpdated, ArtifactNotificationHandler } from './project-artifacts-handler'; import { existsSync, writeFileSync } from 'fs'; @@ -33,13 +32,18 @@ export interface UpdateSourceCodeRequest { [key: string]: TextEdit[]; }; resolveMissingDependencies?: boolean; + artifactData?: ArtifactData; + description?: string; + identifier?: string; + skipPayloadCheck?: boolean; // This is used to skip the payload check because the payload data might become empty as a result of a change. Example: Deleting a component. + isRenameOperation?: boolean; // This is used to identify if the update is a rename operation. } -export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCodeRequest, artifactData?: ArtifactData, description?: string): Promise { +export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCodeRequest, isChangeFromHelperPane?: boolean): Promise { try { let tomlFilesUpdated = false; StateMachine.setEditMode(); - undoRedoManager.startBatchOperation(); + undoRedoManager?.startBatchOperation(); const modificationRequests: Record = {}; for (const [key, value] of Object.entries(updateSourceCodeRequest.textEdits)) { const fileUri = key.startsWith("file:") ? Uri.parse(key) : Uri.file(key); @@ -70,7 +74,7 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode // Get the before content of the file by using the workspace api const document = await workspace.openTextDocument(fileUri); const beforeContent = document.getText(); - undoRedoManager.addFileToBatch(fileUri.fsPath, beforeContent, beforeContent); + undoRedoManager?.addFileToBatch(fileUri.fsPath, beforeContent, beforeContent); if (edits && edits.length > 0) { const modificationList: STModification[] = []; @@ -140,10 +144,10 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode ), formattedSource.newText ); - undoRedoManager.addFileToBatch(fileUri.fsPath, formattedSource.newText, formattedSource.newText); + undoRedoManager?.addFileToBatch(fileUri.fsPath, formattedSource.newText, formattedSource.newText); } } - undoRedoManager.commitBatchOperation(description ? description : (artifactData ? `Change in ${artifactData?.artifactType} ${artifactData?.identifier}` : "Update Source Code")); + undoRedoManager?.commitBatchOperation(updateSourceCodeRequest.description ? updateSourceCodeRequest.description : (updateSourceCodeRequest.artifactData ? `Change in ${updateSourceCodeRequest.artifactData?.artifactType} ${updateSourceCodeRequest.artifactData?.identifier}` : "Update Source Code")); // Apply all formatted changes at once await workspace.applyEdit(formattedWorkspaceEdit); @@ -166,13 +170,15 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode // Get the artifact notification handler instance const notificationHandler = ArtifactNotificationHandler.getInstance(); // Subscribe to artifact updated notifications - let unsubscribe = notificationHandler.subscribe(ArtifactsUpdated.method, artifactData, async (payload) => { - console.log("Received notification:", payload); - clearTimeout(timeoutId); - resolve(payload.data); - StateMachine.setReadyMode(); - checkAndNotifyWebview(payload.data); - unsubscribe(); + let unsubscribe = notificationHandler.subscribe(ArtifactsUpdated.method, updateSourceCodeRequest.artifactData, async (payload) => { + if ((payload.data && payload.data.length > 0) || updateSourceCodeRequest.skipPayloadCheck) { + console.log("Received notification:", payload); + clearTimeout(timeoutId); + resolve(payload.data); + StateMachine.setReadyMode(); + checkAndNotifyWebview(payload.data, updateSourceCodeRequest, isChangeFromHelperPane); + unsubscribe(); + } }); // Set a timeout to reject if no notification is received within 10 seconds @@ -180,7 +186,7 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode console.log("No artifact update notification received within 10 seconds"); unsubscribe(); StateMachine.setReadyMode(); - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.Overview }); + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.PackageOverview }); reject(new Error("Operation timed out. Please try again.")); }, 10000); @@ -198,7 +204,7 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode } } catch (error) { StateMachine.setReadyMode(); - undoRedoManager.cancelBatchOperation(); + undoRedoManager?.cancelBatchOperation(); console.log(">>> error updating source", error); throw error; } @@ -208,12 +214,23 @@ export async function updateSourceCode(updateSourceCodeRequest: UpdateSourceCode //** // Notify webview unless a new TYPE artifact is created outside the type diagram view // */ -function checkAndNotifyWebview(response: ProjectStructureArtifactResponse[]) { +function checkAndNotifyWebview( + response: ProjectStructureArtifactResponse[], + request: UpdateSourceCodeRequest, + isChangeFromHelperPane?: boolean +) { const newArtifact = response.find(artifact => artifact.isNew); + const selectedArtifact = response.find(artifact => artifact.id === request.identifier); const stateContext = StateMachine.context().view; - if (newArtifact?.type === "TYPE" && stateContext !== MACHINE_VIEW.TypeDiagram) { + + if (request.isRenameOperation) { + notifyCurrentWebview(); + return; + } + + if ((selectedArtifact?.type === "TYPE " || newArtifact?.type === "TYPE") && stateContext !== MACHINE_VIEW.TypeDiagram) { return; - } else { + } else if (!isChangeFromHelperPane) { notifyCurrentWebview(); } } diff --git a/workspaces/ballerina/ballerina-extension/src/utils/state-machine-utils.ts b/workspaces/ballerina/ballerina-extension/src/utils/state-machine-utils.ts index 6a7ed14191d..a769b3291f7 100644 --- a/workspaces/ballerina/ballerina-extension/src/utils/state-machine-utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/utils/state-machine-utils.ts @@ -28,10 +28,10 @@ import { getConstructBodyString } from "./history/util"; import { extension } from "../BalExtensionContext"; import path from "path"; -export async function getView(documentUri: string, position: NodePosition, projectUri?: string): Promise { +export async function getView(documentUri: string, position: NodePosition, projectPath: string): Promise { const haveTreeData = !!StateMachine.context().projectStructure; - const isServiceClassFunction = await checkForServiceClassFunctions(documentUri, position); - if (isServiceClassFunction || path.relative(projectUri || '', documentUri).startsWith("tests")) { + const isServiceClassFunction = await checkForServiceClassFunctions(documentUri, position, projectPath); + if (isServiceClassFunction || path.relative(projectPath || '', documentUri).startsWith("tests")) { return { location: { view: MACHINE_VIEW.BIDiagram, @@ -42,17 +42,18 @@ export async function getView(documentUri: string, position: NodePosition, proje dataMapperDepth: 0 }; } else if (haveTreeData) { - return getViewByArtifacts(documentUri, position, projectUri); + return getViewByArtifacts(documentUri, position, projectPath); } else { - return await getViewBySTRange(documentUri, position, projectUri); + return await getViewBySTRange(documentUri, position, projectPath); } } -async function checkForServiceClassFunctions(documentUri: string, position: NodePosition) { +async function checkForServiceClassFunctions(documentUri: string, position: NodePosition, projectPath: string) { const currentProjectArtifacts = StateMachine.context().projectStructure; if (currentProjectArtifacts) { - for (const dir of currentProjectArtifacts.directoryMap[DIRECTORY_MAP.TYPE]) { + const project = currentProjectArtifacts.projects.find(project => project.projectPath === projectPath); + for (const dir of project.directoryMap[DIRECTORY_MAP.TYPE]) { if (dir.path === documentUri && isPositionWithinBlock(position, dir.position)) { const req = getSTByRangeReq(documentUri, position); const node = await StateMachine.langClient().getSTByRange(req) as SyntaxTreeResponse; @@ -66,7 +67,7 @@ async function checkForServiceClassFunctions(documentUri: string, position: Node } // TODO: This is not used anymore. Remove it. -async function getViewBySTRange(documentUri: string, position: NodePosition, projectUri?: string) { +async function getViewBySTRange(documentUri: string, position: NodePosition, projectPath?: string): Promise { const req = getSTByRangeReq(documentUri, position); const node = await StateMachine.langClient().getSTByRange(req) as SyntaxTreeResponse; if (node.parseSuccess) { @@ -85,7 +86,7 @@ async function getViewBySTRange(documentUri: string, position: NodePosition, pro documentUri: documentUri, position: position, identifier: name, - projectUri: projectUri + projectPath } }; } @@ -104,7 +105,7 @@ async function getViewBySTRange(documentUri: string, position: NodePosition, pro documentUri: documentUri, position: position, identifier: name, - projectUri: projectUri + projectPath } }; } @@ -123,7 +124,7 @@ async function getViewBySTRange(documentUri: string, position: NodePosition, pro documentUri: documentUri, position: position, identifier: name, - projectUri: projectUri + projectPath } }; } @@ -174,7 +175,7 @@ async function getViewBySTRange(documentUri: string, position: NodePosition, pro identifier: node.syntaxTree.absoluteResourcePath.map((path) => path.value).join(''), documentUri: documentUri, position: position, - projectUri: projectUri + projectPath } }; } else { @@ -196,7 +197,24 @@ async function getViewBySTRange(documentUri: string, position: NodePosition, pro view: MACHINE_VIEW.DataMapper, identifier: node.syntaxTree.functionName.value, documentUri: documentUri, - position: position + position: position, + artifactType: DIRECTORY_MAP.DATA_MAPPER, + dataMapperMetadata: { + name: node.syntaxTree.functionName.value, + codeData: { + lineRange: { + fileName: documentUri, + startLine: { + line: position.startLine, + offset: position.startColumn + }, + endLine: { + line: position.endLine, + offset: position.endColumn + } + } + } + }, }, dataMapperDepth: 0 }; @@ -245,21 +263,22 @@ async function getViewBySTRange(documentUri: string, position: NodePosition, pro } } - return { location: { view: MACHINE_VIEW.Overview, documentUri: documentUri } }; + return { location: { view: MACHINE_VIEW.PackageOverview, documentUri: documentUri } }; } -function getViewByArtifacts(documentUri: string, position: NodePosition, projectUri?: string) { +function getViewByArtifacts(documentUri: string, position: NodePosition, projectPath: string) { const currentProjectArtifacts = StateMachine.context().projectStructure; if (currentProjectArtifacts) { // Iterate through each category in the directory map - for (const [key, directory] of Object.entries(currentProjectArtifacts.directoryMap)) { + const project = currentProjectArtifacts.projects.find(project => project.projectPath === projectPath); + for (const [key, directory] of Object.entries(project.directoryMap)) { // Check each artifact in the category for (const dir of directory) { // Go through the resources array if it exists if (dir.resources && dir.resources.length > 0) { for (const resource of dir.resources) { - const view = findViewByArtifact(resource, position, documentUri, projectUri); + const view = findViewByArtifact(resource, position, documentUri, projectPath); if (view) { view.location.parentIdentifier = dir.name; return view; @@ -267,18 +286,23 @@ function getViewByArtifacts(documentUri: string, position: NodePosition, project } } // Check the current directory - const view = findViewByArtifact(dir, position, documentUri, projectUri); + const view = findViewByArtifact(dir, position, documentUri, projectPath); if (view) { return view; } } } // If no view is found, return the overview view - return { location: { view: MACHINE_VIEW.Overview, documentUri: documentUri } }; + return { location: { view: MACHINE_VIEW.PackageOverview, documentUri: documentUri } }; } } -function findViewByArtifact(dir: ProjectStructureArtifactResponse, position: NodePosition, documentUri: string, projectUri?: string): HistoryEntry { +function findViewByArtifact( + dir: ProjectStructureArtifactResponse, + position: NodePosition, + documentUri: string, + projectPath?: string +): HistoryEntry { const currentDocumentUri = documentUri; const artifactUri = dir.path; if (artifactUri === currentDocumentUri && isPositionWithinRange(position, dir.position)) { @@ -291,7 +315,7 @@ function findViewByArtifact(dir: ProjectStructureArtifactResponse, position: Nod identifier: dir.name, documentUri: currentDocumentUri, position: position, - projectUri: projectUri, + projectPath: projectPath, artifactType: DIRECTORY_MAP.SERVICE } }; @@ -302,7 +326,7 @@ function findViewByArtifact(dir: ProjectStructureArtifactResponse, position: Nod identifier: dir.name, documentUri: currentDocumentUri, position: position, - projectUri: projectUri, + projectPath: projectPath, artifactType: DIRECTORY_MAP.SERVICE, } }; @@ -381,7 +405,7 @@ function findViewByArtifact(dir: ProjectStructureArtifactResponse, position: Nod documentUri: currentDocumentUri, position: position, identifier: dir.name, - projectUri: projectUri, + projectPath: projectPath, artifactType: DIRECTORY_MAP.TYPE } }; @@ -483,52 +507,3 @@ function getSTByRangeReq(documentUri: string, position: NodePosition) { } }; } - -export async function updateCurrentArtifactLocation(artifacts: UpdatedArtifactsResponse) { - if (artifacts.artifacts.length === 0) { - return; - } - console.log(">>> Updating current artifact location", { artifacts }); - // Get the updated component and update the location - const currentIdentifier = StateMachine.context().identifier; - const currentType = StateMachine.context().type; - - // Find the correct artifact by currentIdentifier (id) - let currentArtifact = undefined; - for (const artifact of artifacts.artifacts) { - if (currentType && currentType.codedata.node === "CLASS" && currentType.name === artifact.name) { - currentArtifact = artifact; - if (artifact.resources && artifact.resources.length > 0) { - const resource = artifact.resources.find( - (resource) => resource.id === currentIdentifier || resource.name === currentIdentifier - ); - if (resource) { - currentArtifact = resource; - break; - } - } - - } else if (artifact.id === currentIdentifier || artifact.name === currentIdentifier) { - currentArtifact = artifact; - } - - // Check if artifact has resources and find within those - if (artifact.resources && artifact.resources.length > 0) { - const resource = artifact.resources.find( - (resource) => resource.id === currentIdentifier || resource.name === currentIdentifier - ); - if (resource) { - currentArtifact = resource; - } - } - } - - if (currentArtifact) { - openView(EVENT_TYPE.UPDATE_PROJECT_LOCATION, { - documentUri: currentArtifact.path, - position: currentArtifact.position, - identifier: currentIdentifier, - }); - } -} - diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts index 3fe5b860c14..5ec1579ee30 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/activate.ts @@ -17,21 +17,21 @@ */ import * as vscode from 'vscode'; -import { AIPanelPrompt, SHARED_COMMANDS } from '@wso2/ballerina-core'; +import { AIPanelPrompt, EVENT_TYPE, MACHINE_VIEW, ProjectInfo, SHARED_COMMANDS } from '@wso2/ballerina-core'; import { closeAIWebview, openAIWebview } from './aiMachine'; import { BallerinaExtension } from '../../core'; import { notifyAiWebview } from '../../RPCLayer'; +import { openView, StateMachine } from '../../stateMachine'; +import { MESSAGES } from '../../features/project/cmds/cmd-runner'; +import { VisualizerWebview } from '../visualizer/webview'; +import { needsProjectDiscovery, promptPackageSelection, requiresPackageSelection } from '../../utils/command-utils'; +import { getCurrentProjectRoot, tryGetCurrentBallerinaFile } from '../../utils/project-utils'; +import { findBallerinaPackageRoot } from '../../utils'; +import { findWorkspaceTypeFromWorkspaceFolders } from '../../rpc-managers/common/utils'; export function activateAiPanel(ballerinaExtInstance: BallerinaExtension) { ballerinaExtInstance.context.subscriptions.push( - vscode.commands.registerCommand(SHARED_COMMANDS.OPEN_AI_PANEL, (defaultPrompt?: AIPanelPrompt) => { - if (defaultPrompt instanceof vscode.Uri) { - // Passed directly from vscode side - openAIWebview(null); - } else { - openAIWebview(defaultPrompt); - } - }) + vscode.commands.registerCommand(SHARED_COMMANDS.OPEN_AI_PANEL, handleOpenAIPanel) ); ballerinaExtInstance.context.subscriptions.push( vscode.commands.registerCommand(SHARED_COMMANDS.CLOSE_AI_PANEL, () => { @@ -45,3 +45,112 @@ export function activateAiPanel(ballerinaExtInstance: BallerinaExtension) { ); console.log("AI Panel Activated"); } + +// --- AI Panel Command Helpers --- + +async function handleOpenAIPanel(defaultPrompt?: AIPanelPrompt): Promise { + const { projectInfo, projectPath, view, workspacePath } = StateMachine.context(); + const isWebviewOpen = VisualizerWebview.currentPanel !== undefined; + const hasActiveTextEditor = !!vscode.window.activeTextEditor; + + const currentBallerinaFile = tryGetCurrentBallerinaFile(); + const projectRoot = await findBallerinaPackageRoot(currentBallerinaFile); + + const needsPackageSelection = requiresPackageSelection( + workspacePath, view, projectPath, isWebviewOpen, hasActiveTextEditor + ); + + if (needsPackageSelection) { + const handled = await handleWorkspaceLevelAIPanel(projectInfo); + if (handled) { + return; + } + } + + if (needsProjectDiscovery(projectInfo, projectRoot, projectPath)) { + const success = await handleProjectDiscoveryForAIPanel(); + if (!success) { + return; + } + } + + openAIWebviewWithPrompt(defaultPrompt); +} + +async function handleWorkspaceLevelAIPanel(projectInfo: ProjectInfo): Promise { + const availablePackages = projectInfo?.children.map((child: ProjectInfo) => child.projectPath) ?? []; + + if (availablePackages.length === 0) { + vscode.window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return false; + } + + try { + const selectedPackage = await promptPackageSelection( + availablePackages, + "Select a package to open AI panel" + ); + + if (!selectedPackage) { + return true; // User cancelled + } + + openPackageOverviewView(selectedPackage); + return false; // Continue to open AI webview + } catch (error) { + console.error("Error selecting package:", error); + return true; + } +} + +async function handleProjectDiscoveryForAIPanel(): Promise { + try { + const success = await tryOpenPackageOverviewForDiscoveredProject(); + if (!success) { + vscode.window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return false; + } + return true; + } catch { + vscode.window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return false; + } +} + +function openAIWebviewWithPrompt(defaultPrompt?: AIPanelPrompt): void { + const prompt = defaultPrompt instanceof vscode.Uri ? null : defaultPrompt; + openAIWebview(prompt); +} + +function openPackageOverviewView(projectPath?: string, resetHistory = false): void { + openView( + EVENT_TYPE.OPEN_VIEW, + { view: MACHINE_VIEW.PackageOverview, projectPath }, + resetHistory + ); +} + +async function tryOpenPackageOverviewForDiscoveredProject(): Promise { + const workspaceType = await findWorkspaceTypeFromWorkspaceFolders(); + const packageRoot = await getCurrentProjectRoot(); + + if (!packageRoot) { + return false; + } + + if (workspaceType.type === "MULTIPLE_PROJECTS") { + const projectInfo = await StateMachine.langClient().getProjectInfo({ projectPath: packageRoot }); + await StateMachine.updateProjectRootAndInfo(packageRoot, projectInfo); + openPackageOverviewView(packageRoot, true); + return true; + } + + if (workspaceType.type === "BALLERINA_WORKSPACE") { + openPackageOverviewView(packageRoot, true); + return true; + } + + return false; +} + +// --- End AI Panel Command Helpers --- diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/errorCodes.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/errorCodes.ts index 6f92cf085eb..aeb3a090703 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/errorCodes.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/errorCodes.ts @@ -77,3 +77,8 @@ export const INVALID_RECORD_UNION_TYPE: ErrorCode = { code: 14, message: "AI data mapper does not support input or output as a union of records." }; + +export const INVALID_RECORD_REFERENCE: ErrorCode = { + code: 15, + message: "Invalid record reference. Follow /: format when referencing to record in another package." +}; diff --git a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts index dfb87b2deb3..8033adafaca 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/ai-panel/utils.ts @@ -23,8 +23,8 @@ import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock'; import { generateText } from 'ai'; import { getAuthUrl, getLogoutUrl } from './auth'; import { extension } from '../../BalExtensionContext'; -import { getAccessToken, clearAuthCredentials, storeAuthCredentials, getLoginMethod } from '../../utils/ai/auth'; -import { DEVANT_API_KEY, DEVANT_STS_TOKEN_CONFIG } from '../../features/ai/utils'; +import { getAccessToken, clearAuthCredentials, storeAuthCredentials, getLoginMethod, exchangeStsToken, getAuthCredentials } from '../../utils/ai/auth'; +import { DEVANT_STS_TOKEN_CONFIG } from '../../features/ai/utils'; import { getBedrockRegionalPrefix } from '../../features/ai/service/connection'; import { getDevantStsToken } from '../../features/devant/activator'; @@ -134,21 +134,50 @@ export const validateApiKey = async (apiKey: string, loginMethod: LoginMethod): }; export const checkDevantEnvironment = async (): Promise => { - const devantStsToken = DEVANT_STS_TOKEN_CONFIG || await getDevantStsToken(); - // Check if both required devant environment variables are present and non-empty - if (!DEVANT_API_KEY || !devantStsToken || - DEVANT_API_KEY.trim() === '' || devantStsToken.trim() === '') { + // Check if CLOUD_STS_TOKEN environment variable exists (Devant flow identifier) + if (!('CLOUD_STS_TOKEN' in process.env)) { return undefined; } - // Return devant credentials without storing (always read from env) - return { - loginMethod: LoginMethod.DEVANT_ENV, - secrets: { - apiKey: DEVANT_API_KEY, - stsToken: devantStsToken + try { + // Check if a valid access token already exists to avoid redundant exchanges + const existingCredentials = await getAuthCredentials(); + + if (existingCredentials && existingCredentials.loginMethod === LoginMethod.DEVANT_ENV) { + // existing session, check expiry + const { expiresAt } = existingCredentials.secrets; + const now = Date.now(); + + // If token is still valid (not expired), return existing credentials + if (expiresAt && expiresAt > now) { + return existingCredentials; + } + } + if (existingCredentials && existingCredentials.loginMethod !== LoginMethod.DEVANT_ENV) { + // not devant + return undefined; + } + + // Get STS token from config or platform extension + const choreoStsToken = await getDevantStsToken() || DEVANT_STS_TOKEN_CONFIG; + + if (!choreoStsToken || choreoStsToken.trim() === '') { + console.warn('CLOUD_STS_TOKEN env variable exists but no STS token available'); + return undefined; } - }; + + // Exchange STS token for Bearer token (if no valid token exists or token expired) + const devantSecrets = await exchangeStsToken(choreoStsToken); + + // Return devant credentials without storing (always read from env and exchange on demand) + return { + loginMethod: LoginMethod.DEVANT_ENV, + secrets: devantSecrets + }; + } catch (error) { + console.error('Error in checkDevantEnvironment:', error); + return undefined; + } }; export const validateAwsCredentials = async (credentials: { diff --git a/workspaces/ballerina/ballerina-extension/src/views/bbe/activator.ts b/workspaces/ballerina/ballerina-extension/src/views/bbe/activator.ts index eda692f24a5..c05206026ea 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/bbe/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/bbe/activator.ts @@ -104,12 +104,6 @@ function showExamples(context: ExtensionContext, langClient: ExtendedLangClient) } export function activate(ballerinaExtInstance: BallerinaExtension) { - const context = ballerinaExtInstance.context; - const langClient = ballerinaExtInstance.langClient; - const examplesListRenderer = commands.registerCommand(PALETTE_COMMANDS.SHOW_EXAMPLES, () => { - sendTelemetryEvent(ballerinaExtInstance, TM_EVENT_OPEN_EXAMPLES, CMP_EXAMPLES_VIEW); - showExamples(context, langClient); - }); - - context.subscriptions.push(examplesListRenderer); + // TODO: Implement this once the samples are available + // https://github.com/wso2/product-ballerina-integrator/issues/1967 } diff --git a/workspaces/ballerina/ballerina-extension/src/views/migration-report/webview.ts b/workspaces/ballerina/ballerina-extension/src/views/migration-report/webview.ts index 0e4c1dd6ec1..1797dc1cf5b 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/migration-report/webview.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/migration-report/webview.ts @@ -19,6 +19,7 @@ import { Disposable, Uri, ViewColumn, WebviewPanel, window } from "vscode"; import { extension } from "../../BalExtensionContext"; import path from "path"; +import { MigrateIntegrationRpcManager } from "../../rpc-managers/migrate-integration/rpc-manager"; export class MigrationReportWebview { public static currentPanel: MigrationReportWebview | undefined; @@ -29,31 +30,75 @@ export class MigrationReportWebview { this._panel = panel; this._panel.onDidDispose(() => this.dispose(), null, this._disposables); - const htmlWithStyleRemoval = reportContent.replace( + // Get the singleton RPC manager + const rpcManager = MigrateIntegrationRpcManager.getInstance(); + + // Set up message listener to handle clicks from webview + this._panel.webview.onDidReceiveMessage( + message => { + if (message.type === 'openSubProjectReport') { + // Forward the message to the RPC manager + rpcManager.openSubProjectReport({ + projectName: message.projectName + }).catch(error => { + console.error("Failed to open sub-project report:", error); + }); + } + }, + null, + this._disposables + ); + + const htmlWithScripts = reportContent.replace( "", `` ); - this._panel.webview.html = htmlWithStyleRemoval; + this._panel.webview.html = htmlWithScripts; } public static createOrShow(fileName: string, reportContent: string): void { - if (MigrationReportWebview.currentPanel) { + // For the aggregate report (default name), reuse the panel if it exists + const isAggregateReport = fileName === "migration-report.html"; + + if (isAggregateReport && MigrationReportWebview.currentPanel) { MigrationReportWebview.currentPanel._panel.reveal(ViewColumn.Active); MigrationReportWebview.currentPanel.updateContent(reportContent); return; } const panel = window.createWebviewPanel( - "migrationReport", - `Migration Report`, + isAggregateReport ? "migrationReport" : `migrationReport-${Date.now()}`, + isAggregateReport ? `Migration Report` : `Migration Report - ${fileName}`, ViewColumn.Active, { enableScripts: true, @@ -66,23 +111,50 @@ export class MigrationReportWebview { dark: Uri.file(path.join(extension.context.extensionPath, "resources", "icons", "dark-icon.svg")), }; - MigrationReportWebview.currentPanel = new MigrationReportWebview(panel, reportContent); + const webview = new MigrationReportWebview(panel, reportContent); + + // Only set as currentPanel if it's the aggregate report + if (isAggregateReport) { + MigrationReportWebview.currentPanel = webview; + } } private updateContent(reportContent: string): void { - const htmlWithStyleRemoval = reportContent.replace( + const htmlWithScripts = reportContent.replace( "", `` ); - this._panel.webview.html = htmlWithStyleRemoval; + this._panel.webview.html = htmlWithScripts; } public dispose(): void { diff --git a/workspaces/ballerina/ballerina-extension/src/views/persist-layer-diagram/activator.ts b/workspaces/ballerina/ballerina-extension/src/views/persist-layer-diagram/activator.ts index ff24490d7fa..76eb85b55a9 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/persist-layer-diagram/activator.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/persist-layer-diagram/activator.ts @@ -16,19 +16,10 @@ * under the License. */ -import { TextEditor, Uri, ViewColumn, WebviewPanel, commands, window, workspace } from "vscode"; -import { debounce } from "lodash"; -import { basename, dirname, join } from "path"; -import { existsSync } from "fs"; -import { PALETTE_COMMANDS } from "../../features/project/cmds/cmd-runner"; +import { TextEditor, Uri, window } from "vscode"; +import { basename, dirname } from "path"; import { BallerinaExtension, ExtendedLangClient } from "../../core"; -import { getCommonWebViewOptions } from "../../utils"; -import { render } from "./renderer"; - -const COMPATIBILITY_MESSAGE = "An incompatible Ballerina version was detected. Update Ballerina to 2201.6.0 or higher to use the feature."; - -let diagramWebview: WebviewPanel | undefined; -let filePath: string | undefined; +import { checkIsBallerinaPackage } from "../../utils"; export function activate(ballerinaExtInstance: BallerinaExtension) { const langClient = ballerinaExtInstance.langClient; @@ -119,6 +110,10 @@ export function activate(ballerinaExtInstance: BallerinaExtension) { // return parseFloat(ballerinaVersion) >= 2201.6; // } -export function checkIsPersistModelFile(fileUri: Uri): boolean { - return basename(dirname(fileUri.fsPath)) === 'persist' && existsSync(join(dirname(dirname(fileUri.fsPath)), 'Ballerina.toml')); +export async function checkIsPersistModelFile(fileUri: Uri): Promise { + const directoryPath = dirname(fileUri.fsPath); + const parentDirectoryPath = dirname(directoryPath); + const directoryName = basename(directoryPath); + const isBallerinaPackage = await checkIsBallerinaPackage(Uri.parse(parentDirectoryPath)); + return directoryName === 'persist' && isBallerinaPackage; } diff --git a/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts b/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts index e0894d64d09..fd212c0f631 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/visualizer/activate.ts @@ -17,22 +17,37 @@ */ import * as vscode from 'vscode'; -import { PALETTE_COMMANDS } from '../../features/project/cmds/cmd-runner'; +import { MESSAGES, PALETTE_COMMANDS } from '../../features/project/cmds/cmd-runner'; import { StateMachine, openView } from '../../stateMachine'; import { extension } from '../../BalExtensionContext'; -import { BI_COMMANDS, EVENT_TYPE, MACHINE_VIEW, NodePosition, SHARED_COMMANDS } from '@wso2/ballerina-core'; -import { ViewColumn } from 'vscode'; -import { buildProjectArtifactsStructure } from '../../utils/project-artifacts'; +import { BI_COMMANDS, EVENT_TYPE, MACHINE_VIEW, NodePosition, ProjectInfo, SHARED_COMMANDS } from '@wso2/ballerina-core'; +import { buildProjectsStructure } from '../../utils/project-artifacts'; +import { createVersionNumber, findBallerinaPackageRoot, isSupportedSLVersion } from '../../utils'; +import { VisualizerWebview } from './webview'; +import { findWorkspaceTypeFromWorkspaceFolders } from '../../rpc-managers/common/utils'; +import { getCurrentProjectRoot, tryGetCurrentBallerinaFile } from '../../utils/project-utils'; +import { requiresPackageSelection, needsProjectDiscovery, promptPackageSelection } from '../../utils/command-utils'; export function activateSubscriptions() { const context = extension.context; context.subscriptions.push( vscode.commands.registerCommand(PALETTE_COMMANDS.SHOW_SOURCE, () => { - const path = StateMachine.context().documentUri; + const context = StateMachine.context(); + const path = context.documentUri; if (!path) { return; } - vscode.window.showTextDocument(vscode.Uri.file(path), { viewColumn: ViewColumn.Beside }); + + const showOptions: vscode.TextDocumentShowOptions = { viewColumn: vscode.ViewColumn.Beside }; + + const position = context.position; + if (position) { + const startPosition = new vscode.Position(position.startLine, position.startColumn); + const endPosition = new vscode.Position(position.endLine, position.endColumn); + showOptions.selection = new vscode.Range(startPosition, endPosition); + } + + vscode.window.showTextDocument(vscode.Uri.file(path), showOptions); }) ); @@ -45,37 +60,82 @@ export function activateSubscriptions() { // <------------- Shared Commands ------------> context.subscriptions.push( - vscode.commands.registerCommand(SHARED_COMMANDS.SHOW_VISUALIZER, (path: string | vscode.Uri, position, resetHistory = false) => { - // Check if position is a LineRange object (has 'start' and 'end' keys) - let nodePosition: NodePosition = position; - if (position && typeof position === "object" && "start" in position && "end" in position) { - // Convert LineRange to NodePosition - nodePosition = { - startLine: position.start.line, - startColumn: position.start.character, - endLine: position.end.line, - endColumn: position.end.character - }; - } - let documentPath = ""; - if (path) { - if (typeof path === "string") { - if (path.startsWith("file:")) { - documentPath = vscode.Uri.parse(path).fsPath; - } else { - documentPath = vscode.Uri.file(path).fsPath; + vscode.commands.registerCommand( + SHARED_COMMANDS.SHOW_VISUALIZER, + async ( + pathOrItem: string | vscode.Uri | vscode.TreeItem, + position, + resetHistory = false + ) => { + // Check if position is a LineRange object (has 'start' and 'end' keys) + let nodePosition: NodePosition = position; + if (position && typeof position === "object" && "start" in position && "end" in position) { + // Convert LineRange to NodePosition + nodePosition = { + startLine: position.start.line, + startColumn: position.start.character, + endLine: position.end.line, + endColumn: position.end.character + }; + } + let documentPath = ""; + if (pathOrItem) { + if (typeof pathOrItem === "string") { + if (pathOrItem.startsWith("file:")) { + documentPath = vscode.Uri.parse(pathOrItem).fsPath; + } else { + documentPath = vscode.Uri.file(pathOrItem).fsPath; + } + } else if (pathOrItem instanceof vscode.Uri) { + documentPath = pathOrItem.fsPath; } - } else if (path.fsPath) { - documentPath = path.fsPath; } - } - if (StateMachine.langClient() && StateMachine.context().isBISupported) { // This is added since we can't fetch new diagram data without bi supported ballerina version - openView(EVENT_TYPE.OPEN_VIEW, { documentUri: documentPath || vscode.window.activeTextEditor?.document.uri.fsPath, position: nodePosition }, resetHistory); - } else { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BallerinaUpdateView }); // Redirect user to the ballerina update available page - } - }) + let projectPath = StateMachine.context().projectPath; + const projectRoot = await findBallerinaPackageRoot(documentPath); + + const isBallerinaWorkspace = !!StateMachine.context().workspacePath; + if (isBallerinaWorkspace) { + if (pathOrItem instanceof vscode.TreeItem) { + openView( + EVENT_TYPE.OPEN_VIEW, + { + projectPath: pathOrItem.resourceUri?.fsPath, + view: MACHINE_VIEW.PackageOverview + }, + true + ); + return; + } + const documentUri = documentPath || vscode.window.activeTextEditor?.document.uri.fsPath; + openView( + EVENT_TYPE.OPEN_VIEW, + { + projectPath: projectRoot, + documentUri: documentUri, + position: nodePosition + }, + true + ); + return; + } + + if (!projectPath || projectPath !== projectRoot) { + // Initialize project structure if not already set by finding and loading the Ballerina project root + // Can happen when the user opens a directory containing multiple Ballerina projects + if (projectRoot) { + const projectInfo = await StateMachine.langClient().getProjectInfo({ projectPath: projectRoot }); + await StateMachine.updateProjectRootAndInfo(projectRoot, projectInfo); + } + } + + if (StateMachine.langClient() && StateMachine.context().isBISupported) { // This is added since we can't fetch new diagram data without bi supported ballerina version + openView(EVENT_TYPE.OPEN_VIEW, { documentUri: documentPath || vscode.window.activeTextEditor?.document.uri.fsPath, position: nodePosition }, resetHistory); + } else { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BallerinaUpdateView }); // Redirect user to the ballerina update available page + } + } + ) ); context.subscriptions.push( @@ -86,7 +146,8 @@ export function activateSubscriptions() { context.subscriptions.push( vscode.commands.registerCommand(SHARED_COMMANDS.FORCE_UPDATE_PROJECT_ARTIFACTS, () => { - return buildProjectArtifactsStructure(StateMachine.context().projectUri, StateMachine.langClient(), true); + console.log("Force updating project artifacts..."); + return buildProjectsStructure(StateMachine.context().projectInfo, StateMachine.langClient(), true); }) ); @@ -102,19 +163,107 @@ export function activateSubscriptions() { context.subscriptions.push( vscode.commands.registerCommand(SHARED_COMMANDS.OPEN_BI_NEW_PROJECT, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIProjectForm }); + const isBallerinaWorkspace = !!StateMachine.context().workspacePath; + const isWorkspaceSupported = isSupportedSLVersion( + extension.ballerinaExtInstance, + createVersionNumber(2201, 13, 0) + ); + + if (isBallerinaWorkspace && isWorkspaceSupported) { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIAddProjectForm }); + } else { + openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.BIProjectForm }); + } }) ); context.subscriptions.push( - vscode.commands.registerCommand(BI_COMMANDS.OPEN_TYPE_DIAGRAM, () => { - openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.TypeDiagram }); - }) + vscode.commands.registerCommand(BI_COMMANDS.OPEN_TYPE_DIAGRAM, handleOpenTypeDiagram) ); - StateMachine.service().onTransition((state) => { vscode.commands.executeCommand('setContext', 'showBalGoToSource', state.context?.documentUri !== undefined); }); } + +// --- Type Diagram Command Helpers --- + +function openTypeDiagramView(projectPath?: string, resetHistory = false): void { + openView( + EVENT_TYPE.OPEN_VIEW, + { view: MACHINE_VIEW.TypeDiagram, projectPath }, + resetHistory + ); +} + +async function openTypeDiagramForWorkspace(projectInfo: ProjectInfo): Promise { + const availablePackages = projectInfo?.children.map((child: any) => child.projectPath) ?? []; + + if (availablePackages.length === 0) { + vscode.window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + return false; + } + + const selectedPackage = await promptPackageSelection(availablePackages, "Select a package to open type diagram"); + + if (!selectedPackage) { + return false; // User cancelled + } + + openTypeDiagramView(selectedPackage); + return true; +} + +async function tryOpenTypeDiagramForDiscoveredProject(): Promise { + const workspaceType = await findWorkspaceTypeFromWorkspaceFolders(); + const packageRoot = await getCurrentProjectRoot(); + + if (!packageRoot) { + return false; + } + + if (workspaceType.type === "MULTIPLE_PROJECTS") { + const projectInfo = await StateMachine.langClient().getProjectInfo({ projectPath: packageRoot }); + await StateMachine.updateProjectRootAndInfo(packageRoot, projectInfo); + openTypeDiagramView(packageRoot, true); + return true; + } + + if (workspaceType.type === "BALLERINA_WORKSPACE") { + openTypeDiagramView(packageRoot, true); + return true; + } + + return false; +} + +async function handleOpenTypeDiagram(): Promise { + const { projectInfo, projectPath, view, workspacePath } = StateMachine.context(); + const isWebviewOpen = VisualizerWebview.currentPanel !== undefined; + const hasActiveTextEditor = !!vscode.window.activeTextEditor; + + const currentBallerinaFile = tryGetCurrentBallerinaFile(); + const projectRoot = await findBallerinaPackageRoot(currentBallerinaFile); + + if (requiresPackageSelection(workspacePath, view, projectPath, isWebviewOpen, hasActiveTextEditor)) { + await openTypeDiagramForWorkspace(projectInfo); + return; + } + + if (needsProjectDiscovery(projectInfo, projectRoot, projectPath)) { + try { + const success = await tryOpenTypeDiagramForDiscoveredProject(); + if (!success) { + vscode.window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + } + } catch { + vscode.window.showErrorMessage(MESSAGES.NO_PROJECT_FOUND); + } + return; + } + + openTypeDiagramView(); +} + +// --- End Type Diagram Command Helpers --- diff --git a/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts b/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts index fd68a216537..ecf6d46eb55 100644 --- a/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts +++ b/workspaces/ballerina/ballerina-extension/src/views/visualizer/webview.ts @@ -64,11 +64,11 @@ export class VisualizerWebview { } // Check the file is changed in the project. - const projectUri = StateMachine.context().projectUri; + const projectPath = StateMachine.context().projectPath; const documentUri = document.document.uri.toString(); - const isDocumentUnderProject = documentUri.includes(projectUri); + const isDocumentUnderProject = documentUri.includes(projectPath); // Reset visualizer the undo-redo stack if user did changes in the editor - if (isOpened && isDocumentUnderProject) { + if (isOpened && isDocumentUnderProject && !this._panel?.active && !undoRedoManager?.isBatchInProgress()) { undoRedoManager.reset(); } @@ -149,13 +149,14 @@ export class VisualizerWebview { // Check if devant.editor extension is active const isDevantEditor = vscode.commands.executeCommand('getContext', 'devant.editor') !== undefined; + const biExtension = vscode.extensions.getExtension('wso2.ballerina-integrator'); const body = `
-

WSO2 Integrator: BI

+

${biExtension ? 'WSO2 Integrator: BI' : 'Ballerina Visualizer'}

Setting up your workspace and tools

Loading @@ -174,16 +175,15 @@ export class VisualizerWebview { .loader-wrapper { display: flex; justify-content: center; - align-items: flex-start; - height: 100%; + align-items: center; + height: 100vh; width: 100%; - padding-top: 30vh; } .loader { - width: 36px; + width: 28px; aspect-ratio: 1; border-radius: 50%; - border: 6px solid var(--vscode-button-background); + border: 5px solid var(--vscode-progressBar-background); animation: l20-1 0.5s infinite linear alternate, l20-2 1s infinite linear; @@ -212,13 +212,12 @@ export class VisualizerWebview { font-family: var(--vscode-font-family); } .logo-container { - margin-bottom: 2rem; display: flex; justify-content: center; } .welcome-title { color: var(--vscode-foreground); - margin: 0 0 0.5rem 0; + margin: 1.5rem 0 0.5rem 0; letter-spacing: -0.02em; font-size: 1.5em; font-weight: 400; @@ -231,7 +230,7 @@ export class VisualizerWebview { opacity: 0.8; } .loading-text { - color: var(--vscode-foreground); + color: var(--vscode-button-background); font-size: 13px; font-weight: 500; } diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/datamapper.test.ts b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/datamapper.test.ts deleted file mode 100644 index 10a6e7a6d44..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/datamapper.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as path from 'path'; -import { generateBallerinaCode } from '../../../src/rpc-managers/ai-panel/utils'; -import * as assert from 'assert'; -import * as fs from 'fs'; - -const RESOURCES_PATH = path.resolve(__dirname, '../../../../test/ai/datamapper/resources'); - -function getTestFolders(dirPath: string): string[] { - return fs.readdirSync(dirPath) - .filter((file) => fs.lstatSync(path.join(dirPath, file)).isDirectory()); -} - -suite("AI Datamapper Tests Suite", () => { - setup(done => { - done(); - }); - - function runTests(basePath: string) { - const testFolders = getTestFolders(basePath); - - testFolders.forEach((folder) => { - const folderPath = path.join(basePath, folder); - - suite(`Group: ${folder}`, () => { - const subFolders = getTestFolders(folderPath); - - if (subFolders.length > 0) { - // Recursively process subdirectories - runTests(folderPath); - } else { - test(`Datamapper Test - ${folder}`, async () => { - const mappingFile = path.join(folderPath, 'mapping.json'); - const paramDefFile = path.join(folderPath, 'param_def.json'); - const expectedFile = path.join(folderPath, 'expected.json'); - - assert.ok(fs.existsSync(mappingFile), `Missing mapping.json in ${folder}`); - assert.ok(fs.existsSync(paramDefFile), `Missing param_def.json in ${folder}`); - assert.ok(fs.existsSync(expectedFile), `Missing expected.json in ${folder}`); - - const mapping = JSON.parse(fs.readFileSync(mappingFile, 'utf8')); - const paramDef = JSON.parse(fs.readFileSync(paramDefFile, 'utf8')); - const expected = JSON.parse(fs.readFileSync(expectedFile, 'utf8')); - const resp = await generateBallerinaCode(mapping, paramDef, "", []); - assert.deepStrictEqual(resp, expected); - }); - } - }); - }); - } - runTests(RESOURCES_PATH); -}); diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/expected.json deleted file mode 100644 index 34520486cfe..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person.id","name":"person.name"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/mapping.json deleted file mode 100644 index b186fe40e00..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/param_def.json deleted file mode 100644 index bf98e66267c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_1/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/expected.json deleted file mode 100644 index 3dad5e12a43..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/mapping.json deleted file mode 100644 index f84fc9352a4..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/param_def.json deleted file mode 100644 index bd31a53f43b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_10/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"address":{"type":"string","comment":""},"phone":{"type":"string","comment":""},"email":{"type":"string","comment":""},"gender":{"type":"string","comment":""}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false},"phone":{"typeName":"string","type":"string","typeInstance":"phone","nullable":false,"optional":false},"email":{"typeName":"string","type":"string","typeInstance":"email","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/expected.json deleted file mode 100644 index 3dad5e12a43..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/mapping.json deleted file mode 100644 index f84fc9352a4..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/param_def.json deleted file mode 100644 index 4823c5a4e2d..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_11/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseName":{"type":"string","comment":""},"currentYear":{"type":"int","comment":""},"advisorName":{"type":"string","comment":""},"departmentName":{"type":"string","comment":""},"gpaScore":{"type":"float","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false},"currentYear":{"typeName":"int","type":"int","typeInstance":"currentYear","nullable":false,"optional":false},"advisorName":{"typeName":"string","type":"string","typeInstance":"advisorName","nullable":false,"optional":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false},"gpaScore":{"typeName":"float","type":"float","typeInstance":"gpaScore","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/expected.json deleted file mode 100644 index 7e600dd7b51..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName","currentYear":"person.age"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/mapping.json deleted file mode 100644 index 9c04289cbbc..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]},"currentYear":{"operation":"DIRECT","targetType":"int","parameters":["person.age"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/param_def.json deleted file mode 100644 index 81eb5d02410..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_12/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"address":{"type":"string","comment":""},"phone":{"type":"string","comment":""},"email":{"type":"string","comment":""},"gender":{"type":"string","comment":""}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseName":{"type":"string","comment":""},"currentYear":{"type":"int","comment":""},"advisorName":{"type":"string","comment":""},"departmentName":{"type":"string","comment":""},"gpaScore":{"type":"float","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false},"phone":{"typeName":"string","type":"string","typeInstance":"phone","nullable":false,"optional":false},"email":{"typeName":"string","type":"string","typeInstance":"email","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false},"currentYear":{"typeName":"int","type":"int","typeInstance":"currentYear","nullable":false,"optional":false},"advisorName":{"typeName":"string","type":"string","typeInstance":"advisorName","nullable":false,"optional":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false},"gpaScore":{"typeName":"float","type":"float","typeInstance":"gpaScore","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/expected.json deleted file mode 100644 index 2edee4421ff..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName","course":"{\n courseTitle: person.courseName \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/mapping.json deleted file mode 100644 index faa89ada9dd..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]},"course":{"courseTitle":{"operation":"DIRECT","targetType":"string","parameters":["person.courseName"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/param_def.json deleted file mode 100644 index 76135b63048..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_13/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"courseTitle":{"type":"string","comment":""},"courseCredits":{"type":"int","comment":""}}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseTitle":{"typeName":"string","type":"string","typeInstance":"courseTitle","nullable":false,"optional":false},"courseCredits":{"typeName":"int","type":"int","typeInstance":"courseCredits","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/expected.json deleted file mode 100644 index c5f544e61b7..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName","courseName":"person.course.courseTitle"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/mapping.json deleted file mode 100644 index d467f76607e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]},"courseName":{"operation":"DIRECT","targetType":"string","parameters":["person.course.courseTitle"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/param_def.json deleted file mode 100644 index f656815b383..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_14/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""},"course":{"courseCredits":{"type":"int","comment":""},"courseTitle":{"type":"string","comment":""}}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseCredits":{"typeName":"int","type":"int","typeInstance":"courseCredits","nullable":false,"optional":false},"courseTitle":{"typeName":"string","type":"string","typeInstance":"courseTitle","nullable":false,"optional":false}}}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/expected.json deleted file mode 100644 index 246589af3de..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName","courseDetails":"{\n courseCode: person.course.courseCode,\ncourseTitle: person.course.courseTitle \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/mapping.json deleted file mode 100644 index 47118eb7fcb..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]},"courseDetails":{"courseCode":{"operation":"DIRECT","targetType":"string","parameters":["person.course.courseCode"]},"courseTitle":{"operation":"DIRECT","targetType":"string","parameters":["person.course.courseTitle"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/param_def.json deleted file mode 100644 index e9a52e1cdfb..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_15/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""},"course":{"courseCode":{"type":"string","comment":""},"courseTitle":{"type":"string","comment":""}}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseDetails":{"courseCode":{"type":"string","comment":""},"courseTitle":{"type":"string","comment":""}}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseCode":{"typeName":"string","type":"string","typeInstance":"courseCode","nullable":false,"optional":false},"courseTitle":{"typeName":"string","type":"string","typeInstance":"courseTitle","nullable":false,"optional":false}}}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"courseDetails","typeName":"record","fields":{"courseCode":{"typeName":"string","type":"string","typeInstance":"courseCode","nullable":false,"optional":false},"courseTitle":{"typeName":"string","type":"string","typeInstance":"courseTitle","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/expected.json deleted file mode 100644 index 6a6e35c6dcf..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName","credits":"course.courseCredits","courseName":"course.courseTitle"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/mapping.json deleted file mode 100644 index 46475facca6..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]},"credits":{"operation":"DIRECT","targetType":"int","parameters":["course.courseCredits"]},"courseName":{"operation":"DIRECT","targetType":"string","parameters":["course.courseTitle"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/param_def.json deleted file mode 100644 index e227e2388e8..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_16/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""}},"course":{"courseCredits":{"type":"int","comment":""},"courseTitle":{"type":"string","comment":""}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""},"credits":{"type":"int","comment":""},"courseName":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false}}},"course":{"isArrayType":false,"parameterName":"course","parameterType":"CourseDetails","type":"record","fields":{"courseCredits":{"typeName":"int","type":"int","typeInstance":"courseCredits","nullable":false,"optional":false},"courseTitle":{"typeName":"string","type":"string","typeInstance":"courseTitle","nullable":false,"optional":false}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"credits":{"typeName":"int","type":"int","typeInstance":"credits","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/expected.json deleted file mode 100644 index aa78cdeca38..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"(person.id).toString()","name":"person.name"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/mapping.json deleted file mode 100644 index b186fe40e00..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/param_def.json deleted file mode 100644 index 506175e0b12..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_17/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"int","comment":""},"name":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/expected.json deleted file mode 100644 index 1109b26ab3e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"age":"check (person.age).ensureType()","salary":"check (person.salary).ensureType()","isActive":"(person.isActive).toString()"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/mapping.json deleted file mode 100644 index 1e49984e5f5..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"age":{"operation":"DIRECT","targetType":"int","parameters":["person.age"]},"salary":{"operation":"DIRECT","targetType":"float","parameters":["person.salary"]},"isActive":{"operation":"DIRECT","targetType":"string","parameters":["person.isActive"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/param_def.json deleted file mode 100644 index 7d4c3a1abd1..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_18/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"int","comment":""},"name":{"type":"string","comment":""},"age":{"type":"float","comment":""},"isActive":{"type":"boolean","comment":""},"salary":{"type":"decimal","comment":""},"email":{"type":"string","comment":""},"phone":{"type":"string","comment":""}}},"output":{"age":{"type":"int","comment":""},"salary":{"type":"float","comment":""},"isActive":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"age":{"typeName":"float","type":"float","typeInstance":"age","nullable":false,"optional":false},"isActive":{"typeName":"boolean","type":"boolean","typeInstance":"isActive","nullable":false,"optional":false},"salary":{"typeName":"decimal","type":"decimal","typeInstance":"salary","nullable":false,"optional":false},"email":{"typeName":"string","type":"string","typeInstance":"email","nullable":false,"optional":false},"phone":{"typeName":"string","type":"string","typeInstance":"phone","nullable":false,"optional":false}}}},"outputMetadata":{"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"salary":{"typeName":"float","type":"float","typeInstance":"salary","nullable":false,"optional":false},"isActive":{"typeName":"string","type":"string","typeInstance":"isActive","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/expected.json deleted file mode 100644 index 6c8630f80ee..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"check int:fromString(person.id)","age":"check (person.age).ensureType()","grade":"check (person.grade).ensureType()"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/mapping.json deleted file mode 100644 index 00dcce94ee2..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["person.id"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["person.age"]},"grade":{"operation":"DIRECT","targetType":"float","parameters":["person.grade"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/param_def.json deleted file mode 100644 index 5d01adfd2f9..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_19/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"age":{"type":"float","comment":""},"grade":{"type":"decimal","comment":""}}},"output":{"id":{"type":"int","comment":""},"name":{"type":"string","comment":""},"age":{"type":"int","comment":""},"isActive":{"type":"boolean","comment":""},"grade":{"type":"float","comment":""},"tuition":{"type":"decimal","comment":""},"phoneNumber":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"age":{"typeName":"float","type":"float","typeInstance":"age","nullable":false,"optional":false},"grade":{"typeName":"decimal","type":"decimal","typeInstance":"grade","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"isActive":{"typeName":"boolean","type":"boolean","typeInstance":"isActive","nullable":false,"optional":false},"grade":{"typeName":"float","type":"float","typeInstance":"grade","nullable":false,"optional":false},"tuition":{"typeName":"decimal","type":"decimal","typeInstance":"tuition","nullable":false,"optional":false},"phoneNumber":{"typeName":"string","type":"string","typeInstance":"phoneNumber","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/expected.json deleted file mode 100644 index 34520486cfe..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person.id","name":"person.name"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/mapping.json deleted file mode 100644 index b186fe40e00..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/param_def.json deleted file mode 100644 index 0b2a5785c5e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_2/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"age":{"type":"int","comment":""},"address":{"type":"string","comment":""},"phone":{"type":"string","comment":""},"email":{"type":"string","comment":""},"gender":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false},"phone":{"typeName":"string","type":"string","typeInstance":"phone","nullable":false,"optional":false},"email":{"typeName":"string","type":"string","typeInstance":"email","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/expected.json deleted file mode 100644 index 8f80730793b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"check int:fromString(person.id)","name":"person.name","age":"check (person.age).ensureType()","isActive":"(person.isActive).toString()","phoneNumber":"person.phone"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/mapping.json deleted file mode 100644 index 38abc98967d..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]},"age":{"operation":"DIRECT","targetType":"float","parameters":["person.age"]},"isActive":{"operation":"DIRECT","targetType":"string","parameters":["person.isActive"]},"phoneNumber":{"operation":"DIRECT","targetType":"string","parameters":["person.phone"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/param_def.json deleted file mode 100644 index a6067571336..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_20/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"age":{"type":"int","comment":""},"isActive":{"type":"boolean","comment":""},"salary":{"type":"decimal","comment":""},"email":{"type":"string","comment":""},"phone":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"name":{"type":"string","comment":""},"age":{"type":"float","comment":""},"isActive":{"type":"string","comment":""},"grade":{"type":"float","comment":""},"tuition":{"type":"decimal","comment":""},"phoneNumber":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"isActive":{"typeName":"boolean","type":"boolean","typeInstance":"isActive","nullable":false,"optional":false},"salary":{"typeName":"decimal","type":"decimal","typeInstance":"salary","nullable":false,"optional":false},"email":{"typeName":"string","type":"string","typeInstance":"email","nullable":false,"optional":false},"phone":{"typeName":"string","type":"string","typeInstance":"phone","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"age":{"typeName":"float","type":"float","typeInstance":"age","nullable":false,"optional":false},"isActive":{"typeName":"string","type":"string","typeInstance":"isActive","nullable":false,"optional":false},"grade":{"typeName":"float","type":"float","typeInstance":"grade","nullable":false,"optional":false},"tuition":{"typeName":"decimal","type":"decimal","typeInstance":"tuition","nullable":false,"optional":false},"phoneNumber":{"typeName":"string","type":"string","typeInstance":"phoneNumber","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/expected.json deleted file mode 100644 index 66a86acea4c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"(person.id).toString()","name":"person.name","course":"{\n courseId: check (person.courseId).ensureType(),\ntitle: (person.courseId).toString() \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/mapping.json deleted file mode 100644 index de5724bfb10..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]},"course":{"courseId":{"operation":"DIRECT","targetType":"decimal","parameters":["person.courseId"]},"title":{"operation":"DIRECT","targetType":"string","parameters":["person.courseId"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/param_def.json deleted file mode 100644 index 6f1748f3ae2..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_21/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"int","comment":""},"name":{"type":"string","comment":""},"courseId":{"type":"int","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"courseId":{"type":"decimal","comment":""},"title":{"type":"string","comment":""}}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseId":{"typeName":"int","type":"int","typeInstance":"courseId","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseId":{"typeName":"decimal","type":"decimal","typeInstance":"courseId","nullable":false,"optional":false},"title":{"typeName":"string","type":"string","typeInstance":"title","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/expected.json deleted file mode 100644 index 065d407c731..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"(person.id).toString()","age":"check (person.age).ensureType()","courseCredits":"check float:fromString(person.course.courseCredits)"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/mapping.json deleted file mode 100644 index abf38b42ee0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["person.age"]},"courseCredits":{"operation":"DIRECT","targetType":"float","parameters":["person.course.courseCredits"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/param_def.json deleted file mode 100644 index 38f1f03de2b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_22/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"int","comment":""},"age":{"type":"float","comment":""},"course":{"id":{"type":"int","comment":""},"courseCredits":{"type":"string","comment":""}}}},"output":{"id":{"type":"string","comment":""},"age":{"type":"int","comment":""},"courseCredits":{"type":"float","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"age":{"typeName":"float","type":"float","typeInstance":"age","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"courseCredits":{"typeName":"string","type":"string","typeInstance":"courseCredits","nullable":false,"optional":false}}}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"courseCredits":{"typeName":"float","type":"float","typeInstance":"courseCredits","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/expected.json deleted file mode 100644 index 65cf6f38f4c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"(person.id).toString()","age":"check int:fromString(person.age)","name":"person.name","course":"{\n id: person.course.id,\ntitle: person.course.title \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/mapping.json deleted file mode 100644 index e5102f8e836..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["person.age"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]},"course":{"id":{"operation":"DIRECT","targetType":"int","parameters":["person.course.id"]},"title":{"operation":"DIRECT","targetType":"string","parameters":["person.course.title"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/param_def.json deleted file mode 100644 index 7aed558ec2d..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_23/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"int","comment":""},"age":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"id":{"type":"int","comment":""},"title":{"type":"string","comment":""}}}},"output":{"id":{"type":"string","comment":""},"age":{"type":"int","comment":""},"name":{"type":"string","comment":""},"course":{"id":{"type":"int","comment":""},"title":{"type":"string","comment":""}}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"age":{"typeName":"string","type":"string","typeInstance":"age","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"title":{"typeName":"string","type":"string","typeInstance":"title","nullable":false,"optional":false}}}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"title":{"typeName":"string","type":"string","typeInstance":"title","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/expected.json deleted file mode 100644 index 89a062492be..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"(person.id).toString()","name":"check int:fromString(person.age)","courseId":"(course.id).toString()","courseTitle":"course.title"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/mapping.json deleted file mode 100644 index 1f586c2b06c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"int","parameters":["person.age"]},"courseId":{"operation":"DIRECT","targetType":"string","parameters":["course.id"]},"courseTitle":{"operation":"DIRECT","targetType":"string","parameters":["course.title"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/param_def.json deleted file mode 100644 index a4dd71cc6ba..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_24/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"int","comment":""},"age":{"type":"string","comment":""}},"course":{"id":{"type":"float","comment":""},"title":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"int","comment":""},"courseId":{"type":"string","comment":""},"courseTitle":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"age":{"typeName":"string","type":"string","typeInstance":"age","nullable":false,"optional":false}}},"course":{"isArrayType":false,"parameterName":"course","parameterType":"Course","type":"record","fields":{"id":{"typeName":"float","type":"float","typeInstance":"id","nullable":false,"optional":false},"title":{"typeName":"string","type":"string","typeInstance":"title","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"int","type":"int","typeInstance":"name","nullable":false,"optional":false},"courseId":{"typeName":"string","type":"string","typeInstance":"courseId","nullable":false,"optional":false},"courseTitle":{"typeName":"string","type":"string","typeInstance":"courseTitle","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/expected.json deleted file mode 100644 index 4caf87a1745..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"(person.id).toString()","firstName":"person.firstName","age":"check int:fromString(person.age)","weight":"check float:fromString(person.weight)","totalCredits":"check (person.totalCredits).ensureType()","isRegistered":"(person.isRegistered).toString()","course":"{\n id: (person.courseId).toString(),\nname: person.courseName \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/mapping.json deleted file mode 100644 index e701043993c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["person.firstName"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["person.age"]},"weight":{"operation":"DIRECT","targetType":"float","parameters":["person.weight"]},"totalCredits":{"operation":"DIRECT","targetType":"float","parameters":["person.totalCredits"]},"isRegistered":{"operation":"DIRECT","targetType":"string","parameters":["person.isRegistered"]},"course":{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.courseId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.courseName"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/param_def.json deleted file mode 100644 index 5a6584e1551..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_25/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"int","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string","comment":""},"age":{"type":"string","comment":""},"country":{"type":"string","comment":""},"visaType":{"type":"string","comment":""},"totalCredits":{"type":"int","comment":""},"isRegistered":{"type":"boolean","comment":""},"courseId":{"type":"int","comment":""},"courseName":{"type":"string","comment":""},"weight":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"weight":{"type":"float","comment":""},"totalCredits":{"type":"float","comment":""},"salary":{"type":"decimal","comment":""},"isRegistered":{"type":"string","comment":""},"course":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""}}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"typeName":"string","type":"string","typeInstance":"lastName","nullable":false,"optional":false},"age":{"typeName":"string","type":"string","typeInstance":"age","nullable":false,"optional":false},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"visaType":{"typeName":"string","type":"string","typeInstance":"visaType","nullable":false,"optional":false},"totalCredits":{"typeName":"int","type":"int","typeInstance":"totalCredits","nullable":false,"optional":false},"isRegistered":{"typeName":"boolean","type":"boolean","typeInstance":"isRegistered","nullable":false,"optional":false},"courseId":{"typeName":"int","type":"int","typeInstance":"courseId","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false},"weight":{"typeName":"string","type":"string","typeInstance":"weight","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"weight":{"typeName":"float","type":"float","typeInstance":"weight","nullable":false,"optional":false},"totalCredits":{"typeName":"float","type":"float","typeInstance":"totalCredits","nullable":false,"optional":false},"salary":{"typeName":"decimal","type":"decimal","typeInstance":"salary","nullable":false,"optional":false},"isRegistered":{"typeName":"string","type":"string","typeInstance":"isRegistered","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/expected.json deleted file mode 100644 index 34520486cfe..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person.id","name":"person.name"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/mapping.json deleted file mode 100644 index b186fe40e00..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/param_def.json deleted file mode 100644 index 5edc9322f62..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_3/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"type":"string","comment":""},"year":{"type":"int","comment":""},"advisor":{"type":"string","comment":""},"department":{"type":"string","comment":""},"gpa":{"type":"float","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"typeName":"string","type":"string","typeInstance":"course","nullable":false,"optional":false},"year":{"typeName":"int","type":"int","typeInstance":"year","nullable":false,"optional":false},"advisor":{"typeName":"string","type":"string","typeInstance":"advisor","nullable":false,"optional":false},"department":{"typeName":"string","type":"string","typeInstance":"department","nullable":false,"optional":false},"gpa":{"typeName":"float","type":"float","typeInstance":"gpa","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/expected.json deleted file mode 100644 index 34520486cfe..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person.id","name":"person.name"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/mapping.json deleted file mode 100644 index b186fe40e00..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/param_def.json deleted file mode 100644 index 5edc9322f62..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_4/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"type":"string","comment":""},"year":{"type":"int","comment":""},"advisor":{"type":"string","comment":""},"department":{"type":"string","comment":""},"gpa":{"type":"float","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"typeName":"string","type":"string","typeInstance":"course","nullable":false,"optional":false},"year":{"typeName":"int","type":"int","typeInstance":"year","nullable":false,"optional":false},"advisor":{"typeName":"string","type":"string","typeInstance":"advisor","nullable":false,"optional":false},"department":{"typeName":"string","type":"string","typeInstance":"department","nullable":false,"optional":false},"gpa":{"typeName":"float","type":"float","typeInstance":"gpa","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/expected.json deleted file mode 100644 index 5070c5cc52a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/expected.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": "person.id", - "name": "person.name", - "course": "{\n courseId: person.courseId \n}" -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/mapping.json deleted file mode 100644 index 7fccf9f8d37..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]},"course":{"courseId":{"operation":"DIRECT","targetType":"string","parameters":["person.courseId"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/param_def.json deleted file mode 100644 index 6571aaa52bd..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_5/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseId":{"type":"string","comment":""}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"courseId":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseId":{"typeName":"string","type":"string","typeInstance":"courseId","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseId":{"typeName":"string","type":"string","typeInstance":"courseId","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/expected.json deleted file mode 100644 index b63f397582b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person.id","name":"person.name","courseName":"person.course.courseName"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/mapping.json deleted file mode 100644 index 3406f226f6a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]},"courseName":{"operation":"DIRECT","targetType":"string","parameters":["person.course.courseName"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/param_def.json deleted file mode 100644 index 9340319d678..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_6/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"courseId":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseId":{"typeName":"string","type":"string","typeInstance":"courseId","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/expected.json deleted file mode 100644 index b63f397582b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person.id","name":"person.name","courseName":"person.course.courseName"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/mapping.json deleted file mode 100644 index 3406f226f6a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]},"courseName":{"operation":"DIRECT","targetType":"string","parameters":["person.course.courseName"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/param_def.json deleted file mode 100644 index 9340319d678..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_7/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"courseId":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseId":{"typeName":"string","type":"string","typeInstance":"courseId","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/expected.json deleted file mode 100644 index b63f397582b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person.id","name":"person.name","courseName":"person.course.courseName"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/mapping.json deleted file mode 100644 index 3406f226f6a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string","parameters":["person.id"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.name"]},"courseName":{"operation":"DIRECT","targetType":"string","parameters":["person.course.courseName"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/param_def.json deleted file mode 100644 index 9340319d678..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_8/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"course":{"courseId":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}}}},"output":{"id":{"type":"string","comment":""},"name":{"type":"string","comment":""},"courseName":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"course":{"nullable":false,"optional":false,"type":"record","typeInstance":"course","typeName":"record","fields":{"courseId":{"typeName":"string","type":"string","typeInstance":"courseId","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}}}}},"outputMetadata":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"courseName":{"typeName":"string","type":"string","typeInstance":"courseName","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/expected.json deleted file mode 100644 index 3dad5e12a43..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":"person.personId","name":"person.fullName"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/mapping.json deleted file mode 100644 index f84fc9352a4..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"studentId":{"operation":"DIRECT","targetType":"string","parameters":["person.personId"]},"name":{"operation":"DIRECT","targetType":"string","parameters":["person.fullName"]}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/param_def.json deleted file mode 100644 index c6bb3c3267c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/direct_operation/primitive/case_9/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"personId":{"type":"string","comment":""},"fullName":{"type":"string","comment":""}}},"output":{"studentId":{"type":"string","comment":""},"name":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"personId":{"typeName":"string","type":"string","typeInstance":"personId","nullable":false,"optional":false},"fullName":{"typeName":"string","type":"string","typeInstance":"fullName","nullable":false,"optional":false}}}},"outputMetadata":{"studentId":{"typeName":"string","type":"string","typeInstance":"studentId","nullable":false,"optional":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/expected.json deleted file mode 100644 index cace6ce847a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/param_def.json deleted file mode 100644 index ec1c7cf554e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_1/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"typeName":"int","type":"int","typeInstance":"numberOfRoomates","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/expected.json deleted file mode 100644 index cace6ce847a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/param_def.json deleted file mode 100644 index 78987006e67..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_2/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"typeName":"int","type":"int","typeInstance":"numberOfRoomates","nullable":true,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/expected.json deleted file mode 100644 index cace6ce847a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/param_def.json deleted file mode 100644 index 90aed10773f..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_3/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"typeName":"int","type":"int","typeInstance":"numberOfRoomates","nullable":true,"optional":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/expected.json deleted file mode 100644 index de8208c0b37..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates?:[]).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/param_def.json deleted file mode 100644 index 9a223df332d..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_4/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"typeName":"int","type":"int","typeInstance":"numberOfRoomates","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/expected.json deleted file mode 100644 index de8208c0b37..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates?:[]).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/param_def.json deleted file mode 100644 index b2af9266230..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_5/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"Student[]|()","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"optional":false,"typeName":"Student[]|()","type":"union[]|()","typeInstance":"roommates","nullableArray":false,"nullable":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"typeName":"int","type":"int","typeInstance":"numberOfRoomates","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/expected.json deleted file mode 100644 index de8208c0b37..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates?:[]).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/param_def.json deleted file mode 100644 index fca0a743172..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_6/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"typeName":"int","type":"int","typeInstance":"numberOfRoomates","nullable":false,"optional":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/expected.json deleted file mode 100644 index de8208c0b37..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates?:[]).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/mapping.json deleted file mode 100644 index 7ff5a647111..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int|()","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/param_def.json deleted file mode 100644 index cf6d1bd799f..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_7/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int|()","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"numberOfRoomates","nullable":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/expected.json deleted file mode 100644 index de8208c0b37..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates?:[]).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/param_def.json deleted file mode 100644 index e8a8ffe29a2..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_8/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int|()","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"numberOfRoomates","nullable":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/expected.json deleted file mode 100644 index cace6ce847a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName,\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor,\nsemesterGPA: student.semesterGPA \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/mapping.json deleted file mode 100644 index ac1d601fdb0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/param_def.json deleted file mode 100644 index d06ed626089..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/length_operation/case_9/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"record[]","comment":""},"address":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"typeName":"string","type":"string","typeInstance":"studentName","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":false},"roommates":{"typeName":"record[]","type":"record[]","typeInstance":"roommates","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"nullable":false,"optional":false,"type":"record","typeInstance":"bio","typeName":"record","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"typeName":"string","type":"string","typeInstance":"gender","nullable":false,"optional":false},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":false}}},"academicRecord":{"nullable":false,"optional":false,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"typeName":"string[]","type":"string[]","typeInstance":"semesterGPA","nullable":false,"optional":false}}},"accommodationDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"accommodationDetails","typeName":"record","fields":{"numberOfRoomates":{"typeName":"int","type":"int","typeInstance":"numberOfRoomates","nullable":false,"optional":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/expected.json deleted file mode 100644 index c1047564969..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"postItem.id","description":"postItem.description","author":"author","meta":"{\n tags: re `,`.split(postItem.tags),\ncategory: postItem.category,\ncreatedTimeStamp: {\n utcOffset: {\n hours: postItem.createdTimeStamp.utcOffset?.hours?:0,\nminutes: postItem.createdTimeStamp.utcOffset?.minutes?:0,\nseconds: postItem.createdTimeStamp.utcOffset?.seconds \n},\ntimeAbbrev: postItem.createdTimeStamp.timeAbbrev,\nwhich: postItem.createdTimeStamp.which,\ndayOfWeek: postItem.createdTimeStamp.dayOfWeek,\nyear: postItem.createdTimeStamp.year,\nmonth: postItem.createdTimeStamp.month,\nday: postItem.createdTimeStamp.day,\nhour: postItem.createdTimeStamp.hour,\nminute: postItem.createdTimeStamp.minute,\nsecond: postItem.createdTimeStamp.second \n} \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/mapping.json deleted file mode 100644 index 88a9f3cf588..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["postItem.id"]},"description":{"operation":"DIRECT","targetType":"string","parameters":["postItem.description"]},"author":{"operation":"DIRECT","targetType":"string","parameters":["author.author"]},"meta":{"tags":{"operation":"SPLIT","targetType":"string[]","parameters":["postItem.tags",","]},"category":{"operation":"DIRECT","targetType":"string","parameters":["postItem.category"]},"createdTimeStamp":{"utcOffset":{"hours":{"operation":"DIRECT","targetType":"int","parameters":["postItem.createdTimeStamp.utcOffset.hours"]},"minutes":{"operation":"DIRECT","targetType":"int","parameters":["postItem.createdTimeStamp.utcOffset.minutes"]},"seconds":{"operation":"DIRECT","targetType":"decimal","parameters":["postItem.createdTimeStamp.utcOffset.seconds"]}},"timeAbbrev":{"operation":"DIRECT","targetType":"string","parameters":["postItem.createdTimeStamp.timeAbbrev"]},"which":{"operation":"DIRECT","targetType":"0|1","parameters":["postItem.createdTimeStamp.which"]},"dayOfWeek":{"operation":"DIRECT","targetType":"0|1|2|3|4|5|6","parameters":["postItem.createdTimeStamp.dayOfWeek"]},"year":{"operation":"DIRECT","targetType":"int","parameters":["postItem.createdTimeStamp.year"]},"month":{"operation":"DIRECT","targetType":"int","parameters":["postItem.createdTimeStamp.month"]},"day":{"operation":"DIRECT","targetType":"int","parameters":["postItem.createdTimeStamp.day"]},"hour":{"operation":"DIRECT","targetType":"int","parameters":["postItem.createdTimeStamp.hour"]},"minute":{"operation":"DIRECT","targetType":"int","parameters":["postItem.createdTimeStamp.minute"]},"second":{"operation":"DIRECT","targetType":"decimal","parameters":["postItem.createdTimeStamp.second"]}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/param_def.json deleted file mode 100644 index dd62ceac8cd..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_array_input_output/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"postItem":{"id":{"type":"int","comment":""},"description":{"type":"string","comment":""},"tags":{"type":"string","comment":""},"category":{"type":"string","comment":""},"createdTimeStamp":{"utcOffset":{"hours":{"type":"int","comment":""},"minutes":{"type":"int","comment":""},"seconds":{"type":"decimal","comment":""}},"timeAbbrev":{"type":"string","comment":""},"which":{"type":"0|1","comment":""},"dayOfWeek":{"type":"0|1|2|3|4|5|6","comment":""},"year":{"type":"int","comment":""},"month":{"type":"int","comment":""},"day":{"type":"int","comment":""},"hour":{"type":"int","comment":""},"minute":{"type":"int","comment":""},"second":{"type":"decimal","comment":""}}},"author":{"author":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"description":{"type":"string","comment":""},"author":{"type":"string","comment":""},"meta":{"tags":{"type":"string[]","comment":""},"category":{"type":"string","comment":""},"createdTimeStamp":{"utcOffset":{"hours":{"type":"int","comment":""},"minutes":{"type":"int","comment":""},"seconds":{"type":"decimal","comment":""}},"timeAbbrev":{"type":"string","comment":""},"which":{"type":"0|1","comment":""},"dayOfWeek":{"type":"0|1|2|3|4|5|6","comment":""},"year":{"type":"int","comment":""},"month":{"type":"int","comment":""},"day":{"type":"int","comment":""},"hour":{"type":"int","comment":""},"minute":{"type":"int","comment":""},"second":{"type":"decimal","comment":""}}}},"inputMetadata":{"postItem":{"isArrayType":true,"parameterName":"postItem","parameterType":"Post[] ","type":"record[]","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"description":{"typeName":"string","type":"string","typeInstance":"description","nullable":false,"optional":false},"tags":{"typeName":"string","type":"string","typeInstance":"tags","nullable":false,"optional":false},"category":{"typeName":"string","type":"string","typeInstance":"category","nullable":false,"optional":false},"createdTimeStamp":{"nullable":false,"optional":false,"type":"record","typeInstance":"createdTimeStamp","typeName":"record","fields":{"utcOffset":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"utcOffset","members":{"hours":{"typeName":"int","type":"int","typeInstance":"hours","nullable":false,"optional":false},"minutes":{"typeName":"int","type":"int","typeInstance":"minutes","nullable":false,"optional":false},"seconds":{"typeName":"decimal","type":"decimal","typeInstance":"seconds","nullable":false,"optional":true}},"nullable":false},"timeAbbrev":{"typeName":"string","type":"string","typeInstance":"timeAbbrev","nullable":false,"optional":true},"which":{"optional":true,"typeName":"0|1","type":"union","typeInstance":"which","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false}},"nullable":false},"dayOfWeek":{"optional":true,"typeName":"0|1|2|3|4|5|6","type":"union","typeInstance":"dayOfWeek","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false},"2":{"typeName":"2","type":"2","typeInstance":"2","nullable":false,"optional":false},"3":{"typeName":"3","type":"3","typeInstance":"3","nullable":false,"optional":false},"4":{"typeName":"4","type":"4","typeInstance":"4","nullable":false,"optional":false},"5":{"typeName":"5","type":"5","typeInstance":"5","nullable":false,"optional":false},"6":{"typeName":"6","type":"6","typeInstance":"6","nullable":false,"optional":false}},"nullable":false},"year":{"typeName":"int","type":"int","typeInstance":"year","nullable":false,"optional":false},"month":{"typeName":"int","type":"int","typeInstance":"month","nullable":false,"optional":false},"day":{"typeName":"int","type":"int","typeInstance":"day","nullable":false,"optional":false},"hour":{"typeName":"int","type":"int","typeInstance":"hour","nullable":false,"optional":false},"minute":{"typeName":"int","type":"int","typeInstance":"minute","nullable":false,"optional":false},"second":{"typeName":"decimal","type":"decimal","typeInstance":"second","nullable":false,"optional":true}}}}},"author":{"isArrayType":false,"parameterName":"author","parameterType":"string ","type":"record","fields":{"author":{"typeName":"string","type":"string","typeInstance":"author","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"description":{"typeName":"string","type":"string","typeInstance":"description","nullable":false,"optional":false},"author":{"typeName":"string","type":"string","typeInstance":"author","nullable":false,"optional":false},"meta":{"nullable":false,"optional":false,"type":"record","typeInstance":"meta","typeName":"record","fields":{"tags":{"typeName":"string[]","type":"string[]","typeInstance":"tags","nullable":false,"optional":false},"category":{"typeName":"string","type":"string","typeInstance":"category","nullable":false,"optional":false},"createdTimeStamp":{"nullable":false,"optional":false,"type":"record","typeInstance":"createdTimeStamp","typeName":"record","fields":{"utcOffset":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"utcOffset","members":{"hours":{"typeName":"int","type":"int","typeInstance":"hours","nullable":false,"optional":false},"minutes":{"typeName":"int","type":"int","typeInstance":"minutes","nullable":false,"optional":false},"seconds":{"typeName":"decimal","type":"decimal","typeInstance":"seconds","nullable":false,"optional":true}},"nullable":false},"timeAbbrev":{"typeName":"string","type":"string","typeInstance":"timeAbbrev","nullable":false,"optional":true},"which":{"optional":true,"typeName":"0|1","type":"union","typeInstance":"which","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false}},"nullable":false},"dayOfWeek":{"optional":true,"typeName":"0|1|2|3|4|5|6","type":"union","typeInstance":"dayOfWeek","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false},"2":{"typeName":"2","type":"2","typeInstance":"2","nullable":false,"optional":false},"3":{"typeName":"3","type":"3","typeInstance":"3","nullable":false,"optional":false},"4":{"typeName":"4","type":"4","typeInstance":"4","nullable":false,"optional":false},"5":{"typeName":"5","type":"5","typeInstance":"5","nullable":false,"optional":false},"6":{"typeName":"6","type":"6","typeInstance":"6","nullable":false,"optional":false}},"nullable":false},"year":{"typeName":"int","type":"int","typeInstance":"year","nullable":false,"optional":false},"month":{"typeName":"int","type":"int","typeInstance":"month","nullable":false,"optional":false},"day":{"typeName":"int","type":"int","typeInstance":"day","nullable":false,"optional":false},"hour":{"typeName":"int","type":"int","typeInstance":"hour","nullable":false,"optional":false},"minute":{"typeName":"int","type":"int","typeInstance":"minute","nullable":false,"optional":false},"second":{"typeName":"decimal","type":"decimal","typeInstance":"second","nullable":false,"optional":true}}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/expected.json deleted file mode 100644 index 4128541717b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"post.id","description":"post.description","author":"author","meta":"{\n tags: re `,`.split(post.tags),\ncategory: post.category,\ncreatedTimeStamp: {\n utcOffset: {\n hours: post.createdTimeStamp.utcOffset?.hours?:0,\nminutes: post.createdTimeStamp.utcOffset?.minutes?:0,\nseconds: post.createdTimeStamp.utcOffset?.seconds \n},\ntimeAbbrev: post.createdTimeStamp.timeAbbrev,\nwhich: post.createdTimeStamp.which,\ndayOfWeek: post.createdTimeStamp.dayOfWeek,\nyear: post.createdTimeStamp.year,\nmonth: post.createdTimeStamp.month,\nday: post.createdTimeStamp.day,\nhour: post.createdTimeStamp.hour,\nminute: post.createdTimeStamp.minute,\nsecond: post.createdTimeStamp.second \n} \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/mapping.json deleted file mode 100644 index 7b383c2dc72..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["post.id"]},"description":{"operation":"DIRECT","targetType":"string","parameters":["post.description"]},"author":{"operation":"DIRECT","targetType":"string","parameters":["author.author"]},"meta":{"tags":{"operation":"SPLIT","targetType":"string[]","parameters":["post.tags",","]},"category":{"operation":"DIRECT","targetType":"string","parameters":["post.category"]},"createdTimeStamp":{"utcOffset":{"hours":{"operation":"DIRECT","targetType":"int","parameters":["post.createdTimeStamp.utcOffset.hours"]},"minutes":{"operation":"DIRECT","targetType":"int","parameters":["post.createdTimeStamp.utcOffset.minutes"]},"seconds":{"operation":"DIRECT","targetType":"decimal","parameters":["post.createdTimeStamp.utcOffset.seconds"]}},"timeAbbrev":{"operation":"DIRECT","targetType":"string","parameters":["post.createdTimeStamp.timeAbbrev"]},"which":{"operation":"DIRECT","targetType":"0|1","parameters":["post.createdTimeStamp.which"]},"dayOfWeek":{"operation":"DIRECT","targetType":"0|1|2|3|4|5|6","parameters":["post.createdTimeStamp.dayOfWeek"]},"year":{"operation":"DIRECT","targetType":"int","parameters":["post.createdTimeStamp.year"]},"month":{"operation":"DIRECT","targetType":"int","parameters":["post.createdTimeStamp.month"]},"day":{"operation":"DIRECT","targetType":"int","parameters":["post.createdTimeStamp.day"]},"hour":{"operation":"DIRECT","targetType":"int","parameters":["post.createdTimeStamp.hour"]},"minute":{"operation":"DIRECT","targetType":"int","parameters":["post.createdTimeStamp.minute"]},"second":{"operation":"DIRECT","targetType":"decimal","parameters":["post.createdTimeStamp.second"]}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/param_def.json deleted file mode 100644 index 4064beab46a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Basic/split_operation/record_input_output/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"post":{"id":{"type":"int","comment":""},"description":{"type":"string","comment":""},"tags":{"type":"string","comment":""},"category":{"type":"string","comment":""},"createdTimeStamp":{"utcOffset":{"hours":{"type":"int","comment":""},"minutes":{"type":"int","comment":""},"seconds":{"type":"decimal","comment":""}},"timeAbbrev":{"type":"string","comment":""},"which":{"type":"0|1","comment":""},"dayOfWeek":{"type":"0|1|2|3|4|5|6","comment":""},"year":{"type":"int","comment":""},"month":{"type":"int","comment":""},"day":{"type":"int","comment":""},"hour":{"type":"int","comment":""},"minute":{"type":"int","comment":""},"second":{"type":"decimal","comment":""}}},"author":{"author":{"type":"string","comment":""}}},"output":{"id":{"type":"int","comment":""},"description":{"type":"string","comment":""},"author":{"type":"string","comment":""},"meta":{"tags":{"type":"string[]","comment":""},"category":{"type":"string","comment":""},"createdTimeStamp":{"utcOffset":{"hours":{"type":"int","comment":""},"minutes":{"type":"int","comment":""},"seconds":{"type":"decimal","comment":""}},"timeAbbrev":{"type":"string","comment":""},"which":{"type":"0|1","comment":""},"dayOfWeek":{"type":"0|1|2|3|4|5|6","comment":""},"year":{"type":"int","comment":""},"month":{"type":"int","comment":""},"day":{"type":"int","comment":""},"hour":{"type":"int","comment":""},"minute":{"type":"int","comment":""},"second":{"type":"decimal","comment":""}}}},"inputMetadata":{"post":{"isArrayType":false,"parameterName":"post","parameterType":"Post","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"description":{"typeName":"string","type":"string","typeInstance":"description","nullable":false,"optional":false},"tags":{"typeName":"string","type":"string","typeInstance":"tags","nullable":false,"optional":false},"category":{"typeName":"string","type":"string","typeInstance":"category","nullable":false,"optional":false},"createdTimeStamp":{"nullable":false,"optional":false,"type":"record","typeInstance":"createdTimeStamp","typeName":"record","fields":{"utcOffset":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"utcOffset","members":{"hours":{"typeName":"int","type":"int","typeInstance":"hours","nullable":false,"optional":false},"minutes":{"typeName":"int","type":"int","typeInstance":"minutes","nullable":false,"optional":false},"seconds":{"typeName":"decimal","type":"decimal","typeInstance":"seconds","nullable":false,"optional":true}},"nullable":false},"timeAbbrev":{"typeName":"string","type":"string","typeInstance":"timeAbbrev","nullable":false,"optional":true},"which":{"optional":true,"typeName":"0|1","type":"union","typeInstance":"which","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false}},"nullable":false},"dayOfWeek":{"optional":true,"typeName":"0|1|2|3|4|5|6","type":"union","typeInstance":"dayOfWeek","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false},"2":{"typeName":"2","type":"2","typeInstance":"2","nullable":false,"optional":false},"3":{"typeName":"3","type":"3","typeInstance":"3","nullable":false,"optional":false},"4":{"typeName":"4","type":"4","typeInstance":"4","nullable":false,"optional":false},"5":{"typeName":"5","type":"5","typeInstance":"5","nullable":false,"optional":false},"6":{"typeName":"6","type":"6","typeInstance":"6","nullable":false,"optional":false}},"nullable":false},"year":{"typeName":"int","type":"int","typeInstance":"year","nullable":false,"optional":false},"month":{"typeName":"int","type":"int","typeInstance":"month","nullable":false,"optional":false},"day":{"typeName":"int","type":"int","typeInstance":"day","nullable":false,"optional":false},"hour":{"typeName":"int","type":"int","typeInstance":"hour","nullable":false,"optional":false},"minute":{"typeName":"int","type":"int","typeInstance":"minute","nullable":false,"optional":false},"second":{"typeName":"decimal","type":"decimal","typeInstance":"second","nullable":false,"optional":true}}}}},"author":{"isArrayType":false,"parameterName":"author","parameterType":"string ","type":"record","fields":{"author":{"typeName":"string","type":"string","typeInstance":"author","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"description":{"typeName":"string","type":"string","typeInstance":"description","nullable":false,"optional":false},"author":{"typeName":"string","type":"string","typeInstance":"author","nullable":false,"optional":false},"meta":{"nullable":false,"optional":false,"type":"record","typeInstance":"meta","typeName":"record","fields":{"tags":{"typeName":"string[]","type":"string[]","typeInstance":"tags","nullable":false,"optional":false},"category":{"typeName":"string","type":"string","typeInstance":"category","nullable":false,"optional":false},"createdTimeStamp":{"nullable":false,"optional":false,"type":"record","typeInstance":"createdTimeStamp","typeName":"record","fields":{"utcOffset":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"utcOffset","members":{"hours":{"typeName":"int","type":"int","typeInstance":"hours","nullable":false,"optional":false},"minutes":{"typeName":"int","type":"int","typeInstance":"minutes","nullable":false,"optional":false},"seconds":{"typeName":"decimal","type":"decimal","typeInstance":"seconds","nullable":false,"optional":true}},"nullable":false},"timeAbbrev":{"typeName":"string","type":"string","typeInstance":"timeAbbrev","nullable":false,"optional":true},"which":{"optional":true,"typeName":"0|1","type":"union","typeInstance":"which","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false}},"nullable":false},"dayOfWeek":{"optional":true,"typeName":"0|1|2|3|4|5|6","type":"union","typeInstance":"dayOfWeek","members":{"0":{"typeName":"0","type":"0","typeInstance":"0","nullable":false,"optional":false},"1":{"typeName":"1","type":"1","typeInstance":"1","nullable":false,"optional":false},"2":{"typeName":"2","type":"2","typeInstance":"2","nullable":false,"optional":false},"3":{"typeName":"3","type":"3","typeInstance":"3","nullable":false,"optional":false},"4":{"typeName":"4","type":"4","typeInstance":"4","nullable":false,"optional":false},"5":{"typeName":"5","type":"5","typeInstance":"5","nullable":false,"optional":false},"6":{"typeName":"6","type":"6","typeInstance":"6","nullable":false,"optional":false}},"nullable":false},"year":{"typeName":"int","type":"int","typeInstance":"year","nullable":false,"optional":false},"month":{"typeName":"int","type":"int","typeInstance":"month","nullable":false,"optional":false},"day":{"typeName":"int","type":"int","typeInstance":"day","nullable":false,"optional":false},"hour":{"typeName":"int","type":"int","typeInstance":"hour","nullable":false,"optional":false},"minute":{"typeName":"int","type":"int","typeInstance":"minute","nullable":false,"optional":false},"second":{"typeName":"decimal","type":"decimal","typeInstance":"second","nullable":false,"optional":true}}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/expected.json deleted file mode 100644 index e679069a14f..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n id: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem?.credits).ensureType(),\naddress: {\n city: coursesItem?.address?.city,\nstreet: coursesItem?.address?.street?:\"\",\nzipcode: coursesItem?.address?.zipcode?:\"\" \n},\nprofessor: from var professorItem in coursesItem?.professor ?: []\n select {\n id: professorItem?.id,\nfirstName: professorItem?.firstName,\ndepartment: from var departmentItem in professorItem?.department ?: []\n select {\n departmentName: departmentItem?.departmentName?:\"\"\n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/mapping.json deleted file mode 100644 index 2843b5ffec0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"courses":{"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/param_def.json deleted file mode 100644 index 2d71dcf27ea..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_1/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"college":{"courses":{"id":{"type":"string","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"courses":{"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"courses","members":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":true,"typeName":"(record|())[]|()","type":"union[]|()","typeInstance":"professor","members":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":true,"nullable":false}},"nullableArray":true,"nullable":true}},"nullableArray":true,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"professor","members":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":true,"nullable":false}},"nullableArray":true,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/expected.json deleted file mode 100644 index a4c3b8738ce..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person ?: []\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem?.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address?.street?:\"\",\nzipcode: coursesItem.address?.zipcode?:\"\" \n},\nprofessor: from var professorItem in coursesItem?.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: {\n color: professorItem.department?.color,\ndepartmentName: professorItem.department?.departmentName?:\"\" \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/mapping.json deleted file mode 100644 index dfa4c87968e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int|()","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/param_def.json deleted file mode 100644 index 0cd22c7e4e3..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_10/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]|()","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int|()","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types_new","nullableArray":false,"nullable":true},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"address","members":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}},"nullable":true},"professor":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/expected.json deleted file mode 100644 index 9021204e63b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem?.firstName?:\"\",\nlastName: personItem?.lastName,\nage: check (personItem?.age).ensureType(),\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n id: check int:fromString(coursesItem?.id),\ncredits: check (coursesItem?.credits).ensureType(),\naddress: {\n city: coursesItem?.address?.city,\nstreet: coursesItem?.address.street,\nzipcode: coursesItem?.address.zipcode \n},\nprofessor: from var professorItem in coursesItem?.professor ?: []\n select {\n id: professorItem?.id,\nfirstName: professorItem?.firstName,\ndepartment: from var departmentItem in professorItem?.department ?: []\n select {\n departmentName: departmentItem?.departmentName?:\"\"\n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/mapping.json deleted file mode 100644 index 2843b5ffec0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"courses":{"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/param_def.json deleted file mode 100644 index c6cfc13ec07..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_11/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"college":{"courses":{"id":{"type":"string","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"courses":{"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"person","members":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":true,"typeName":"(record|())[]|()","type":"union[]|()","typeInstance":"professor","members":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":true,"nullable":false}},"nullableArray":true,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":true,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":true,"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/expected.json deleted file mode 100644 index 1a3cac1924a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person ?: []\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem?.types_new?:[],\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n id: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address?.street?:\"\",\nzipcode: coursesItem.address?.zipcode?:\"\" \n},\ncolors: check (coursesItem.courseColors).cloneWithType(),\nprofessor: from var professorItem in coursesItem.professor ?: []\n select {\n id: professorItem?.id,\nfirstName: professorItem?.firstName,\ntypes: professorItem?.types,\ndepartment: {\n departmentName: professorItem?.department?.departmentName?:\"\",\ncolor: professorItem?.department?.color \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/mapping.json deleted file mode 100644 index 50e845ee21d..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"id":{"operation":"DIRECT","targetType":"int|()","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.courseColors"]},"professor":{"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"department":{"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]},"color":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED|())[]|()","parameters":["A.person.college.courses.professor.department.color"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/param_def.json deleted file mode 100644 index 4ba539d6c0c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_12/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]|()","comment":""},"college":{"courses":{"courseColors":{"type":"(BLUE|GREEN|RED|())[]","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"(BLUE|GREEN|RED|())[]|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int|()","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"(BLUE|GREEN|RED|())[]|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types_new","nullableArray":false,"nullable":true},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"courseColors":{"optional":false,"typeName":"(BLUE|GREEN|RED|())[]","type":"union[]","typeInstance":"courseColors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"address","members":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}},"nullable":true},"professor":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"(BLUE|GREEN|RED|())[]|()","type":"union[]|()","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":true,"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":true,"nullable":false}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":false,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"(BLUE|GREEN|RED|())[]|()","type":"union[]|()","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":true,"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/expected.json deleted file mode 100644 index 225012f750f..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person ?: []\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem?.firstName?:\"\",\nlastName: personItem?.lastName,\nage: check (personItem?.age).ensureType(),\ntypes_new: personItem?.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n id: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem?.credits).ensureType(),\naddress: {\n city: coursesItem?.address?.city,\nstreet: coursesItem?.address?.street?:\"\",\nzipcode: coursesItem?.address?.zipcode?:\"\" \n},\ncolors: check (coursesItem?.courseColors).cloneWithType(),\nprofessor: from var professorItem in coursesItem?.professor ?: []\n select {\n id: professorItem?.id,\nfirstName: professorItem?.firstName,\ntypes: professorItem?.types,\ndepartment: {\n departmentName: professorItem?.department?.departmentName?:\"\",\ncolor: professorItem?.department?.color \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/mapping.json deleted file mode 100644 index b8e04ab609c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.types_new"]},"courses":{"id":{"operation":"DIRECT","targetType":"int|()","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.courseColors"]},"professor":{"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"department":{"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]},"color":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED|())[]|()","parameters":["A.person.college.courses.professor.department.color"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/param_def.json deleted file mode 100644 index 49dd312fe25..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_13/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]|()","comment":""},"college":{"courses":{"courseColors":{"type":"(BLUE|GREEN|RED|())[]","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"(BLUE|GREEN|RED|())[]|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]|()","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int|()","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"(BLUE|GREEN|RED|())[]|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"person","members":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types_new","nullableArray":false,"nullable":true},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"courses","members":{"courseColors":{"optional":false,"typeName":"(BLUE|GREEN|RED|())[]","type":"union[]","typeInstance":"courseColors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"address","members":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}},"nullable":true},"professor":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"(BLUE|GREEN|RED|())[]|()","type":"union[]|()","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":true,"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":true,"nullable":false}},"nullableArray":true,"nullable":false}},"nullable":true}},"nullableArray":true,"nullable":false}}}},"outputMetadata":{"student":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"student","members":{"id":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types_new","nullableArray":false,"nullable":true},"courses":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"courses","members":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"address","members":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}},"nullable":true},"professor":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"(BLUE|GREEN|RED|())[]|()","type":"union[]|()","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":true,"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":true,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/expected.json deleted file mode 100644 index 9292fafed75..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"student.id","bio":"{\n name: student.studentName?:\"\",\ngender: student.gender,\nage: student.age \n}","academicRecord":"{\n major: student.academicMajor?:\"\",\nsemesterGPA: check (student.semesterGPA).cloneWithType() \n}","accommodationDetails":"{\n numberOfRoomates: (student.roommates?:[]).length(),\naddress: student.address \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/mapping.json deleted file mode 100644 index 606b70d8be6..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"int","parameters":["student.id"]},"bio":{"name":{"operation":"DIRECT","targetType":"string","parameters":["student.studentName"]},"gender":{"operation":"DIRECT","targetType":"string|()","parameters":["student.gender"]},"age":{"operation":"DIRECT","targetType":"int","parameters":["student.age"]}},"academicRecord":{"major":{"operation":"DIRECT","targetType":"string","parameters":["student.academicMajor"]},"semesterGPA":{"operation":"DIRECT","targetType":"string[]|()","parameters":["student.semesterGPA"]}},"accommodationDetails":{"numberOfRoomates":{"operation":"LENGTH","targetType":"int|()","parameters":["student.roommates"]},"address":{"operation":"DIRECT","targetType":"string","parameters":["student.address"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/param_def.json deleted file mode 100644 index 76f29da06aa..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_14/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"student":{"id":{"type":"int","comment":""},"studentName":{"type":"string|()","comment":""},"age":{"type":"int","comment":""},"gender":{"type":"string|()","comment":""},"semesterGPA":{"type":"(string|())[]","comment":""},"academicMajor":{"type":"string","comment":""},"roommates":{"type":"(Student|())[]","comment":""},"address":{"type":"string|()","comment":""}}},"output":{"id":{"type":"int","comment":""},"bio":{"name":{"type":"string","comment":""},"gender":{"type":"string|()","comment":""},"age":{"type":"int","comment":""}},"academicRecord":{"major":{"type":"string","comment":""},"semesterGPA":{"type":"string[]|()","comment":""}},"accommodationDetails":{"numberOfRoomates":{"type":"int|()","comment":""},"address":{"type":"string","comment":""}}},"inputMetadata":{"student":{"isArrayType":false,"parameterName":"student","parameterType":"Student","type":"record","fields":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"studentName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"studentName","nullable":true},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":true},"gender":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"gender","nullable":true},"semesterGPA":{"optional":false,"typeName":"(string|())[]","type":"union[]","typeInstance":"semesterGPA","nullableArray":true,"nullable":false},"academicMajor":{"typeName":"string","type":"string","typeInstance":"academicMajor","nullable":false,"optional":true},"roommates":{"optional":true,"typeName":"(Student|())[]","type":"union[]","typeInstance":"roommates","nullableArray":true,"nullable":false},"address":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"address","nullable":true}}}},"outputMetadata":{"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"bio":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"bio","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"gender":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"gender","nullable":true},"age":{"typeName":"int","type":"int","typeInstance":"age","nullable":false,"optional":true}},"nullable":true},"academicRecord":{"nullable":false,"optional":true,"type":"record","typeInstance":"academicRecord","typeName":"record","fields":{"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":false},"semesterGPA":{"optional":false,"typeName":"string[]|()","type":"union[]|()","typeInstance":"semesterGPA","nullableArray":false,"nullable":true}}},"accommodationDetails":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"accommodationDetails","members":{"numberOfRoomates":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"numberOfRoomates","nullable":true},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":true}},"nullable":true}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/expected.json deleted file mode 100644 index 7e8eb8a36c5..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"employeeId":"employee.employeeId","firstName":"employee.firstName","middleName":"employee?.middleName","age":"employee.dateOfBirth","gender":"employee.gender","spokenLanguages":"employee.languages","emailAddresses":"{\n primary: employee?.email,\nsecondary: employee?.alternateEmail \n}","phoneNumbers":"{\n primary: check int:fromString(employee.phoneNumber),\ntotalEmergencyContacts: (employee.emergencyContacts).length() \n}","address":"{\n street: employee.address?.street,\ncity: employee.address.city,\nstate: employee.address.state,\ncountry: employee.address?.country,\npostalCode: employee.address.postalCode \n}","currentStatus":"employee.status","currentDepartment":"employee.department","position":"{\n title: employee.designation?:\"\" \n}","compensation":"{\n base: employee.salary?:0.0,\nbonus: employee.salary \n}","skillSet":"{\n technical: from var skillsItem in employee.skills\n select {\n name: skillsItem?.name,\nlevel: skillsItem?.level,\nyearsOfExperience: skillsItem?.yearsOfExperience,\nisCertified: skillsItem?.isCertified\n} \n}","qualifications":"{\n academic: from var educationItem in employee.education ?: []\n select {\n degree: educationItem.degree,\ninstitution: educationItem.institution,\ngraduationYear: educationItem.graduationYear,\ngpa: educationItem?.gpa,\nisVerified: educationItem.isVerified\n},\nprofessional: from var certificationsItem in employee?.certifications ?: []\n select {\n name: certificationsItem?.name?:\"\",\nissuingAuthority: certificationsItem?.issuingAuthority?:\"\",\nissueDate: certificationsItem?.issueDate,\nexpiryDate: certificationsItem?.expiryDate,\ncertificationId: certificationsItem?.certificationId\n} \n}","projectDetails":"{\n active: from var currentProjectsItem in employee.currentProjects ?: []\n select {\n name: currentProjectsItem?.name?:\"\",\ndescription: currentProjectsItem?.description,\nstartDate: currentProjectsItem?.startDate,\nendDate: currentProjectsItem?.endDate,\nrole: currentProjectsItem?.role,\ntechnologies: from var technologiesItem in currentProjectsItem?.technologies ?: []\n select {\n name: technologiesItem?.name,\nversion: technologiesItem?.version,\nisMainTechnology: technologiesItem?.isMainTechnology\n}\n},\ncompleted: from var completedProjectsItem in employee?.completedProjects ?: []\n select {\n name: completedProjectsItem.name,\ndescription: completedProjectsItem.description,\nstartDate: completedProjectsItem.startDate,\nendDate: completedProjectsItem.endDate,\nrole: completedProjectsItem.role,\ntechnologies: from var technologiesItem in completedProjectsItem.technologies\n select {\n name: technologiesItem.name,\nversion: technologiesItem.version,\nisMainTechnology: technologiesItem.isMainTechnology\n}\n} \n}","performance":"{\n history: from var ratingsItem in employee.ratings ?: []\n select {\n period: ratingsItem?.period,\nscore: ratingsItem?.score,\nfeedback: ratingsItem?.feedback,\nevaluator: ratingsItem?.evaluator\n} \n}","benefits":"{\n health: employee.insuranceType,\nadditional: {\n dental: employee.dental,\nvision: employee.vision \n},\nleaves: {\n total: employee.vacationDays?:0,\nused: employee.sickLeaveBalance?:0 \n} \n}","payrollInfo":"{\n bankName: employee.bankDetails.bankName,\nmaskedAccountNumber: employee.bankDetails.accountNumber?:\"\",\naccountType: employee.bankDetails.accountType \n}","documentation":"{\n status: employee.documentStatus?:[],\npendingDocuments: check (employee.documentIds).cloneWithType() \n}","systemInfo":"{\n lastModified: employee?.lastUpdated?:\"\",\nmodifiedBy: employee.updatedBy?:\"\",\nisActiveEmployee: employee.isActive?:false \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/mapping.json deleted file mode 100644 index c4afc57bd2a..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"employeeId":{"operation":"DIRECT","targetType":"string","parameters":["employee.employeeId"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.firstName"]},"middleName":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.middleName"]},"age":{"operation":"DIRECT","targetType":"string","parameters":["employee.dateOfBirth"]},"gender":{"operation":"DIRECT","targetType":"PREFER_NOT_TO_SAY|OTHER|FEMALE|MALE","parameters":["employee.gender"]},"spokenLanguages":{"operation":"DIRECT","targetType":"(string|())[]","parameters":["employee.languages"]},"emailAddresses":{"primary":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.email"]},"secondary":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.alternateEmail"]}},"phoneNumbers":{"primary":{"operation":"DIRECT","targetType":"int","parameters":["employee.phoneNumber"]},"totalEmergencyContacts":{"operation":"LENGTH","targetType":"int","parameters":["employee.emergencyContacts"]}},"address":{"street":{"operation":"DIRECT","targetType":"string","parameters":["employee.address.street"]},"city":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.address.city"]},"state":{"operation":"DIRECT","targetType":"string","parameters":["employee.address.state"]},"country":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.address.country"]},"postalCode":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.address.postalCode"]}},"currentStatus":{"operation":"DIRECT","targetType":"TERMINATED|INTERN|CONTRACT|PART_TIME|FULL_TIME","parameters":["employee.status"]},"currentDepartment":{"operation":"DIRECT","targetType":"OPERATIONS|HR|FINANCE|MARKETING|SALES|ENGINEERING|()","parameters":["employee.department"]},"position":{"title":{"operation":"DIRECT","targetType":"string","parameters":["employee.designation"]}},"compensation":{"base":{"operation":"DIRECT","targetType":"decimal","parameters":["employee.salary"]},"bonus":{"operation":"DIRECT","targetType":"decimal|()","parameters":["employee.salary"]}},"skillSet":{"technical":{"name":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.skills.name"]},"level":{"operation":"DIRECT","targetType":"EXPERT|ADVANCED|INTERMEDIATE|BEGINNER|()","parameters":["employee.skills.level"]},"yearsOfExperience":{"operation":"DIRECT","targetType":"int","parameters":["employee.skills.yearsOfExperience"]},"isCertified":{"operation":"DIRECT","targetType":"boolean","parameters":["employee.skills.isCertified"]}}},"qualifications":{"academic":{"degree":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.education.degree"]},"institution":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.education.institution"]},"graduationYear":{"operation":"DIRECT","targetType":"string","parameters":["employee.education.graduationYear"]},"gpa":{"operation":"DIRECT","targetType":"decimal|()","parameters":["employee.education.gpa"]},"isVerified":{"operation":"DIRECT","targetType":"boolean|()","parameters":["employee.education.isVerified"]}},"professional":{"name":{"operation":"DIRECT","targetType":"string","parameters":["employee.certifications.name"]},"issuingAuthority":{"operation":"DIRECT","targetType":"string","parameters":["employee.certifications.issuingAuthority"]},"issueDate":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.certifications.issueDate"]},"expiryDate":{"operation":"DIRECT","targetType":"string","parameters":["employee.certifications.expiryDate"]},"certificationId":{"operation":"DIRECT","targetType":"string","parameters":["employee.certifications.certificationId"]}}},"projectDetails":{"active":{"name":{"operation":"DIRECT","targetType":"string","parameters":["employee.currentProjects.name"]},"description":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.currentProjects.description"]},"startDate":{"operation":"DIRECT","targetType":"string","parameters":["employee.currentProjects.startDate"]},"endDate":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.currentProjects.endDate"]},"role":{"operation":"DIRECT","targetType":"MANAGER|CONSULTANT|MEMBER|LEAD","parameters":["employee.currentProjects.role"]},"technologies":{"name":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.currentProjects.technologies.name"]},"version":{"operation":"DIRECT","targetType":"string","parameters":["employee.currentProjects.technologies.version"]},"isMainTechnology":{"operation":"DIRECT","targetType":"boolean","parameters":["employee.currentProjects.technologies.isMainTechnology"]}}},"completed":{"name":{"operation":"DIRECT","targetType":"string","parameters":["employee.completedProjects.name"]},"description":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.completedProjects.description"]},"startDate":{"operation":"DIRECT","targetType":"string","parameters":["employee.completedProjects.startDate"]},"endDate":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.completedProjects.endDate"]},"role":{"operation":"DIRECT","targetType":"MANAGER|CONSULTANT|MEMBER|LEAD","parameters":["employee.completedProjects.role"]},"technologies":{"name":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.completedProjects.technologies.name"]},"version":{"operation":"DIRECT","targetType":"string","parameters":["employee.completedProjects.technologies.version"]},"isMainTechnology":{"operation":"DIRECT","targetType":"boolean","parameters":["employee.completedProjects.technologies.isMainTechnology"]}}}},"performance":{"history":{"period":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.ratings.period"]},"score":{"operation":"DIRECT","targetType":"decimal","parameters":["employee.ratings.score"]},"feedback":{"operation":"DIRECT","targetType":"string","parameters":["employee.ratings.feedback"]},"evaluator":{"operation":"DIRECT","targetType":"string|()","parameters":["employee.ratings.evaluator"]}}},"benefits":{"health":{"operation":"DIRECT","targetType":"NONE|FAMILY|PREMIUM|BASIC","parameters":["employee.insuranceType"]},"additional":{"dental":{"operation":"DIRECT","targetType":"boolean|()","parameters":["employee.dental"]},"vision":{"operation":"DIRECT","targetType":"boolean","parameters":["employee.vision"]}},"leaves":{"total":{"operation":"DIRECT","targetType":"int","parameters":["employee.vacationDays"]},"used":{"operation":"DIRECT","targetType":"int","parameters":["employee.sickLeaveBalance"]}}},"payrollInfo":{"bankName":{"operation":"DIRECT","targetType":"string","parameters":["employee.bankDetails.bankName"]},"maskedAccountNumber":{"operation":"DIRECT","targetType":"string","parameters":["employee.bankDetails.accountNumber"]},"accountType":{"operation":"DIRECT","targetType":"SAVINGS|CHECKING","parameters":["employee.bankDetails.accountType"]}},"documentation":{"status":{"operation":"DIRECT","targetType":"(REJECTED|EXPIRED|VERIFIED|PENDING)[]","parameters":["employee.documentStatus"]},"pendingDocuments":{"operation":"DIRECT","targetType":"string[]","parameters":["employee.documentIds"]}},"systemInfo":{"lastModified":{"operation":"DIRECT","targetType":"string","parameters":["employee.lastUpdated"]},"modifiedBy":{"operation":"DIRECT","targetType":"string","parameters":["employee.updatedBy"]},"isActiveEmployee":{"operation":"DIRECT","targetType":"boolean","parameters":["employee.isActive"]}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/param_def.json deleted file mode 100644 index 423ee28a6ce..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_15_100_fields/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"employee":{"employeeId":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"middleName":{"type":"string|()","comment":""},"lastName":{"type":"string","comment":""},"dateOfBirth":{"type":"string|()","comment":""},"gender":{"type":"PREFER_NOT_TO_SAY|OTHER|FEMALE|MALE|()","comment":""},"languages":{"type":"string[]","comment":""},"email":{"type":"string|()","comment":""},"alternateEmail":{"type":"string|()","comment":""},"phoneNumber":{"type":"string","comment":""},"emergencyContacts":{"type":"(string|())[]","comment":""},"address":{"street":{"type":"string|()","comment":""},"city":{"type":"string","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string|()","comment":""},"postalCode":{"type":"string","comment":""}},"status":{"type":"TERMINATED|INTERN|CONTRACT|PART_TIME|FULL_TIME","comment":""},"department":{"type":"OPERATIONS|HR|FINANCE|MARKETING|SALES|ENGINEERING|()","comment":""},"designation":{"type":"string","comment":""},"salary":{"type":"decimal|()","comment":""},"joiningDate":{"type":"string","comment":""},"terminationDate":{"type":"string|()","comment":""},"skills":{"name":{"type":"string|()","comment":""},"level":{"type":"EXPERT|ADVANCED|INTERMEDIATE|BEGINNER|()","comment":""},"yearsOfExperience":{"type":"int","comment":""},"isCertified":{"type":"boolean","comment":""}},"education":{"degree":{"type":"string|()","comment":""},"institution":{"type":"string|()","comment":""},"graduationYear":{"type":"string","comment":""},"gpa":{"type":"decimal|()","comment":""},"isVerified":{"type":"boolean|()","comment":""}},"certifications":{"name":{"type":"string","comment":""},"issuingAuthority":{"type":"string","comment":""},"issueDate":{"type":"string|()","comment":""},"expiryDate":{"type":"string","comment":""},"certificationId":{"type":"string","comment":""}},"currentProjects":{"name":{"type":"string","comment":""},"description":{"type":"string|()","comment":""},"startDate":{"type":"string","comment":""},"endDate":{"type":"string|()","comment":""},"role":{"type":"MANAGER|CONSULTANT|MEMBER|LEAD","comment":""},"technologies":{"name":{"type":"string|()","comment":""},"version":{"type":"string","comment":""},"isMainTechnology":{"type":"boolean","comment":""}}},"completedProjects":{"name":{"type":"string","comment":""},"description":{"type":"string|()","comment":""},"startDate":{"type":"string","comment":""},"endDate":{"type":"string|()","comment":""},"role":{"type":"MANAGER|CONSULTANT|MEMBER|LEAD","comment":""},"technologies":{"name":{"type":"string|()","comment":""},"version":{"type":"string","comment":""},"isMainTechnology":{"type":"boolean","comment":""}}},"performanceScores":{"type":"decimal[]","comment":""},"ratings":{"period":{"type":"string|()","comment":""},"score":{"type":"decimal","comment":""},"feedback":{"type":"string","comment":""},"evaluator":{"type":"string|()","comment":""}},"insuranceType":{"type":"NONE|FAMILY|PREMIUM|BASIC","comment":""},"dental":{"type":"boolean","comment":""},"vision":{"type":"boolean|()","comment":""},"vacationDays":{"type":"int","comment":""},"sickLeaveBalance":{"type":"int|()","comment":""},"bankDetails":{"bankName":{"type":"string","comment":""},"accountNumber":{"type":"string|()","comment":""},"routingNumber":{"type":"string|()","comment":""},"accountType":{"type":"SAVINGS|CHECKING","comment":""}},"documentStatus":{"type":"(REJECTED|EXPIRED|VERIFIED|PENDING)[]|()","comment":""},"documentIds":{"type":"(string|())[]","comment":""},"lastUpdated":{"type":"string|()","comment":""},"updatedBy":{"type":"string|()","comment":""},"isActive":{"type":"boolean","comment":""}}},"output":{"employeeId":{"type":"string","comment":""},"firstName":{"type":"string|()","comment":""},"middleName":{"type":"string|()","comment":""},"age":{"type":"string","comment":""},"gender":{"type":"PREFER_NOT_TO_SAY|OTHER|FEMALE|MALE","comment":""},"spokenLanguages":{"type":"(string|())[]","comment":""},"emailAddresses":{"primary":{"type":"string|()","comment":""},"secondary":{"type":"string|()","comment":""}},"phoneNumbers":{"primary":{"type":"int","comment":""},"totalEmergencyContacts":{"type":"int","comment":""}},"address":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string","comment":""},"country":{"type":"string|()","comment":""},"postalCode":{"type":"string|()","comment":""}},"currentStatus":{"type":"TERMINATED|INTERN|CONTRACT|PART_TIME|FULL_TIME","comment":""},"currentDepartment":{"type":"OPERATIONS|HR|FINANCE|MARKETING|SALES|ENGINEERING|()","comment":""},"position":{"title":{"type":"string","comment":""}},"compensation":{"base":{"type":"decimal","comment":""},"bonus":{"type":"decimal|()","comment":""}},"skillSet":{"technical":{"name":{"type":"string|()","comment":""},"level":{"type":"EXPERT|ADVANCED|INTERMEDIATE|BEGINNER|()","comment":""},"yearsOfExperience":{"type":"int","comment":""},"isCertified":{"type":"boolean","comment":""}}},"qualifications":{"academic":{"degree":{"type":"string|()","comment":""},"institution":{"type":"string|()","comment":""},"graduationYear":{"type":"string","comment":""},"gpa":{"type":"decimal|()","comment":""},"isVerified":{"type":"boolean|()","comment":""}},"professional":{"name":{"type":"string","comment":""},"issuingAuthority":{"type":"string","comment":""},"issueDate":{"type":"string|()","comment":""},"expiryDate":{"type":"string","comment":""},"certificationId":{"type":"string","comment":""}}},"projectDetails":{"active":{"name":{"type":"string","comment":""},"description":{"type":"string|()","comment":""},"startDate":{"type":"string","comment":""},"endDate":{"type":"string|()","comment":""},"role":{"type":"MANAGER|CONSULTANT|MEMBER|LEAD","comment":""},"technologies":{"name":{"type":"string|()","comment":""},"version":{"type":"string","comment":""},"isMainTechnology":{"type":"boolean","comment":""}}},"completed":{"name":{"type":"string","comment":""},"description":{"type":"string|()","comment":""},"startDate":{"type":"string","comment":""},"endDate":{"type":"string|()","comment":""},"role":{"type":"MANAGER|CONSULTANT|MEMBER|LEAD","comment":""},"technologies":{"name":{"type":"string|()","comment":""},"version":{"type":"string","comment":""},"isMainTechnology":{"type":"boolean","comment":""}}}},"performance":{"history":{"period":{"type":"string|()","comment":""},"score":{"type":"decimal","comment":""},"feedback":{"type":"string","comment":""},"evaluator":{"type":"string|()","comment":""}}},"benefits":{"health":{"type":"NONE|FAMILY|PREMIUM|BASIC","comment":""},"additional":{"dental":{"type":"boolean|()","comment":""},"vision":{"type":"boolean","comment":""}},"leaves":{"total":{"type":"int","comment":""},"used":{"type":"int","comment":""}}},"payrollInfo":{"bankName":{"type":"string","comment":""},"maskedAccountNumber":{"type":"string","comment":""},"accountType":{"type":"SAVINGS|CHECKING","comment":""}},"documentation":{"status":{"type":"(REJECTED|EXPIRED|VERIFIED|PENDING)[]","comment":""},"pendingDocuments":{"type":"string[]","comment":""}},"systemInfo":{"lastModified":{"type":"string","comment":""},"modifiedBy":{"type":"string","comment":""},"isActiveEmployee":{"type":"boolean","comment":""}}},"inputMetadata":{"employee":{"isArrayType":false,"parameterName":"employee","parameterType":"EmployeeInput","type":"record","fields":{"employeeId":{"typeName":"string","type":"string","typeInstance":"employeeId","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"middleName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"middleName","nullable":true},"lastName":{"typeName":"string","type":"string","typeInstance":"lastName","nullable":false,"optional":false},"dateOfBirth":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"dateOfBirth","nullable":true},"gender":{"optional":false,"typeName":"PREFER_NOT_TO_SAY|OTHER|FEMALE|MALE|()","type":"union","typeInstance":"gender","members":{"PREFER_NOT_TO_SAY":{"typeName":"PREFER_NOT_TO_SAY","type":"PREFER_NOT_TO_SAY","typeInstance":"PREFER_NOT_TO_SAY","nullable":false,"optional":false},"OTHER":{"typeName":"OTHER","type":"OTHER","typeInstance":"OTHER","nullable":false,"optional":false},"FEMALE":{"typeName":"FEMALE","type":"FEMALE","typeInstance":"FEMALE","nullable":false,"optional":false},"MALE":{"typeName":"MALE","type":"MALE","typeInstance":"MALE","nullable":false,"optional":false}},"nullable":true},"languages":{"typeName":"string[]","type":"string[]","typeInstance":"languages","nullable":false,"optional":true},"email":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"email","nullable":true},"alternateEmail":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"alternateEmail","nullable":true},"phoneNumber":{"typeName":"string","type":"string","typeInstance":"phoneNumber","nullable":false,"optional":false},"emergencyContacts":{"optional":false,"typeName":"(string|())[]","type":"union[]","typeInstance":"emergencyContacts","nullableArray":true,"nullable":false},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"street":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"street","nullable":true},"city":{"typeName":"string","type":"string","typeInstance":"city","nullable":false,"optional":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"country","nullable":true},"postalCode":{"typeName":"string","type":"string","typeInstance":"postalCode","nullable":false,"optional":false}}},"status":{"optional":false,"typeName":"TERMINATED|INTERN|CONTRACT|PART_TIME|FULL_TIME","type":"enum","typeInstance":"status","members":{"TERMINATED":{"typeName":"TERMINATED","type":"TERMINATED","typeInstance":"TERMINATED","nullable":false,"optional":false},"INTERN":{"typeName":"INTERN","type":"INTERN","typeInstance":"INTERN","nullable":false,"optional":false},"CONTRACT":{"typeName":"CONTRACT","type":"CONTRACT","typeInstance":"CONTRACT","nullable":false,"optional":false},"PART_TIME":{"typeName":"PART_TIME","type":"PART_TIME","typeInstance":"PART_TIME","nullable":false,"optional":false},"FULL_TIME":{"typeName":"FULL_TIME","type":"FULL_TIME","typeInstance":"FULL_TIME","nullable":false,"optional":false}},"nullable":false},"department":{"optional":false,"typeName":"OPERATIONS|HR|FINANCE|MARKETING|SALES|ENGINEERING|()","type":"union","typeInstance":"department","members":{"OPERATIONS":{"typeName":"OPERATIONS","type":"OPERATIONS","typeInstance":"OPERATIONS","nullable":false,"optional":false},"HR":{"typeName":"HR","type":"HR","typeInstance":"HR","nullable":false,"optional":false},"FINANCE":{"typeName":"FINANCE","type":"FINANCE","typeInstance":"FINANCE","nullable":false,"optional":false},"MARKETING":{"typeName":"MARKETING","type":"MARKETING","typeInstance":"MARKETING","nullable":false,"optional":false},"SALES":{"typeName":"SALES","type":"SALES","typeInstance":"SALES","nullable":false,"optional":false},"ENGINEERING":{"typeName":"ENGINEERING","type":"ENGINEERING","typeInstance":"ENGINEERING","nullable":false,"optional":false}},"nullable":true},"designation":{"typeName":"string","type":"string","typeInstance":"designation","nullable":false,"optional":true},"salary":{"optional":false,"typeName":"decimal|()","type":"union","typeInstance":"salary","nullable":true},"joiningDate":{"typeName":"string","type":"string","typeInstance":"joiningDate","nullable":false,"optional":false},"terminationDate":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"terminationDate","nullable":true},"skills":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"skills","members":{"name":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"level":{"optional":false,"typeName":"EXPERT|ADVANCED|INTERMEDIATE|BEGINNER|()","type":"union","typeInstance":"level","members":{"EXPERT":{"typeName":"EXPERT","type":"EXPERT","typeInstance":"EXPERT","nullable":false,"optional":false},"ADVANCED":{"typeName":"ADVANCED","type":"ADVANCED","typeInstance":"ADVANCED","nullable":false,"optional":false},"INTERMEDIATE":{"typeName":"INTERMEDIATE","type":"INTERMEDIATE","typeInstance":"INTERMEDIATE","nullable":false,"optional":false},"BEGINNER":{"typeName":"BEGINNER","type":"BEGINNER","typeInstance":"BEGINNER","nullable":false,"optional":false}},"nullable":true},"yearsOfExperience":{"typeName":"int","type":"int","typeInstance":"yearsOfExperience","nullable":false,"optional":true},"isCertified":{"typeName":"boolean","type":"boolean","typeInstance":"isCertified","nullable":false,"optional":true}},"nullableArray":true,"nullable":false},"education":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"education","members":{"degree":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"degree","nullable":true},"institution":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"institution","nullable":true},"graduationYear":{"typeName":"string","type":"string","typeInstance":"graduationYear","nullable":false,"optional":true},"gpa":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"gpa","nullable":true},"isVerified":{"optional":false,"typeName":"boolean|()","type":"union","typeInstance":"isVerified","nullable":true}},"nullableArray":false,"nullable":true},"certifications":{"optional":true,"typeName":"(record|())[]|()","type":"union[]|()","typeInstance":"certifications","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"issuingAuthority":{"typeName":"string","type":"string","typeInstance":"issuingAuthority","nullable":false,"optional":false},"issueDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"issueDate","nullable":true},"expiryDate":{"typeName":"string","type":"string","typeInstance":"expiryDate","nullable":false,"optional":true},"certificationId":{"typeName":"string","type":"string","typeInstance":"certificationId","nullable":false,"optional":true}},"nullableArray":true,"nullable":true},"currentProjects":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"currentProjects","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"description":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"description","nullable":true},"startDate":{"typeName":"string","type":"string","typeInstance":"startDate","nullable":false,"optional":true},"endDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"endDate","nullable":true},"role":{"optional":true,"typeName":"MANAGER|CONSULTANT|MEMBER|LEAD","type":"enum","typeInstance":"role","members":{"MANAGER":{"typeName":"MANAGER","type":"MANAGER","typeInstance":"MANAGER","nullable":false,"optional":false},"CONSULTANT":{"typeName":"CONSULTANT","type":"CONSULTANT","typeInstance":"CONSULTANT","nullable":false,"optional":false},"MEMBER":{"typeName":"MEMBER","type":"MEMBER","typeInstance":"MEMBER","nullable":false,"optional":false},"LEAD":{"typeName":"LEAD","type":"LEAD","typeInstance":"LEAD","nullable":false,"optional":false}},"nullable":false},"technologies":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"technologies","fields":{"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"version":{"typeName":"string","type":"string","typeInstance":"version","nullable":false,"optional":true},"isMainTechnology":{"typeName":"boolean","type":"boolean","typeInstance":"isMainTechnology","nullable":false,"optional":true}},"nullableArray":false,"nullable":false}},"nullableArray":true,"nullable":false},"completedProjects":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"completedProjects","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"description":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"description","nullable":true},"startDate":{"typeName":"string","type":"string","typeInstance":"startDate","nullable":false,"optional":true},"endDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"endDate","nullable":true},"role":{"optional":true,"typeName":"MANAGER|CONSULTANT|MEMBER|LEAD","type":"enum","typeInstance":"role","members":{"MANAGER":{"typeName":"MANAGER","type":"MANAGER","typeInstance":"MANAGER","nullable":false,"optional":false},"CONSULTANT":{"typeName":"CONSULTANT","type":"CONSULTANT","typeInstance":"CONSULTANT","nullable":false,"optional":false},"MEMBER":{"typeName":"MEMBER","type":"MEMBER","typeInstance":"MEMBER","nullable":false,"optional":false},"LEAD":{"typeName":"LEAD","type":"LEAD","typeInstance":"LEAD","nullable":false,"optional":false}},"nullable":false},"technologies":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"technologies","fields":{"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"version":{"typeName":"string","type":"string","typeInstance":"version","nullable":false,"optional":true},"isMainTechnology":{"typeName":"boolean","type":"boolean","typeInstance":"isMainTechnology","nullable":false,"optional":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":true},"performanceScores":{"typeName":"decimal[]","type":"decimal[]","typeInstance":"performanceScores","nullable":false,"optional":true},"ratings":{"optional":true,"typeName":"(record|())[]","type":"union[]","typeInstance":"ratings","members":{"period":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"period","nullable":true},"score":{"typeName":"decimal","type":"decimal","typeInstance":"score","nullable":false,"optional":true},"feedback":{"typeName":"string","type":"string","typeInstance":"feedback","nullable":false,"optional":true},"evaluator":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"evaluator","nullable":true}},"nullableArray":true,"nullable":false},"insuranceType":{"optional":false,"typeName":"NONE|FAMILY|PREMIUM|BASIC","type":"enum","typeInstance":"insuranceType","members":{"NONE":{"typeName":"NONE","type":"NONE","typeInstance":"NONE","nullable":false,"optional":false},"FAMILY":{"typeName":"FAMILY","type":"FAMILY","typeInstance":"FAMILY","nullable":false,"optional":false},"PREMIUM":{"typeName":"PREMIUM","type":"PREMIUM","typeInstance":"PREMIUM","nullable":false,"optional":false},"BASIC":{"typeName":"BASIC","type":"BASIC","typeInstance":"BASIC","nullable":false,"optional":false}},"nullable":false},"dental":{"typeName":"boolean","type":"boolean","typeInstance":"dental","nullable":false,"optional":false},"vision":{"optional":false,"typeName":"boolean|()","type":"union","typeInstance":"vision","nullable":true},"vacationDays":{"typeName":"int","type":"int","typeInstance":"vacationDays","nullable":false,"optional":true},"sickLeaveBalance":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"sickLeaveBalance","nullable":true},"bankDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"bankDetails","typeName":"record","fields":{"bankName":{"typeName":"string","type":"string","typeInstance":"bankName","nullable":false,"optional":false},"accountNumber":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"accountNumber","nullable":true},"routingNumber":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"routingNumber","nullable":true},"accountType":{"optional":false,"typeName":"SAVINGS|CHECKING","type":"enum","typeInstance":"accountType","members":{"SAVINGS":{"typeName":"SAVINGS","type":"SAVINGS","typeInstance":"SAVINGS","nullable":false,"optional":false},"CHECKING":{"typeName":"CHECKING","type":"CHECKING","typeInstance":"CHECKING","nullable":false,"optional":false}},"nullable":false}}},"documentStatus":{"optional":false,"typeName":"(REJECTED|EXPIRED|VERIFIED|PENDING)[]|()","type":"union[]|()","typeInstance":"documentStatus","members":{"REJECTED":{"typeName":"REJECTED","type":"REJECTED","typeInstance":"REJECTED","nullable":false,"optional":false},"EXPIRED":{"typeName":"EXPIRED","type":"EXPIRED","typeInstance":"EXPIRED","nullable":false,"optional":false},"VERIFIED":{"typeName":"VERIFIED","type":"VERIFIED","typeInstance":"VERIFIED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"documentIds":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"documentIds","nullableArray":true,"nullable":false},"lastUpdated":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastUpdated","nullable":true},"updatedBy":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"updatedBy","nullable":true},"isActive":{"typeName":"boolean","type":"boolean","typeInstance":"isActive","nullable":false,"optional":true}}}},"outputMetadata":{"employeeId":{"typeName":"string","type":"string","typeInstance":"employeeId","nullable":false,"optional":false},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"middleName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"middleName","nullable":true},"age":{"typeName":"string","type":"string","typeInstance":"age","nullable":false,"optional":true},"gender":{"optional":true,"typeName":"PREFER_NOT_TO_SAY|OTHER|FEMALE|MALE","type":"enum","typeInstance":"gender","members":{"PREFER_NOT_TO_SAY":{"typeName":"PREFER_NOT_TO_SAY","type":"PREFER_NOT_TO_SAY","typeInstance":"PREFER_NOT_TO_SAY","nullable":false,"optional":false},"OTHER":{"typeName":"OTHER","type":"OTHER","typeInstance":"OTHER","nullable":false,"optional":false},"FEMALE":{"typeName":"FEMALE","type":"FEMALE","typeInstance":"FEMALE","nullable":false,"optional":false},"MALE":{"typeName":"MALE","type":"MALE","typeInstance":"MALE","nullable":false,"optional":false}},"nullable":false},"spokenLanguages":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"spokenLanguages","nullableArray":true,"nullable":false},"emailAddresses":{"nullable":false,"optional":false,"type":"record","typeInstance":"emailAddresses","typeName":"record","fields":{"primary":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"primary","nullable":true},"secondary":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"secondary","nullable":true}}},"phoneNumbers":{"nullable":false,"optional":false,"type":"record","typeInstance":"phoneNumbers","typeName":"record","fields":{"primary":{"typeName":"int","type":"int","typeInstance":"primary","nullable":false,"optional":false},"totalEmergencyContacts":{"typeName":"int","type":"int","typeInstance":"totalEmergencyContacts","nullable":false,"optional":false}}},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"typeName":"string","type":"string","typeInstance":"state","nullable":false,"optional":true},"country":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"country","nullable":true},"postalCode":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"postalCode","nullable":true}}},"currentStatus":{"optional":true,"typeName":"TERMINATED|INTERN|CONTRACT|PART_TIME|FULL_TIME","type":"enum","typeInstance":"currentStatus","members":{"TERMINATED":{"typeName":"TERMINATED","type":"TERMINATED","typeInstance":"TERMINATED","nullable":false,"optional":false},"INTERN":{"typeName":"INTERN","type":"INTERN","typeInstance":"INTERN","nullable":false,"optional":false},"CONTRACT":{"typeName":"CONTRACT","type":"CONTRACT","typeInstance":"CONTRACT","nullable":false,"optional":false},"PART_TIME":{"typeName":"PART_TIME","type":"PART_TIME","typeInstance":"PART_TIME","nullable":false,"optional":false},"FULL_TIME":{"typeName":"FULL_TIME","type":"FULL_TIME","typeInstance":"FULL_TIME","nullable":false,"optional":false}},"nullable":false},"currentDepartment":{"optional":false,"typeName":"OPERATIONS|HR|FINANCE|MARKETING|SALES|ENGINEERING|()","type":"union","typeInstance":"currentDepartment","members":{"OPERATIONS":{"typeName":"OPERATIONS","type":"OPERATIONS","typeInstance":"OPERATIONS","nullable":false,"optional":false},"HR":{"typeName":"HR","type":"HR","typeInstance":"HR","nullable":false,"optional":false},"FINANCE":{"typeName":"FINANCE","type":"FINANCE","typeInstance":"FINANCE","nullable":false,"optional":false},"MARKETING":{"typeName":"MARKETING","type":"MARKETING","typeInstance":"MARKETING","nullable":false,"optional":false},"SALES":{"typeName":"SALES","type":"SALES","typeInstance":"SALES","nullable":false,"optional":false},"ENGINEERING":{"typeName":"ENGINEERING","type":"ENGINEERING","typeInstance":"ENGINEERING","nullable":false,"optional":false}},"nullable":true},"position":{"nullable":false,"optional":false,"type":"record","typeInstance":"position","typeName":"record","fields":{"title":{"typeName":"string","type":"string","typeInstance":"title","nullable":false,"optional":false}}},"compensation":{"nullable":false,"optional":false,"type":"record","typeInstance":"compensation","typeName":"record","fields":{"base":{"typeName":"decimal","type":"decimal","typeInstance":"base","nullable":false,"optional":false},"bonus":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"bonus","nullable":true}}},"skillSet":{"nullable":false,"optional":false,"type":"record","typeInstance":"skillSet","typeName":"record","fields":{"technical":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"technical","members":{"name":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"level":{"optional":false,"typeName":"EXPERT|ADVANCED|INTERMEDIATE|BEGINNER|()","type":"union","typeInstance":"level","members":{"EXPERT":{"typeName":"EXPERT","type":"EXPERT","typeInstance":"EXPERT","nullable":false,"optional":false},"ADVANCED":{"typeName":"ADVANCED","type":"ADVANCED","typeInstance":"ADVANCED","nullable":false,"optional":false},"INTERMEDIATE":{"typeName":"INTERMEDIATE","type":"INTERMEDIATE","typeInstance":"INTERMEDIATE","nullable":false,"optional":false},"BEGINNER":{"typeName":"BEGINNER","type":"BEGINNER","typeInstance":"BEGINNER","nullable":false,"optional":false}},"nullable":true},"yearsOfExperience":{"typeName":"int","type":"int","typeInstance":"yearsOfExperience","nullable":false,"optional":true},"isCertified":{"typeName":"boolean","type":"boolean","typeInstance":"isCertified","nullable":false,"optional":true}},"nullableArray":true,"nullable":false}}},"qualifications":{"nullable":false,"optional":false,"type":"record","typeInstance":"qualifications","typeName":"record","fields":{"academic":{"optional":false,"typeName":"(record|())[]","type":"union[]","typeInstance":"academic","members":{"degree":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"degree","nullable":true},"institution":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"institution","nullable":true},"graduationYear":{"typeName":"string","type":"string","typeInstance":"graduationYear","nullable":false,"optional":true},"gpa":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"gpa","nullable":true},"isVerified":{"optional":false,"typeName":"boolean|()","type":"union","typeInstance":"isVerified","nullable":true}},"nullableArray":true,"nullable":false},"professional":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professional","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"issuingAuthority":{"typeName":"string","type":"string","typeInstance":"issuingAuthority","nullable":false,"optional":false},"issueDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"issueDate","nullable":true},"expiryDate":{"typeName":"string","type":"string","typeInstance":"expiryDate","nullable":false,"optional":true},"certificationId":{"typeName":"string","type":"string","typeInstance":"certificationId","nullable":false,"optional":true}},"nullableArray":false,"nullable":true}}},"projectDetails":{"nullable":false,"optional":false,"type":"record","typeInstance":"projectDetails","typeName":"record","fields":{"active":{"optional":true,"typeName":"(record|())[]|()","type":"union[]|()","typeInstance":"active","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"description":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"description","nullable":true},"startDate":{"typeName":"string","type":"string","typeInstance":"startDate","nullable":false,"optional":true},"endDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"endDate","nullable":true},"role":{"optional":true,"typeName":"MANAGER|CONSULTANT|MEMBER|LEAD","type":"enum","typeInstance":"role","members":{"MANAGER":{"typeName":"MANAGER","type":"MANAGER","typeInstance":"MANAGER","nullable":false,"optional":false},"CONSULTANT":{"typeName":"CONSULTANT","type":"CONSULTANT","typeInstance":"CONSULTANT","nullable":false,"optional":false},"MEMBER":{"typeName":"MEMBER","type":"MEMBER","typeInstance":"MEMBER","nullable":false,"optional":false},"LEAD":{"typeName":"LEAD","type":"LEAD","typeInstance":"LEAD","nullable":false,"optional":false}},"nullable":false},"technologies":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"technologies","fields":{"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"version":{"typeName":"string","type":"string","typeInstance":"version","nullable":false,"optional":true},"isMainTechnology":{"typeName":"boolean","type":"boolean","typeInstance":"isMainTechnology","nullable":false,"optional":true}},"nullableArray":false,"nullable":false}},"nullableArray":true,"nullable":true},"completed":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"completed","fields":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"description":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"description","nullable":true},"startDate":{"typeName":"string","type":"string","typeInstance":"startDate","nullable":false,"optional":true},"endDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"endDate","nullable":true},"role":{"optional":true,"typeName":"MANAGER|CONSULTANT|MEMBER|LEAD","type":"enum","typeInstance":"role","members":{"MANAGER":{"typeName":"MANAGER","type":"MANAGER","typeInstance":"MANAGER","nullable":false,"optional":false},"CONSULTANT":{"typeName":"CONSULTANT","type":"CONSULTANT","typeInstance":"CONSULTANT","nullable":false,"optional":false},"MEMBER":{"typeName":"MEMBER","type":"MEMBER","typeInstance":"MEMBER","nullable":false,"optional":false},"LEAD":{"typeName":"LEAD","type":"LEAD","typeInstance":"LEAD","nullable":false,"optional":false}},"nullable":false},"technologies":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"technologies","fields":{"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"version":{"typeName":"string","type":"string","typeInstance":"version","nullable":false,"optional":true},"isMainTechnology":{"typeName":"boolean","type":"boolean","typeInstance":"isMainTechnology","nullable":false,"optional":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}},"performance":{"nullable":false,"optional":false,"type":"record","typeInstance":"performance","typeName":"record","fields":{"history":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"history","fields":{"period":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"period","nullable":true},"score":{"typeName":"decimal","type":"decimal","typeInstance":"score","nullable":false,"optional":true},"feedback":{"typeName":"string","type":"string","typeInstance":"feedback","nullable":false,"optional":true},"evaluator":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"evaluator","nullable":true}},"nullableArray":false,"nullable":false}}},"benefits":{"nullable":false,"optional":false,"type":"record","typeInstance":"benefits","typeName":"record","fields":{"health":{"optional":false,"typeName":"NONE|FAMILY|PREMIUM|BASIC","type":"enum","typeInstance":"health","members":{"NONE":{"typeName":"NONE","type":"NONE","typeInstance":"NONE","nullable":false,"optional":false},"FAMILY":{"typeName":"FAMILY","type":"FAMILY","typeInstance":"FAMILY","nullable":false,"optional":false},"PREMIUM":{"typeName":"PREMIUM","type":"PREMIUM","typeInstance":"PREMIUM","nullable":false,"optional":false},"BASIC":{"typeName":"BASIC","type":"BASIC","typeInstance":"BASIC","nullable":false,"optional":false}},"nullable":false},"additional":{"nullable":false,"optional":false,"type":"record","typeInstance":"additional","typeName":"record","fields":{"dental":{"optional":false,"typeName":"boolean|()","type":"union","typeInstance":"dental","nullable":true},"vision":{"typeName":"boolean","type":"boolean","typeInstance":"vision","nullable":false,"optional":true}}},"leaves":{"nullable":false,"optional":false,"type":"record","typeInstance":"leaves","typeName":"record","fields":{"total":{"typeName":"int","type":"int","typeInstance":"total","nullable":false,"optional":false},"used":{"typeName":"int","type":"int","typeInstance":"used","nullable":false,"optional":false}}}}},"payrollInfo":{"nullable":false,"optional":false,"type":"record","typeInstance":"payrollInfo","typeName":"record","fields":{"bankName":{"typeName":"string","type":"string","typeInstance":"bankName","nullable":false,"optional":false},"maskedAccountNumber":{"typeName":"string","type":"string","typeInstance":"maskedAccountNumber","nullable":false,"optional":false},"accountType":{"optional":false,"typeName":"SAVINGS|CHECKING","type":"enum","typeInstance":"accountType","members":{"SAVINGS":{"typeName":"SAVINGS","type":"SAVINGS","typeInstance":"SAVINGS","nullable":false,"optional":false},"CHECKING":{"typeName":"CHECKING","type":"CHECKING","typeInstance":"CHECKING","nullable":false,"optional":false}},"nullable":false}}},"documentation":{"nullable":false,"optional":false,"type":"record","typeInstance":"documentation","typeName":"record","fields":{"status":{"optional":false,"typeName":"(REJECTED|EXPIRED|VERIFIED|PENDING)[]","type":"enum[]","typeInstance":"status","members":{"REJECTED":{"typeName":"REJECTED","type":"REJECTED","typeInstance":"REJECTED","nullable":false,"optional":false},"EXPIRED":{"typeName":"EXPIRED","type":"EXPIRED","typeInstance":"EXPIRED","nullable":false,"optional":false},"VERIFIED":{"typeName":"VERIFIED","type":"VERIFIED","typeInstance":"VERIFIED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"pendingDocuments":{"typeName":"string[]","type":"string[]","typeInstance":"pendingDocuments","nullable":false,"optional":true}}},"systemInfo":{"nullable":false,"optional":false,"type":"record","typeInstance":"systemInfo","typeName":"record","fields":{"lastModified":{"typeName":"string","type":"string","typeInstance":"lastModified","nullable":false,"optional":false},"modifiedBy":{"typeName":"string","type":"string","typeInstance":"modifiedBy","nullable":false,"optional":false},"isActiveEmployee":{"typeName":"boolean","type":"boolean","typeInstance":"isActiveEmployee","nullable":false,"optional":false}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/expected.json deleted file mode 100644 index 3608643547b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person?.id","firstName":"person.firstName","middleName":"person?.middleName","lastName":"person?.lastName","gender":"person.gender","age":"check int:fromString(person?.age?:\"\")","birthDate":"person.dateOfBirth?:\"\"","citizenship":"person.nationality?:\"\"","passport":"(person?.passportNumber).toString()","phones":"person.contactNumbers","email":"person.primaryEmail","backupEmails":"check (person.alternateEmails).cloneWithType()","currentAddress":"{\n streetAddress: person.residentialAddress.street?:\"\",\ncityName: person.residentialAddress?.city,\nstateName: person.residentialAddress.state?:\"\",\ncountryName: person.residentialAddress.country,\npostalCode: (person.residentialAddress.zipCode).toString(),\nlat: check (person.residentialAddress?.latitude).ensureType(),\nlng: check (person.residentialAddress?.longitude).ensureType() \n}","homeAddress":"{\n streetAddress: person?.permanentAddress?.street?:\"\",\ncityName: person?.permanentAddress?.city,\nstateName: person?.permanentAddress?.state?:\"\",\ncountryName: person?.permanentAddress?.country?:\"\",\npostalCode: (person?.permanentAddress?.zipCode?:0).toString(),\nlat: check (person?.permanentAddress?.latitude).ensureType(),\nlng: check (person?.permanentAddress?.longitude).ensureType() \n}","studentDocs":"from var documentsItem in person?.documents ?: []\n select {\n documentType: documentsItem.documentType,\nnumber: documentsItem.documentNumber,\ncountry: documentsItem.issuingCountry,\nvalidUntil: documentsItem.expiryDate\n}","emergency":"{\n contactName: person?.emergencyContact?.name?:\"\",\ncontactDetails: person?.emergencyContact?.contacts?:[],\nrelation: person?.emergencyContact?.relationship?:\"\" \n}","healthRecord":"{\n blood: person?.healthInfo?.bloodGroup?:\"\",\nallergyInfo: person?.healthInfo?.allergies?:[],\ncurrentMedications: person?.healthInfo?.medications,\ninsuranceStatus: person?.healthInfo?.isInsured?:false \n}","finances":"{\n paymentPreference: person?.financialInfo?.preferredPayment?:\"CASH\",\naccountId: person?.financialInfo?.accountNumber,\nbank: person?.financialInfo?.bankName,\nscholarship: person?.financialInfo?.scholarshipAmount \n}","education":"from var academicHistoryItem in person?.academicHistory ?: []\n select {\n school: academicHistoryItem?.institutionName?:\"\",\ngradePoint: academicHistoryItem.gpa?:0.0,\nspecialization: academicHistoryItem.major?:\"\",\ncompletionYear: academicHistoryItem.graduationYear?:0\n}","abilities":"from var skillsItem in person?.skills ?: []\n select {\n skillName: skillsItem.name?:\"\",\nlevel: skillsItem.proficiencyLevel?:0,\nexperiencePeriod: skillsItem?.experience?:\"\"\n}","enrolledCourses":"from var coursesItem in person?.college?.courses ?: []\n select {\n courseId: coursesItem?.id,\ncourseName: coursesItem?.name,\ncode: coursesItem.courseCode,\ndesc: coursesItem?.description,\ncreditHours: coursesItem.credits,\ncourseDuration: coursesItem.duration,\npossibleGrades: check (coursesItem.allowedGrades).cloneWithType(),\nprofessors: from var professorsItem in coursesItem?.professors ?: []\n select {\n id: professorsItem.id,\nfirstName: professorsItem.firstName,\nlastName: professorsItem?.lastName,\nspecializations: professorsItem?.specializations,\ngradesAssigned: professorsItem.gradesAssigned,\ndepartment: {\n departmentName: professorsItem.department?.departmentName?:\"\",\nstatus: professorsItem.department?.status,\nfacultyCount: professorsItem.department?.facultyCount?:0,\nspecializations: professorsItem.department?.specializations?:[],\nbudget: professorsItem.department?.budget?:0.0,\nestablished: professorsItem.department?.established?:\"\" \n},\nevaluationScores: professorsItem.evaluationScores,\nyearsOfExperience: professorsItem.yearsOfExperience,\npublications: professorsItem?.publications,\nresearchAreas: professorsItem.researchAreas\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/mapping.json deleted file mode 100644 index a7f306b295c..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string|int|()","parameters":["person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["person.firstName"]},"middleName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.middleName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.lastName"]},"gender":{"operation":"DIRECT","targetType":"OTHER|FEMALE|GREEN|MALE","parameters":["person.gender"]},"age":{"operation":"DIRECT","targetType":"int|()","parameters":["person.age"]},"birthDate":{"operation":"DIRECT","targetType":"string","parameters":["person.dateOfBirth"]},"citizenship":{"operation":"DIRECT","targetType":"string","parameters":["person.nationality"]},"passport":{"operation":"DIRECT","targetType":"string|()","parameters":["person.passportNumber"]},"phones":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["person.contactNumbers"]},"email":{"operation":"DIRECT","targetType":"string","parameters":["person.primaryEmail"]},"backupEmails":{"operation":"DIRECT","targetType":"string[]","parameters":["person.alternateEmails"]},"currentAddress":{"streetAddress":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.street"]},"cityName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.residentialAddress.city"]},"stateName":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.state"]},"countryName":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.country"]},"postalCode":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.zipCode"]},"lat":{"operation":"DIRECT","targetType":"float|()","parameters":["person.residentialAddress.latitude"]},"lng":{"operation":"DIRECT","targetType":"float|()","parameters":["person.residentialAddress.longitude"]}},"homeAddress":{"streetAddress":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.street"]},"cityName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.permanentAddress.city"]},"stateName":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.state"]},"countryName":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.country"]},"postalCode":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.zipCode"]},"lat":{"operation":"DIRECT","targetType":"float|()","parameters":["person.permanentAddress.latitude"]},"lng":{"operation":"DIRECT","targetType":"float|()","parameters":["person.permanentAddress.longitude"]}},"studentDocs":{"documentType":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.documentType"]},"number":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.documentNumber"]},"country":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.issuingCountry"]},"validUntil":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.expiryDate"]}},"emergency":{"contactName":{"operation":"DIRECT","targetType":"string","parameters":["person.emergencyContact.name"]},"contactDetails":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["person.emergencyContact.contacts"]},"relation":{"operation":"DIRECT","targetType":"string","parameters":["person.emergencyContact.relationship"]}},"healthRecord":{"blood":{"operation":"DIRECT","targetType":"string","parameters":["person.healthInfo.bloodGroup"]},"allergyInfo":{"operation":"DIRECT","targetType":"(string|())[]","parameters":["person.healthInfo.allergies"]},"currentMedications":{"operation":"DIRECT","targetType":"string[]|()","parameters":["person.healthInfo.medications"]},"insuranceStatus":{"operation":"DIRECT","targetType":"boolean","parameters":["person.healthInfo.isInsured"]}},"finances":{"paymentPreference":{"operation":"DIRECT","targetType":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","parameters":["person.financialInfo.preferredPayment"]},"accountId":{"operation":"DIRECT","targetType":"string|()","parameters":["person.financialInfo.accountNumber"]},"bank":{"operation":"DIRECT","targetType":"string|()","parameters":["person.financialInfo.bankName"]},"scholarship":{"operation":"DIRECT","targetType":"decimal|()","parameters":["person.financialInfo.scholarshipAmount"]}},"education":{"school":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.institutionName"]},"gradePoint":{"operation":"DIRECT","targetType":"float","parameters":["person.academicHistory.gpa"]},"specialization":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.major"]},"completionYear":{"operation":"DIRECT","targetType":"int","parameters":["person.academicHistory.graduationYear"]}},"abilities":{"skillName":{"operation":"DIRECT","targetType":"string","parameters":["person.skills.name"]},"level":{"operation":"DIRECT","targetType":"int","parameters":["person.skills.proficiencyLevel"]},"experiencePeriod":{"operation":"DIRECT","targetType":"string|int","parameters":["person.skills.experience"]}},"enrolledCourses":{"courseId":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.id"]},"courseName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.name"]},"code":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.courseCode"]},"desc":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.description"]},"creditHours":{"operation":"DIRECT","targetType":"decimal|()","parameters":["person.college.courses.credits"]},"courseDuration":{"operation":"DIRECT","targetType":"string|int|()","parameters":["person.college.courses.duration"]},"possibleGrades":{"operation":"DIRECT","targetType":"(F|D|C|B|A)[]","parameters":["person.college.courses.allowedGrades"]},"professors":{"id":{"operation":"DIRECT","targetType":"string|int","parameters":["person.college.courses.professors.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.professors.lastName"]},"specializations":{"operation":"DIRECT","targetType":"string[]|()","parameters":["person.college.courses.professors.specializations"]},"gradesAssigned":{"operation":"DIRECT","targetType":"(F|D|C|B|A|())[]","parameters":["person.college.courses.professors.gradesAssigned"]},"department":{"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.departmentName"]},"status":{"operation":"DIRECT","targetType":"SUSPENDED|PENDING|INACTIVE|ACTIVE","parameters":["person.college.courses.professors.department.status"]},"facultyCount":{"operation":"DIRECT","targetType":"int","parameters":["person.college.courses.professors.department.facultyCount"]},"specializations":{"operation":"DIRECT","targetType":"string[]","parameters":["person.college.courses.professors.department.specializations"]},"budget":{"operation":"DIRECT","targetType":"decimal","parameters":["person.college.courses.professors.department.budget"]},"established":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.established"]}},"evaluationScores":{"operation":"DIRECT","targetType":"(decimal|float)[]","parameters":["person.college.courses.professors.evaluationScores"]},"yearsOfExperience":{"operation":"DIRECT","targetType":"int","parameters":["person.college.courses.professors.yearsOfExperience"]},"publications":{"operation":"DIRECT","targetType":"string[]|()","parameters":["person.college.courses.professors.publications"]},"researchAreas":{"operation":"DIRECT","targetType":"(string|())[]","parameters":["person.college.courses.professors.researchAreas"]}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/param_def.json deleted file mode 100644 index a171736573e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_16_100_fields/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string|int|()","comment":""},"firstName":{"type":"string","comment":""},"middleName":{"type":"string|()","comment":""},"lastName":{"type":"string|()","comment":""},"gender":{"type":"OTHER|FEMALE|GREEN|MALE","comment":""},"age":{"type":"string|()","comment":""},"dateOfBirth":{"type":"string|()","comment":""},"nationality":{"type":"string","comment":""},"passportNumber":{"type":"int|()","comment":""},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"contactNumbers":{"type":"(string|int)[]","comment":""},"primaryEmail":{"type":"string","comment":""},"alternateEmails":{"type":"(string|())[]","comment":""},"residentialAddress":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string","comment":""},"zipCode":{"type":"int","comment":""},"latitude":{"type":"decimal|()","comment":""},"longitude":{"type":"int|()","comment":""}},"permanentAddress":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string","comment":""},"zipCode":{"type":"int","comment":""},"latitude":{"type":"decimal|()","comment":""},"longitude":{"type":"int|()","comment":""}},"documents":{"documentType":{"type":"string","comment":""},"documentNumber":{"type":"string","comment":""},"issuingCountry":{"type":"string","comment":""},"expiryDate":{"type":"string","comment":""}},"emergencyContact":{"name":{"type":"string","comment":""},"contacts":{"type":"(string|int)[]","comment":""},"relationship":{"type":"string","comment":""}},"healthInfo":{"bloodGroup":{"type":"string","comment":""},"allergies":{"type":"string[]","comment":""},"medications":{"type":"string[]","comment":""},"isInsured":{"type":"boolean","comment":""}},"financialInfo":{"preferredPayment":{"type":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","comment":""},"accountNumber":{"type":"string|()","comment":""},"bankName":{"type":"string","comment":""},"scholarshipAmount":{"type":"decimal","comment":""}},"academicHistory":{"institutionName":{"type":"string|()","comment":""},"gpa":{"type":"float|()","comment":""},"major":{"type":"string","comment":""},"graduationYear":{"type":"int|()","comment":""}},"skills":{"name":{"type":"string|()","comment":""},"proficiencyLevel":{"type":"int","comment":""},"experience":{"type":"string|int|()","comment":""}},"college":{"courses":{"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"courseCode":{"type":"string","comment":""},"description":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"duration":{"type":"string|int|()","comment":""},"allowedGrades":{"type":"(F|D|C|B|A|())[]","comment":""},"professors":{"id":{"type":"string|int","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"specializations":{"type":"string[]|()","comment":""},"gradesAssigned":{"type":"(F|D|C|B|A|())[]","comment":""},"department":{"departmentName":{"type":"string","comment":""},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"facultyCount":{"type":"int","comment":""},"specializations":{"type":"string[]","comment":""},"budget":{"type":"decimal","comment":""},"established":{"type":"string","comment":""}},"evaluationScores":{"type":"(decimal|float)[]","comment":""},"yearsOfExperience":{"type":"int","comment":""},"publications":{"type":"string[]|()","comment":""},"researchAreas":{"type":"(string|())[]","comment":""}},"prerequisites":{"type":"(string|())[]","comment":""},"objectives":{"type":"string[]","comment":""},"courseLocation":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string","comment":""},"zipCode":{"type":"int","comment":""},"latitude":{"type":"decimal|()","comment":""},"longitude":{"type":"int|()","comment":""}},"term":{"type":"string","comment":""},"maxCapacity":{"type":"int","comment":""},"courseStatus":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"courseTag":{"type":"string","comment":""}},"name":{"type":"string","comment":""},"accreditation":{"type":"string","comment":""},"collegeLocation":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string","comment":""},"zipCode":{"type":"int","comment":""},"latitude":{"type":"decimal|()","comment":""},"longitude":{"type":"int|()","comment":""}},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""}},"languages":{"type":"string[]|()","comment":""},"isInternational":{"type":"boolean","comment":""},"joinDate":{"type":"string|()","comment":""},"photo":{"type":"byte[]|()","comment":""},"socialMediaHandles":{"type":"(string|())[]|()","comment":""},"student_list":{"type":"record[]","comment":""}}},"output":{"id":{"type":"string|int|()","comment":""},"firstName":{"type":"string","comment":""},"middleName":{"type":"string|()","comment":""},"lastName":{"type":"string|()","comment":""},"gender":{"type":"OTHER|FEMALE|GREEN|MALE","comment":""},"age":{"type":"int|()","comment":""},"birthDate":{"type":"string","comment":""},"citizenship":{"type":"string","comment":""},"passport":{"type":"string|()","comment":""},"phones":{"type":"(string|int)[]","comment":""},"email":{"type":"string","comment":""},"backupEmails":{"type":"string[]","comment":""},"currentAddress":{"streetAddress":{"type":"string","comment":""},"cityName":{"type":"string|()","comment":""},"stateName":{"type":"string","comment":""},"countryName":{"type":"string","comment":""},"postalCode":{"type":"string","comment":""},"lat":{"type":"float|()","comment":""},"lng":{"type":"float|()","comment":""}},"homeAddress":{"streetAddress":{"type":"string","comment":""},"cityName":{"type":"string|()","comment":""},"stateName":{"type":"string","comment":""},"countryName":{"type":"string","comment":""},"postalCode":{"type":"string","comment":""},"lat":{"type":"float|()","comment":""},"lng":{"type":"float|()","comment":""}},"studentDocs":{"documentType":{"type":"string","comment":""},"number":{"type":"string","comment":""},"country":{"type":"string","comment":""},"validUntil":{"type":"string","comment":""}},"emergency":{"contactName":{"type":"string","comment":""},"contactDetails":{"type":"(string|int)[]","comment":""},"relation":{"type":"string","comment":""}},"healthRecord":{"blood":{"type":"string","comment":""},"allergyInfo":{"type":"(string|())[]","comment":""},"currentMedications":{"type":"string[]|()","comment":""},"insuranceStatus":{"type":"boolean","comment":""}},"finances":{"paymentPreference":{"type":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","comment":""},"accountId":{"type":"string|()","comment":""},"bank":{"type":"string|()","comment":""},"scholarship":{"type":"decimal|()","comment":""}},"education":{"school":{"type":"string","comment":""},"gradePoint":{"type":"float","comment":""},"specialization":{"type":"string","comment":""},"completionYear":{"type":"int","comment":""}},"abilities":{"skillName":{"type":"string","comment":""},"level":{"type":"int","comment":""},"experiencePeriod":{"type":"string|int","comment":""}},"enrolledCourses":{"courseId":{"type":"string|()","comment":""},"courseName":{"type":"string|()","comment":""},"code":{"type":"string","comment":""},"desc":{"type":"string|()","comment":""},"creditHours":{"type":"decimal|()","comment":""},"courseDuration":{"type":"string|int|()","comment":""},"possibleGrades":{"type":"(F|D|C|B|A)[]","comment":""},"professors":{"id":{"type":"string|int","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"specializations":{"type":"string[]|()","comment":""},"gradesAssigned":{"type":"(F|D|C|B|A|())[]","comment":""},"department":{"departmentName":{"type":"string","comment":""},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"facultyCount":{"type":"int","comment":""},"specializations":{"type":"string[]","comment":""},"budget":{"type":"decimal","comment":""},"established":{"type":"string","comment":""}},"evaluationScores":{"type":"(decimal|float)[]","comment":""},"yearsOfExperience":{"type":"int","comment":""},"publications":{"type":"string[]|()","comment":""},"researchAreas":{"type":"(string|())[]","comment":""}},"requirements":{"type":"string[]","comment":""},"learningGoals":{"type":"string[]","comment":""},"address":{"streetAddress":{"type":"string","comment":""},"cityName":{"type":"string|()","comment":""},"stateName":{"type":"string","comment":""},"countryName":{"type":"string","comment":""},"postalCode":{"type":"string","comment":""},"lat":{"type":"float|()","comment":""},"lng":{"type":"float|()","comment":""}}},"spokenLanguages":{"type":"string[]","comment":""},"foreignStudent":{"type":"boolean","comment":""},"profilePicture":{"type":"byte[]|()","comment":""},"socialMedia":{"type":"string[]","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"optional":true,"typeName":"string|int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"middleName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"middleName","nullable":true},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"gender":{"optional":false,"typeName":"OTHER|FEMALE|GREEN|MALE","type":"enum","typeInstance":"gender","members":{"OTHER":{"typeName":"OTHER","type":"OTHER","typeInstance":"OTHER","nullable":false,"optional":false},"FEMALE":{"typeName":"FEMALE","type":"FEMALE","typeInstance":"FEMALE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"MALE":{"typeName":"MALE","type":"MALE","typeInstance":"MALE","nullable":false,"optional":false}},"nullable":false},"age":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"age","nullable":true},"dateOfBirth":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"dateOfBirth","nullable":true},"nationality":{"typeName":"string","type":"string","typeInstance":"nationality","nullable":false,"optional":true},"passportNumber":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"passportNumber","nullable":true},"status":{"optional":false,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"contactNumbers":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contactNumbers","nullableArray":false,"nullable":false},"primaryEmail":{"typeName":"string","type":"string","typeInstance":"primaryEmail","nullable":false,"optional":false},"alternateEmails":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"alternateEmails","nullableArray":true,"nullable":false},"residentialAddress":{"nullable":false,"optional":false,"type":"record","typeInstance":"residentialAddress","typeName":"record","fields":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"zipCode":{"typeName":"int","type":"int","typeInstance":"zipCode","nullable":false,"optional":false},"latitude":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"latitude","nullable":true},"longitude":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"longitude","nullable":true}}},"permanentAddress":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"permanentAddress","members":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"zipCode":{"typeName":"int","type":"int","typeInstance":"zipCode","nullable":false,"optional":false},"latitude":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"latitude","nullable":true},"longitude":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"longitude","nullable":true}},"nullable":true},"documents":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"documents","members":{"documentType":{"typeName":"string","type":"string","typeInstance":"documentType","nullable":false,"optional":false},"documentNumber":{"typeName":"string","type":"string","typeInstance":"documentNumber","nullable":false,"optional":false},"issuingCountry":{"typeName":"string","type":"string","typeInstance":"issuingCountry","nullable":false,"optional":false},"expiryDate":{"typeName":"string","type":"string","typeInstance":"expiryDate","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"emergencyContact":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"emergencyContact","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"contacts":{"optional":false,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contacts","nullableArray":false,"nullable":false},"relationship":{"typeName":"string","type":"string","typeInstance":"relationship","nullable":false,"optional":false}},"nullable":true},"healthInfo":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"healthInfo","members":{"bloodGroup":{"typeName":"string","type":"string","typeInstance":"bloodGroup","nullable":false,"optional":false},"allergies":{"typeName":"string[]","type":"string[]","typeInstance":"allergies","nullable":false,"optional":false},"medications":{"typeName":"string[]","type":"string[]","typeInstance":"medications","nullable":false,"optional":false},"isInsured":{"typeName":"boolean","type":"boolean","typeInstance":"isInsured","nullable":false,"optional":false}},"nullable":true},"financialInfo":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"financialInfo","members":{"preferredPayment":{"optional":false,"typeName":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","type":"enum","typeInstance":"preferredPayment","members":{"CASH":{"typeName":"CASH","type":"CASH","typeInstance":"CASH","nullable":false,"optional":false},"BANK_TRANSFER":{"typeName":"BANK_TRANSFER","type":"BANK_TRANSFER","typeInstance":"BANK_TRANSFER","nullable":false,"optional":false},"DEBIT_CARD":{"typeName":"DEBIT_CARD","type":"DEBIT_CARD","typeInstance":"DEBIT_CARD","nullable":false,"optional":false},"CREDIT_CARD":{"typeName":"CREDIT_CARD","type":"CREDIT_CARD","typeInstance":"CREDIT_CARD","nullable":false,"optional":false}},"nullable":false},"accountNumber":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"accountNumber","nullable":true},"bankName":{"typeName":"string","type":"string","typeInstance":"bankName","nullable":false,"optional":true},"scholarshipAmount":{"typeName":"decimal","type":"decimal","typeInstance":"scholarshipAmount","nullable":false,"optional":true}},"nullable":true},"academicHistory":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"academicHistory","members":{"institutionName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"institutionName","nullable":true},"gpa":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"gpa","nullable":true},"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":true},"graduationYear":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"graduationYear","nullable":true}},"nullableArray":false,"nullable":true},"skills":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"skills","members":{"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"proficiencyLevel":{"typeName":"int","type":"int","typeInstance":"proficiencyLevel","nullable":false,"optional":true},"experience":{"optional":true,"typeName":"string|int|()","type":"union","typeInstance":"experience","nullable":true}},"nullableArray":false,"nullable":true},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"courseCode":{"typeName":"string","type":"string","typeInstance":"courseCode","nullable":false,"optional":false},"description":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"description","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"duration":{"optional":false,"typeName":"string|int|()","type":"union","typeInstance":"duration","nullable":true},"allowedGrades":{"optional":true,"typeName":"(F|D|C|B|A|())[]","type":"union[]","typeInstance":"allowedGrades","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"professors":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professors","members":{"id":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"id","nullable":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"specializations":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"specializations","nullableArray":false,"nullable":true},"gradesAssigned":{"optional":true,"typeName":"(F|D|C|B|A|())[]","type":"union[]","typeInstance":"gradesAssigned","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false},"status":{"optional":true,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"facultyCount":{"typeName":"int","type":"int","typeInstance":"facultyCount","nullable":false,"optional":false},"specializations":{"typeName":"string[]","type":"string[]","typeInstance":"specializations","nullable":false,"optional":false},"budget":{"typeName":"decimal","type":"decimal","typeInstance":"budget","nullable":false,"optional":false},"established":{"typeName":"string","type":"string","typeInstance":"established","nullable":false,"optional":false}},"nullable":false},"evaluationScores":{"optional":true,"typeName":"(decimal|float)[]","type":"union[]","typeInstance":"evaluationScores","nullableArray":false,"nullable":false},"yearsOfExperience":{"typeName":"int","type":"int","typeInstance":"yearsOfExperience","nullable":false,"optional":true},"publications":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"publications","nullableArray":false,"nullable":true},"researchAreas":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"researchAreas","nullableArray":true,"nullable":false}},"nullableArray":false,"nullable":true},"prerequisites":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"prerequisites","nullableArray":true,"nullable":false},"objectives":{"typeName":"string[]","type":"string[]","typeInstance":"objectives","nullable":false,"optional":true},"courseLocation":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"courseLocation","members":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"zipCode":{"typeName":"int","type":"int","typeInstance":"zipCode","nullable":false,"optional":false},"latitude":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"latitude","nullable":true},"longitude":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"longitude","nullable":true}},"nullable":true},"term":{"typeName":"string","type":"string","typeInstance":"term","nullable":false,"optional":false},"maxCapacity":{"typeName":"int","type":"int","typeInstance":"maxCapacity","nullable":false,"optional":false},"courseStatus":{"optional":true,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"courseStatus","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"courseTag":{"typeName":"string","type":"string","typeInstance":"courseTag","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"accreditation":{"typeName":"string","type":"string","typeInstance":"accreditation","nullable":false,"optional":false},"collegeLocation":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"collegeLocation","members":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"zipCode":{"typeName":"int","type":"int","typeInstance":"zipCode","nullable":false,"optional":false},"latitude":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"latitude","nullable":true},"longitude":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"longitude","nullable":true}},"nullable":true},"status":{"optional":false,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false}},"nullable":true},"languages":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"languages","nullableArray":false,"nullable":true},"isInternational":{"typeName":"boolean","type":"boolean","typeInstance":"isInternational","nullable":false,"optional":true},"joinDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"joinDate","nullable":true},"photo":{"optional":true,"typeName":"byte[]|()","type":"union[]|()","typeInstance":"photo","nullableArray":false,"nullable":true},"socialMediaHandles":{"optional":true,"typeName":"(string|())[]|()","type":"union[]|()","typeInstance":"socialMediaHandles","nullableArray":true,"nullable":true},"student_list":{"typeName":"record[]","type":"record[]","typeInstance":"student_list","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"optional":false,"typeName":"string|int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"middleName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"middleName","nullable":true},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"gender":{"optional":false,"typeName":"OTHER|FEMALE|GREEN|MALE","type":"enum","typeInstance":"gender","members":{"OTHER":{"typeName":"OTHER","type":"OTHER","typeInstance":"OTHER","nullable":false,"optional":false},"FEMALE":{"typeName":"FEMALE","type":"FEMALE","typeInstance":"FEMALE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"MALE":{"typeName":"MALE","type":"MALE","typeInstance":"MALE","nullable":false,"optional":false}},"nullable":false},"age":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"birthDate":{"typeName":"string","type":"string","typeInstance":"birthDate","nullable":false,"optional":false},"citizenship":{"typeName":"string","type":"string","typeInstance":"citizenship","nullable":false,"optional":false},"passport":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"passport","nullable":true},"phones":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"phones","nullableArray":false,"nullable":false},"email":{"typeName":"string","type":"string","typeInstance":"email","nullable":false,"optional":false},"backupEmails":{"typeName":"string[]","type":"string[]","typeInstance":"backupEmails","nullable":false,"optional":true},"currentAddress":{"nullable":false,"optional":false,"type":"record","typeInstance":"currentAddress","typeName":"record","fields":{"streetAddress":{"typeName":"string","type":"string","typeInstance":"streetAddress","nullable":false,"optional":false},"cityName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"cityName","nullable":true},"stateName":{"typeName":"string","type":"string","typeInstance":"stateName","nullable":false,"optional":false},"countryName":{"typeName":"string","type":"string","typeInstance":"countryName","nullable":false,"optional":false},"postalCode":{"typeName":"string","type":"string","typeInstance":"postalCode","nullable":false,"optional":false},"lat":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lat","nullable":true},"lng":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lng","nullable":true}}},"homeAddress":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"homeAddress","members":{"streetAddress":{"typeName":"string","type":"string","typeInstance":"streetAddress","nullable":false,"optional":false},"cityName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"cityName","nullable":true},"stateName":{"typeName":"string","type":"string","typeInstance":"stateName","nullable":false,"optional":false},"countryName":{"typeName":"string","type":"string","typeInstance":"countryName","nullable":false,"optional":false},"postalCode":{"typeName":"string","type":"string","typeInstance":"postalCode","nullable":false,"optional":false},"lat":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lat","nullable":true},"lng":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lng","nullable":true}},"nullable":true},"studentDocs":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"studentDocs","members":{"documentType":{"typeName":"string","type":"string","typeInstance":"documentType","nullable":false,"optional":false},"number":{"typeName":"string","type":"string","typeInstance":"number","nullable":false,"optional":false},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"validUntil":{"typeName":"string","type":"string","typeInstance":"validUntil","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"emergency":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"emergency","members":{"contactName":{"typeName":"string","type":"string","typeInstance":"contactName","nullable":false,"optional":false},"contactDetails":{"optional":false,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contactDetails","nullableArray":false,"nullable":false},"relation":{"typeName":"string","type":"string","typeInstance":"relation","nullable":false,"optional":false}},"nullable":true},"healthRecord":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"healthRecord","members":{"blood":{"typeName":"string","type":"string","typeInstance":"blood","nullable":false,"optional":false},"allergyInfo":{"optional":false,"typeName":"(string|())[]","type":"union[]","typeInstance":"allergyInfo","nullableArray":true,"nullable":false},"currentMedications":{"optional":false,"typeName":"string[]|()","type":"union[]|()","typeInstance":"currentMedications","nullableArray":false,"nullable":true},"insuranceStatus":{"typeName":"boolean","type":"boolean","typeInstance":"insuranceStatus","nullable":false,"optional":false}},"nullable":true},"finances":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"finances","members":{"paymentPreference":{"optional":false,"typeName":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","type":"enum","typeInstance":"paymentPreference","members":{"CASH":{"typeName":"CASH","type":"CASH","typeInstance":"CASH","nullable":false,"optional":false},"BANK_TRANSFER":{"typeName":"BANK_TRANSFER","type":"BANK_TRANSFER","typeInstance":"BANK_TRANSFER","nullable":false,"optional":false},"DEBIT_CARD":{"typeName":"DEBIT_CARD","type":"DEBIT_CARD","typeInstance":"DEBIT_CARD","nullable":false,"optional":false},"CREDIT_CARD":{"typeName":"CREDIT_CARD","type":"CREDIT_CARD","typeInstance":"CREDIT_CARD","nullable":false,"optional":false}},"nullable":false},"accountId":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"accountId","nullable":true},"bank":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"bank","nullable":true},"scholarship":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"scholarship","nullable":true}},"nullable":true},"education":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"education","members":{"school":{"typeName":"string","type":"string","typeInstance":"school","nullable":false,"optional":false},"gradePoint":{"typeName":"float","type":"float","typeInstance":"gradePoint","nullable":false,"optional":false},"specialization":{"typeName":"string","type":"string","typeInstance":"specialization","nullable":false,"optional":false},"completionYear":{"typeName":"int","type":"int","typeInstance":"completionYear","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"abilities":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"abilities","members":{"skillName":{"typeName":"string","type":"string","typeInstance":"skillName","nullable":false,"optional":false},"level":{"typeName":"int","type":"int","typeInstance":"level","nullable":false,"optional":false},"experiencePeriod":{"optional":false,"typeName":"string|int","type":"union","typeInstance":"experiencePeriod","nullable":false}},"nullableArray":false,"nullable":true},"enrolledCourses":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"enrolledCourses","members":{"courseId":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"courseId","nullable":true},"courseName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"courseName","nullable":true},"code":{"typeName":"string","type":"string","typeInstance":"code","nullable":false,"optional":false},"desc":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"desc","nullable":true},"creditHours":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"creditHours","nullable":true},"courseDuration":{"optional":true,"typeName":"string|int|()","type":"union","typeInstance":"courseDuration","nullable":true},"possibleGrades":{"optional":true,"typeName":"(F|D|C|B|A)[]","type":"enum[]","typeInstance":"possibleGrades","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"professors":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professors","members":{"id":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"id","nullable":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"specializations":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"specializations","nullableArray":false,"nullable":true},"gradesAssigned":{"optional":true,"typeName":"(F|D|C|B|A|())[]","type":"union[]","typeInstance":"gradesAssigned","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false},"status":{"optional":true,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"facultyCount":{"typeName":"int","type":"int","typeInstance":"facultyCount","nullable":false,"optional":false},"specializations":{"typeName":"string[]","type":"string[]","typeInstance":"specializations","nullable":false,"optional":false},"budget":{"typeName":"decimal","type":"decimal","typeInstance":"budget","nullable":false,"optional":false},"established":{"typeName":"string","type":"string","typeInstance":"established","nullable":false,"optional":false}},"nullable":false},"evaluationScores":{"optional":true,"typeName":"(decimal|float)[]","type":"union[]","typeInstance":"evaluationScores","nullableArray":false,"nullable":false},"yearsOfExperience":{"typeName":"int","type":"int","typeInstance":"yearsOfExperience","nullable":false,"optional":true},"publications":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"publications","nullableArray":false,"nullable":true},"researchAreas":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"researchAreas","nullableArray":true,"nullable":false}},"nullableArray":false,"nullable":true},"requirements":{"typeName":"string[]","type":"string[]","typeInstance":"requirements","nullable":false,"optional":true},"learningGoals":{"typeName":"string[]","type":"string[]","typeInstance":"learningGoals","nullable":false,"optional":true},"address":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"address","members":{"streetAddress":{"typeName":"string","type":"string","typeInstance":"streetAddress","nullable":false,"optional":false},"cityName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"cityName","nullable":true},"stateName":{"typeName":"string","type":"string","typeInstance":"stateName","nullable":false,"optional":false},"countryName":{"typeName":"string","type":"string","typeInstance":"countryName","nullable":false,"optional":false},"postalCode":{"typeName":"string","type":"string","typeInstance":"postalCode","nullable":false,"optional":false},"lat":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lat","nullable":true},"lng":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lng","nullable":true}},"nullable":true}},"nullableArray":false,"nullable":true},"spokenLanguages":{"typeName":"string[]","type":"string[]","typeInstance":"spokenLanguages","nullable":false,"optional":true},"foreignStudent":{"typeName":"boolean","type":"boolean","typeInstance":"foreignStudent","nullable":false,"optional":true},"profilePicture":{"optional":true,"typeName":"byte[]|()","type":"union[]|()","typeInstance":"profilePicture","nullableArray":false,"nullable":true},"socialMedia":{"typeName":"string[]","type":"string[]","typeInstance":"socialMedia","nullable":false,"optional":true}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/expected.json deleted file mode 100644 index 2b1adabe4f6..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"person?.id","firstName":"person.firstName","middleName":"person?.middleName","lastName":"person?.lastName","gender":"person.gender","age":"check int:fromString(person?.age?:\"\")","birthDate":"person.dateOfBirth?:\"\"","citizenship":"person.nationality?:\"\"","passport":"(person?.passportNumber).toString()","phones":"person.contactNumbers","email":"person.primaryEmail","backupEmails":"check (person.alternateEmails).cloneWithType()","currentAddress":"{\n streetAddress: person.residentialAddress.street?:\"\",\ncityName: person.residentialAddress?.city,\nstateName: person.residentialAddress.state?:\"\",\ncountryName: person.residentialAddress.country,\npostalCode: (person.residentialAddress.zipCode).toString(),\nlat: check (person.residentialAddress?.latitude).ensureType(),\nlng: check (person.residentialAddress?.longitude).ensureType(),\nlocationType: person.residentialAddress.addressType?:\"\",\nverified: person.residentialAddress.isVerified?:false,\nupdatedOn: person.residentialAddress.lastUpdated?:\"\",\nlandmarks: person.residentialAddress.nearbyLandmarks?:[],\nmain: person.residentialAddress.isPrimary?:false,\ntimezone: person.residentialAddress.timeZone?:\"\" \n}","homeAddress":"{\n streetAddress: person?.permanentAddress?.street?:\"\",\ncityName: person?.permanentAddress?.city,\nstateName: person?.permanentAddress?.state?:\"\",\ncountryName: person?.permanentAddress?.country?:\"\",\npostalCode: (person?.permanentAddress?.zipCode?:0).toString(),\nlat: check (person?.permanentAddress?.latitude).ensureType(),\nlng: check (person?.permanentAddress?.longitude).ensureType(),\nlocationType: person?.permanentAddress?.addressType?:\"\",\nverified: person?.permanentAddress?.isVerified?:false,\nupdatedOn: person?.permanentAddress?.lastUpdated?:\"\",\nlandmarks: person?.permanentAddress?.nearbyLandmarks?:[],\nmain: person?.permanentAddress?.isPrimary?:false,\ntimezone: person?.permanentAddress?.timeZone?:\"\" \n}","studentDocs":"from var documentsItem in person?.documents ?: []\n select {\n documentType: documentsItem.documentType,\nnumber: documentsItem.documentNumber,\ncountry: documentsItem.issuingCountry,\nvalidUntil: documentsItem.expiryDate,\nissueDate: documentsItem.issueDate?:\"\",\nverified: documentsItem.isVerified?:false,\nverifiedBy: documentsItem.verificationSource?:\"\",\ncomments: documentsItem.remarks?:\"\"\n}","emergency":"{\n contactName: person?.emergencyContact?.name?:\"\",\ncontactDetails: person?.emergencyContact?.contacts?:[],\nrelation: person?.emergencyContact?.relationship?:\"\",\ncontactAddress: person?.emergencyContact?.address?:\"\",\nprimaryContact: person?.emergencyContact?.isPrimary?:false,\nlastContacted: person?.emergencyContact?.lastContactDate?:\"\",\ncontactPersonId: person?.emergencyContact?.contactId?:\"\" \n}","healthRecord":"{\n blood: person?.healthInfo?.bloodGroup?:\"\",\nallergyInfo: person?.healthInfo?.allergies?:[],\ncurrentMedications: person?.healthInfo?.medications,\ninsuranceStatus: person?.healthInfo?.isInsured?:false,\ninsurer: person?.healthInfo?.insuranceProvider?:\"\",\npolicyId: person?.healthInfo?.policyNumber?:\"\",\nconditions: person?.healthInfo?.medicalConditions?:[],\ncheckupDate: person?.healthInfo?.lastCheckupDate?:\"\",\ndoctorName: person?.healthInfo?.primaryPhysician?:\"\",\ndisabilityStatus: person?.healthInfo?.hasDisability?:false,\nspecialNeeds: person?.healthInfo?.accommodationNeeds?:[] \n}","finances":"{\n paymentPreference: person?.financialInfo?.preferredPayment?:\"CASH\",\naccountId: person?.financialInfo?.accountNumber,\nbank: person?.financialInfo?.bankName,\nscholarship: person?.financialInfo?.scholarshipAmount,\ntuition: person?.financialInfo?.tuitionFee?:0.0,\noutstandingAmount: person?.financialInfo?.outstandingBalance?:0.0,\nloanTaken: person?.financialInfo?.hasLoan?:false,\nloanProvider: person?.financialInfo?.loanProvider?:\"\",\nmonthlyPaymentAmount: person?.financialInfo?.monthlyPayment?:0.0,\npayments: person?.financialInfo?.paymentHistory?:[],\nmaxCredit: person?.financialInfo?.creditLimit?:0.0,\npaymentStanding: person?.financialInfo?.paymentStatus?:\"SUSPENDED\" \n}","education":"from var academicHistoryItem in person?.academicHistory ?: []\n select {\n school: academicHistoryItem?.institutionName?:\"\",\ngradePoint: academicHistoryItem.gpa?:0.0,\nspecialization: academicHistoryItem.major?:\"\",\ncompletionYear: academicHistoryItem.graduationYear?:0,\ncompletedCourses: academicHistoryItem.courses?:[],\ncourseGrades: academicHistoryItem.grades?:[],\ndegree: academicHistoryItem.degreeType?:\"\",\ncertificate: academicHistoryItem.certificationType?:\"\",\nverificationStatus: academicHistoryItem.transcriptVerified?:\"\",\nacademicLevel: academicHistoryItem.academicStanding?:\"\",\nachievements: academicHistoryItem.honors?:[],\nextracurriculars: academicHistoryItem.activities?:[]\n}","abilities":"from var skillsItem in person?.skills ?: []\n select {\n skillName: skillsItem.name?:\"\",\nlevel: skillsItem.proficiencyLevel?:0,\nexperiencePeriod: skillsItem?.experience?:\"\",\ncertification: skillsItem.certificationName?:\"\",\nissuer: skillsItem.issuingOrganization?:\"\",\nacquisitionDate: skillsItem.dateAcquired?:\"\",\nexpirationDate: skillsItem.expiryDate?:\"\",\nverified: skillsItem.isVerified?:false,\nprojects: skillsItem.relatedProjects?:[],\ntestimonials: skillsItem.endorsements?:[]\n}","enrolledCourses":"from var coursesItem in person?.college?.courses ?: []\n select {\n courseId: coursesItem?.id,\ncourseName: coursesItem?.name,\ncode: coursesItem.courseCode,\ndesc: coursesItem?.description,\ncreditHours: coursesItem.credits,\ncourseDuration: coursesItem.duration,\npossibleGrades: check (coursesItem.allowedGrades).cloneWithType(),\nprofessors: from var professorsItem in coursesItem?.professors ?: []\n select {\n id: professorsItem.id,\nfirstName: professorsItem.firstName,\nlastName: professorsItem?.lastName,\nspecializations: professorsItem?.specializations,\ngradesAssigned: professorsItem.gradesAssigned,\ndepartment: {\n departmentName: professorsItem.department?.departmentName?:\"\",\nstatus: professorsItem.department?.status,\nfacultyCount: professorsItem.department?.facultyCount?:0,\nspecializations: professorsItem.department?.specializations?:[],\nbudget: professorsItem.department?.budget?:0.0,\nestablished: professorsItem.department?.established?:\"\",\nheadOfDepartment: professorsItem.department?.headOfDepartment,\nprograms: professorsItem.department?.programs,\nbuildingLocation: professorsItem.department?.buildingLocation,\ndepartmentCode: professorsItem.department?.departmentCode,\nstudentCount: professorsItem.department?.studentCount,\nresearchFocus: professorsItem.department?.researchFocus,\nwebsite: professorsItem.department?.website \n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/mapping.json deleted file mode 100644 index 59a6dac96b4..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"id":{"operation":"DIRECT","targetType":"string|int|()","parameters":["person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["person.firstName"]},"middleName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.middleName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.lastName"]},"gender":{"operation":"DIRECT","targetType":"OTHER|FEMALE|GREEN|MALE","parameters":["person.gender"]},"age":{"operation":"DIRECT","targetType":"int|()","parameters":["person.age"]},"birthDate":{"operation":"DIRECT","targetType":"string","parameters":["person.dateOfBirth"]},"citizenship":{"operation":"DIRECT","targetType":"string","parameters":["person.nationality"]},"passport":{"operation":"DIRECT","targetType":"string|()","parameters":["person.passportNumber"]},"phones":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["person.contactNumbers"]},"email":{"operation":"DIRECT","targetType":"string","parameters":["person.primaryEmail"]},"backupEmails":{"operation":"DIRECT","targetType":"string[]","parameters":["person.alternateEmails"]},"currentAddress":{"streetAddress":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.street"]},"cityName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.residentialAddress.city"]},"stateName":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.state"]},"countryName":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.country"]},"postalCode":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.zipCode"]},"lat":{"operation":"DIRECT","targetType":"float|()","parameters":["person.residentialAddress.latitude"]},"lng":{"operation":"DIRECT","targetType":"float|()","parameters":["person.residentialAddress.longitude"]},"locationType":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.addressType"]},"verified":{"operation":"DIRECT","targetType":"boolean","parameters":["person.residentialAddress.isVerified"]},"updatedOn":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.lastUpdated"]},"landmarks":{"operation":"DIRECT","targetType":"string[]","parameters":["person.residentialAddress.nearbyLandmarks"]},"main":{"operation":"DIRECT","targetType":"boolean","parameters":["person.residentialAddress.isPrimary"]},"timezone":{"operation":"DIRECT","targetType":"string","parameters":["person.residentialAddress.timeZone"]}},"homeAddress":{"streetAddress":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.street"]},"cityName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.permanentAddress.city"]},"stateName":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.state"]},"countryName":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.country"]},"postalCode":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.zipCode"]},"lat":{"operation":"DIRECT","targetType":"float|()","parameters":["person.permanentAddress.latitude"]},"lng":{"operation":"DIRECT","targetType":"float|()","parameters":["person.permanentAddress.longitude"]},"locationType":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.addressType"]},"verified":{"operation":"DIRECT","targetType":"boolean","parameters":["person.permanentAddress.isVerified"]},"updatedOn":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.lastUpdated"]},"landmarks":{"operation":"DIRECT","targetType":"string[]","parameters":["person.permanentAddress.nearbyLandmarks"]},"main":{"operation":"DIRECT","targetType":"boolean","parameters":["person.permanentAddress.isPrimary"]},"timezone":{"operation":"DIRECT","targetType":"string","parameters":["person.permanentAddress.timeZone"]}},"studentDocs":{"documentType":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.documentType"]},"number":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.documentNumber"]},"country":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.issuingCountry"]},"validUntil":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.expiryDate"]},"issueDate":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.issueDate"]},"verified":{"operation":"DIRECT","targetType":"boolean","parameters":["person.documents.isVerified"]},"verifiedBy":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.verificationSource"]},"comments":{"operation":"DIRECT","targetType":"string","parameters":["person.documents.remarks"]}},"emergency":{"contactName":{"operation":"DIRECT","targetType":"string","parameters":["person.emergencyContact.name"]},"contactDetails":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["person.emergencyContact.contacts"]},"relation":{"operation":"DIRECT","targetType":"string","parameters":["person.emergencyContact.relationship"]},"contactAddress":{"operation":"DIRECT","targetType":"string","parameters":["person.emergencyContact.address"]},"primaryContact":{"operation":"DIRECT","targetType":"boolean","parameters":["person.emergencyContact.isPrimary"]},"lastContacted":{"operation":"DIRECT","targetType":"string","parameters":["person.emergencyContact.lastContactDate"]},"contactPersonId":{"operation":"DIRECT","targetType":"string|int","parameters":["person.emergencyContact.contactId"]}},"healthRecord":{"blood":{"operation":"DIRECT","targetType":"string","parameters":["person.healthInfo.bloodGroup"]},"allergyInfo":{"operation":"DIRECT","targetType":"(string|())[]","parameters":["person.healthInfo.allergies"]},"currentMedications":{"operation":"DIRECT","targetType":"string[]|()","parameters":["person.healthInfo.medications"]},"insuranceStatus":{"operation":"DIRECT","targetType":"boolean","parameters":["person.healthInfo.isInsured"]},"insurer":{"operation":"DIRECT","targetType":"string","parameters":["person.healthInfo.insuranceProvider"]},"policyId":{"operation":"DIRECT","targetType":"string","parameters":["person.healthInfo.policyNumber"]},"conditions":{"operation":"DIRECT","targetType":"string[]","parameters":["person.healthInfo.medicalConditions"]},"checkupDate":{"operation":"DIRECT","targetType":"string","parameters":["person.healthInfo.lastCheckupDate"]},"doctorName":{"operation":"DIRECT","targetType":"string","parameters":["person.healthInfo.primaryPhysician"]},"disabilityStatus":{"operation":"DIRECT","targetType":"boolean","parameters":["person.healthInfo.hasDisability"]},"specialNeeds":{"operation":"DIRECT","targetType":"string[]","parameters":["person.healthInfo.accommodationNeeds"]}},"finances":{"paymentPreference":{"operation":"DIRECT","targetType":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","parameters":["person.financialInfo.preferredPayment"]},"accountId":{"operation":"DIRECT","targetType":"string|()","parameters":["person.financialInfo.accountNumber"]},"bank":{"operation":"DIRECT","targetType":"string|()","parameters":["person.financialInfo.bankName"]},"scholarship":{"operation":"DIRECT","targetType":"decimal|()","parameters":["person.financialInfo.scholarshipAmount"]},"tuition":{"operation":"DIRECT","targetType":"decimal","parameters":["person.financialInfo.tuitionFee"]},"outstandingAmount":{"operation":"DIRECT","targetType":"decimal","parameters":["person.financialInfo.outstandingBalance"]},"loanTaken":{"operation":"DIRECT","targetType":"boolean","parameters":["person.financialInfo.hasLoan"]},"loanProvider":{"operation":"DIRECT","targetType":"string","parameters":["person.financialInfo.loanProvider"]},"monthlyPaymentAmount":{"operation":"DIRECT","targetType":"decimal","parameters":["person.financialInfo.monthlyPayment"]},"payments":{"operation":"DIRECT","targetType":"string[]","parameters":["person.financialInfo.paymentHistory"]},"maxCredit":{"operation":"DIRECT","targetType":"decimal","parameters":["person.financialInfo.creditLimit"]},"paymentStanding":{"operation":"DIRECT","targetType":"SUSPENDED|PENDING|INACTIVE|ACTIVE","parameters":["person.financialInfo.paymentStatus"]}},"education":{"school":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.institutionName"]},"gradePoint":{"operation":"DIRECT","targetType":"float","parameters":["person.academicHistory.gpa"]},"specialization":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.major"]},"completionYear":{"operation":"DIRECT","targetType":"int","parameters":["person.academicHistory.graduationYear"]},"completedCourses":{"operation":"DIRECT","targetType":"string[]","parameters":["person.academicHistory.courses"]},"courseGrades":{"operation":"DIRECT","targetType":"(F|D|C|B|A)[]","parameters":["person.academicHistory.grades"]},"degree":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.degreeType"]},"certificate":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.certificationType"]},"verificationStatus":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.transcriptVerified"]},"academicLevel":{"operation":"DIRECT","targetType":"string","parameters":["person.academicHistory.academicStanding"]},"achievements":{"operation":"DIRECT","targetType":"string[]","parameters":["person.academicHistory.honors"]},"extracurriculars":{"operation":"DIRECT","targetType":"string[]","parameters":["person.academicHistory.activities"]}},"abilities":{"skillName":{"operation":"DIRECT","targetType":"string","parameters":["person.skills.name"]},"level":{"operation":"DIRECT","targetType":"int","parameters":["person.skills.proficiencyLevel"]},"experiencePeriod":{"operation":"DIRECT","targetType":"string|int","parameters":["person.skills.experience"]},"certification":{"operation":"DIRECT","targetType":"string","parameters":["person.skills.certificationName"]},"issuer":{"operation":"DIRECT","targetType":"string","parameters":["person.skills.issuingOrganization"]},"acquisitionDate":{"operation":"DIRECT","targetType":"string","parameters":["person.skills.dateAcquired"]},"expirationDate":{"operation":"DIRECT","targetType":"string","parameters":["person.skills.expiryDate"]},"verified":{"operation":"DIRECT","targetType":"boolean","parameters":["person.skills.isVerified"]},"projects":{"operation":"DIRECT","targetType":"string[]","parameters":["person.skills.relatedProjects"]},"testimonials":{"operation":"DIRECT","targetType":"string[]","parameters":["person.skills.endorsements"]}},"enrolledCourses":{"courseId":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.id"]},"courseName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.name"]},"code":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.courseCode"]},"desc":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.description"]},"creditHours":{"operation":"DIRECT","targetType":"decimal|()","parameters":["person.college.courses.credits"]},"courseDuration":{"operation":"DIRECT","targetType":"string|int|()","parameters":["person.college.courses.duration"]},"possibleGrades":{"operation":"DIRECT","targetType":"(F|D|C|B|A)[]","parameters":["person.college.courses.allowedGrades"]},"professors":{"id":{"operation":"DIRECT","targetType":"string|int","parameters":["person.college.courses.professors.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["person.college.courses.professors.lastName"]},"specializations":{"operation":"DIRECT","targetType":"string[]|()","parameters":["person.college.courses.professors.specializations"]},"gradesAssigned":{"operation":"DIRECT","targetType":"(F|D|C|B|A|())[]","parameters":["person.college.courses.professors.gradesAssigned"]},"department":{"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.departmentName"]},"status":{"operation":"DIRECT","targetType":"SUSPENDED|PENDING|INACTIVE|ACTIVE","parameters":["person.college.courses.professors.department.status"]},"facultyCount":{"operation":"DIRECT","targetType":"int","parameters":["person.college.courses.professors.department.facultyCount"]},"specializations":{"operation":"DIRECT","targetType":"string[]","parameters":["person.college.courses.professors.department.specializations"]},"budget":{"operation":"DIRECT","targetType":"decimal","parameters":["person.college.courses.professors.department.budget"]},"established":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.established"]},"headOfDepartment":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.headOfDepartment"]},"programs":{"operation":"DIRECT","targetType":"string[]","parameters":["person.college.courses.professors.department.programs"]},"buildingLocation":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.buildingLocation"]},"departmentCode":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.departmentCode"]},"studentCount":{"operation":"DIRECT","targetType":"int","parameters":["person.college.courses.professors.department.studentCount"]},"researchFocus":{"operation":"DIRECT","targetType":"string[]","parameters":["person.college.courses.professors.department.researchFocus"]},"website":{"operation":"DIRECT","targetType":"string","parameters":["person.college.courses.professors.department.website"]}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/param_def.json deleted file mode 100644 index fb5c55a2b58..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_17_100_fields/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"person":{"id":{"type":"string|int|()","comment":""},"firstName":{"type":"string","comment":""},"middleName":{"type":"string|()","comment":""},"lastName":{"type":"string|()","comment":""},"gender":{"type":"OTHER|FEMALE|GREEN|MALE","comment":""},"age":{"type":"string|()","comment":""},"dateOfBirth":{"type":"string|()","comment":""},"nationality":{"type":"string","comment":""},"passportNumber":{"type":"int|()","comment":""},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"contactNumbers":{"type":"(string|int)[]","comment":""},"primaryEmail":{"type":"string","comment":""},"alternateEmails":{"type":"(string|())[]","comment":""},"residentialAddress":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string","comment":""},"zipCode":{"type":"int","comment":""},"latitude":{"type":"decimal|()","comment":""},"longitude":{"type":"int|()","comment":""},"addressType":{"type":"string","comment":""},"isVerified":{"type":"boolean","comment":""},"lastUpdated":{"type":"string","comment":""},"nearbyLandmarks":{"type":"string[]","comment":""},"isPrimary":{"type":"boolean","comment":""},"timeZone":{"type":"string","comment":""}},"permanentAddress":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string","comment":""},"zipCode":{"type":"int","comment":""},"latitude":{"type":"decimal|()","comment":""},"longitude":{"type":"int|()","comment":""},"addressType":{"type":"string","comment":""},"isVerified":{"type":"boolean","comment":""},"lastUpdated":{"type":"string","comment":""},"nearbyLandmarks":{"type":"string[]","comment":""},"isPrimary":{"type":"boolean","comment":""},"timeZone":{"type":"string","comment":""}},"documents":{"documentType":{"type":"string","comment":""},"documentNumber":{"type":"string","comment":""},"issuingCountry":{"type":"string","comment":""},"expiryDate":{"type":"string","comment":""},"issueDate":{"type":"string","comment":""},"isVerified":{"type":"boolean","comment":""},"verificationSource":{"type":"string","comment":""},"remarks":{"type":"string","comment":""}},"emergencyContact":{"name":{"type":"string","comment":""},"contacts":{"type":"(string|int)[]","comment":""},"relationship":{"type":"string","comment":""},"address":{"type":"string","comment":""},"isPrimary":{"type":"boolean","comment":""},"lastContactDate":{"type":"string","comment":""},"contactId":{"type":"string|int","comment":""}},"healthInfo":{"bloodGroup":{"type":"string","comment":""},"allergies":{"type":"string[]","comment":""},"medications":{"type":"string[]","comment":""},"isInsured":{"type":"boolean","comment":""},"insuranceProvider":{"type":"string","comment":""},"policyNumber":{"type":"string","comment":""},"medicalConditions":{"type":"string[]","comment":""},"lastCheckupDate":{"type":"string","comment":""},"primaryPhysician":{"type":"string","comment":""},"hasDisability":{"type":"boolean","comment":""},"accommodationNeeds":{"type":"string[]","comment":""}},"financialInfo":{"preferredPayment":{"type":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","comment":""},"accountNumber":{"type":"string|()","comment":""},"bankName":{"type":"string","comment":""},"scholarshipAmount":{"type":"decimal","comment":""},"tuitionFee":{"type":"decimal","comment":""},"outstandingBalance":{"type":"decimal","comment":""},"hasLoan":{"type":"boolean","comment":""},"loanProvider":{"type":"string","comment":""},"monthlyPayment":{"type":"decimal","comment":""},"paymentHistory":{"type":"string[]","comment":""},"creditLimit":{"type":"decimal","comment":""},"paymentStatus":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""}},"academicHistory":{"institutionName":{"type":"string|()","comment":""},"gpa":{"type":"float|()","comment":""},"major":{"type":"string","comment":""},"graduationYear":{"type":"int|()","comment":""},"courses":{"type":"string[]","comment":""},"grades":{"type":"(F|D|C|B|A)[]","comment":""},"degreeType":{"type":"string","comment":""},"certificationType":{"type":"string","comment":""},"transcriptVerified":{"type":"string","comment":""},"academicStanding":{"type":"string","comment":""},"honors":{"type":"string[]","comment":""},"activities":{"type":"string[]","comment":""}},"skills":{"name":{"type":"string|()","comment":""},"proficiencyLevel":{"type":"int","comment":""},"experience":{"type":"string|int|()","comment":""},"certificationName":{"type":"string","comment":""},"issuingOrganization":{"type":"string","comment":""},"dateAcquired":{"type":"string","comment":""},"expiryDate":{"type":"string","comment":""},"isVerified":{"type":"boolean","comment":""},"relatedProjects":{"type":"string[]","comment":""},"endorsements":{"type":"string[]","comment":""}},"college":{"courses":{"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"courseCode":{"type":"string","comment":""},"description":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"duration":{"type":"string|int|()","comment":""},"allowedGrades":{"type":"(F|D|C|B|A|())[]","comment":""},"professors":{"id":{"type":"string|int","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"specializations":{"type":"string[]|()","comment":""},"gradesAssigned":{"type":"(F|D|C|B|A|())[]","comment":""},"department":{"departmentName":{"type":"string","comment":""},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"facultyCount":{"type":"int","comment":""},"specializations":{"type":"string[]","comment":""},"budget":{"type":"decimal","comment":""},"established":{"type":"string","comment":""},"headOfDepartment":{"type":"string","comment":""},"programs":{"type":"string[]","comment":""},"buildingLocation":{"type":"string","comment":""},"departmentCode":{"type":"string","comment":""},"studentCount":{"type":"int","comment":""},"researchFocus":{"type":"string[]","comment":""},"website":{"type":"string","comment":""}},"evaluationScores":{"type":"(decimal|float)[]","comment":""},"yearsOfExperience":{"type":"int","comment":""},"publications":{"type":"string[]|()","comment":""},"researchAreas":{"type":"(string|())[]","comment":""},"officeHours":{"type":"string","comment":""},"officeLocation":{"type":"string","comment":""},"academicRank":{"type":"string","comment":""},"tenure":{"type":"string","comment":""},"previousPositions":{"companyName":{"type":"string","comment":""},"position":{"type":"string","comment":""},"startDate":{"type":"string","comment":""},"endDate":{"type":"string","comment":""},"responsibilities":{"type":"string","comment":""},"supervisorName":{"type":"string","comment":""},"supervisorContact":{"type":"string|int","comment":""},"isCurrentEmployer":{"type":"boolean","comment":""},"location":{"type":"string","comment":""},"employmentType":{"type":"string","comment":""},"salary":{"type":"decimal","comment":""}},"teachingCourses":{"type":"string[]","comment":""},"awards":{"type":"string[]","comment":""},"highestDegree":{"type":"string","comment":""},"contactInformation":{"type":"(string|int)[]","comment":""}}},"name":{"type":"string","comment":""},"accreditation":{"type":"string","comment":""},"collegeLocation":{"street":{"type":"string","comment":""},"city":{"type":"string|()","comment":""},"state":{"type":"string|()","comment":""},"country":{"type":"string","comment":""},"zipCode":{"type":"int","comment":""},"latitude":{"type":"decimal|()","comment":""},"longitude":{"type":"int|()","comment":""},"addressType":{"type":"string","comment":""},"isVerified":{"type":"boolean","comment":""},"lastUpdated":{"type":"string","comment":""},"nearbyLandmarks":{"type":"string[]","comment":""},"isPrimary":{"type":"boolean","comment":""},"timeZone":{"type":"string","comment":""}},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"establishedYear":{"type":"string","comment":""},"departments":{"type":"string[]","comment":""},"president":{"type":"string","comment":""},"website":{"type":"string","comment":""},"campuses":{"type":"string[]","comment":""},"studentPopulation":{"type":"int","comment":""},"facultyCount":{"type":"int","comment":""},"programs":{"type":"string[]","comment":""},"endowment":{"type":"decimal","comment":""},"mascot":{"type":"string","comment":""},"sportsTeams":{"type":"string[]","comment":""}},"languages":{"type":"string[]|()","comment":""},"isInternational":{"type":"boolean","comment":""},"joinDate":{"type":"string|()","comment":""},"photo":{"type":"byte[]|()","comment":""},"socialMediaHandles":{"type":"(string|())[]|()","comment":""},"maritalStatus":{"type":"string","comment":""},"religion":{"type":"string","comment":""},"ethnicity":{"type":"string","comment":""},"employmentHistory":{"companyName":{"type":"string","comment":""},"position":{"type":"string","comment":""},"startDate":{"type":"string","comment":""},"endDate":{"type":"string","comment":""},"responsibilities":{"type":"string","comment":""},"supervisorName":{"type":"string","comment":""},"supervisorContact":{"type":"string|int","comment":""},"isCurrentEmployer":{"type":"boolean","comment":""},"location":{"type":"string","comment":""},"employmentType":{"type":"string","comment":""},"salary":{"type":"decimal","comment":""}},"referralSource":{"type":"string","comment":""},"interests":{"type":"string[]","comment":""},"achievements":{"type":"string[]","comment":""},"isAlumni":{"type":"boolean","comment":""},"preferredName":{"type":"string","comment":""},"pronoun":{"type":"string","comment":""},"dietaryRestrictions":{"type":"string","comment":""},"registrationStatus":{"type":"string","comment":""},"student_list":{"type":"record[]","comment":""}}},"output":{"id":{"type":"string|int|()","comment":""},"firstName":{"type":"string","comment":""},"middleName":{"type":"string|()","comment":""},"lastName":{"type":"string|()","comment":""},"gender":{"type":"OTHER|FEMALE|GREEN|MALE","comment":""},"age":{"type":"int|()","comment":""},"birthDate":{"type":"string","comment":""},"citizenship":{"type":"string","comment":""},"passport":{"type":"string|()","comment":""},"phones":{"type":"(string|int)[]","comment":""},"email":{"type":"string","comment":""},"backupEmails":{"type":"string[]","comment":""},"currentAddress":{"streetAddress":{"type":"string","comment":""},"cityName":{"type":"string|()","comment":""},"stateName":{"type":"string","comment":""},"countryName":{"type":"string","comment":""},"postalCode":{"type":"string","comment":""},"lat":{"type":"float|()","comment":""},"lng":{"type":"float|()","comment":""},"locationType":{"type":"string","comment":""},"verified":{"type":"boolean","comment":""},"updatedOn":{"type":"string","comment":""},"landmarks":{"type":"string[]","comment":""},"main":{"type":"boolean","comment":""},"timezone":{"type":"string","comment":""}},"homeAddress":{"streetAddress":{"type":"string","comment":""},"cityName":{"type":"string|()","comment":""},"stateName":{"type":"string","comment":""},"countryName":{"type":"string","comment":""},"postalCode":{"type":"string","comment":""},"lat":{"type":"float|()","comment":""},"lng":{"type":"float|()","comment":""},"locationType":{"type":"string","comment":""},"verified":{"type":"boolean","comment":""},"updatedOn":{"type":"string","comment":""},"landmarks":{"type":"string[]","comment":""},"main":{"type":"boolean","comment":""},"timezone":{"type":"string","comment":""}},"studentDocs":{"documentType":{"type":"string","comment":""},"number":{"type":"string","comment":""},"country":{"type":"string","comment":""},"validUntil":{"type":"string","comment":""},"issueDate":{"type":"string","comment":""},"verified":{"type":"boolean","comment":""},"verifiedBy":{"type":"string","comment":""},"comments":{"type":"string","comment":""}},"emergency":{"contactName":{"type":"string","comment":""},"contactDetails":{"type":"(string|int)[]","comment":""},"relation":{"type":"string","comment":""},"contactAddress":{"type":"string","comment":""},"primaryContact":{"type":"boolean","comment":""},"lastContacted":{"type":"string","comment":""},"contactPersonId":{"type":"string|int","comment":""}},"healthRecord":{"blood":{"type":"string","comment":""},"allergyInfo":{"type":"(string|())[]","comment":""},"currentMedications":{"type":"string[]|()","comment":""},"insuranceStatus":{"type":"boolean","comment":""},"insurer":{"type":"string","comment":""},"policyId":{"type":"string","comment":""},"conditions":{"type":"string[]","comment":""},"checkupDate":{"type":"string","comment":""},"doctorName":{"type":"string","comment":""},"disabilityStatus":{"type":"boolean","comment":""},"specialNeeds":{"type":"string[]","comment":""}},"finances":{"paymentPreference":{"type":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","comment":""},"accountId":{"type":"string|()","comment":""},"bank":{"type":"string|()","comment":""},"scholarship":{"type":"decimal|()","comment":""},"tuition":{"type":"decimal","comment":""},"outstandingAmount":{"type":"decimal","comment":""},"loanTaken":{"type":"boolean","comment":""},"loanProvider":{"type":"string","comment":""},"monthlyPaymentAmount":{"type":"decimal","comment":""},"payments":{"type":"string[]","comment":""},"maxCredit":{"type":"decimal","comment":""},"paymentStanding":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""}},"education":{"school":{"type":"string","comment":""},"gradePoint":{"type":"float","comment":""},"specialization":{"type":"string","comment":""},"completionYear":{"type":"int","comment":""},"completedCourses":{"type":"string[]","comment":""},"courseGrades":{"type":"(F|D|C|B|A)[]","comment":""},"degree":{"type":"string","comment":""},"certificate":{"type":"string","comment":""},"verificationStatus":{"type":"string","comment":""},"academicLevel":{"type":"string","comment":""},"achievements":{"type":"string[]","comment":""},"extracurriculars":{"type":"string[]","comment":""}},"abilities":{"skillName":{"type":"string","comment":""},"level":{"type":"int","comment":""},"experiencePeriod":{"type":"string|int","comment":""},"certification":{"type":"string","comment":""},"issuer":{"type":"string","comment":""},"acquisitionDate":{"type":"string","comment":""},"expirationDate":{"type":"string","comment":""},"verified":{"type":"boolean","comment":""},"projects":{"type":"string[]","comment":""},"testimonials":{"type":"string[]","comment":""}},"enrolledCourses":{"courseId":{"type":"string|()","comment":""},"courseName":{"type":"string|()","comment":""},"code":{"type":"string","comment":""},"desc":{"type":"string|()","comment":""},"creditHours":{"type":"decimal|()","comment":""},"courseDuration":{"type":"string|int|()","comment":""},"possibleGrades":{"type":"(F|D|C|B|A)[]","comment":""},"professors":{"id":{"type":"string|int","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"specializations":{"type":"string[]|()","comment":""},"gradesAssigned":{"type":"(F|D|C|B|A|())[]","comment":""},"department":{"departmentName":{"type":"string","comment":""},"status":{"type":"SUSPENDED|PENDING|INACTIVE|ACTIVE","comment":""},"facultyCount":{"type":"int","comment":""},"specializations":{"type":"string[]","comment":""},"budget":{"type":"decimal","comment":""},"established":{"type":"string","comment":""},"headOfDepartment":{"type":"string","comment":""},"programs":{"type":"string[]","comment":""},"buildingLocation":{"type":"string","comment":""},"departmentCode":{"type":"string","comment":""},"studentCount":{"type":"int","comment":""},"researchFocus":{"type":"string[]","comment":""},"website":{"type":"string","comment":""}},"evaluationScores":{"type":"(decimal|float)[]","comment":""},"yearsOfExperience":{"type":"int","comment":""},"publications":{"type":"string[]|()","comment":""},"researchAreas":{"type":"(string|())[]","comment":""},"officeHours":{"type":"string","comment":""},"officeLocation":{"type":"string","comment":""},"academicRank":{"type":"string","comment":""},"tenure":{"type":"string","comment":""},"previousPositions":{"companyName":{"type":"string","comment":""},"position":{"type":"string","comment":""},"startDate":{"type":"string","comment":""},"endDate":{"type":"string","comment":""},"responsibilities":{"type":"string","comment":""},"supervisorName":{"type":"string","comment":""},"supervisorContact":{"type":"string|int","comment":""},"isCurrentEmployer":{"type":"boolean","comment":""},"location":{"type":"string","comment":""},"employmentType":{"type":"string","comment":""},"salary":{"type":"decimal","comment":""}},"teachingCourses":{"type":"string[]","comment":""},"awards":{"type":"string[]","comment":""},"highestDegree":{"type":"string","comment":""},"contactInformation":{"type":"(string|int)[]","comment":""}}},"spokenLanguages":{"type":"string[]","comment":""},"foreignStudent":{"type":"boolean","comment":""},"profilePicture":{"type":"byte[]|()","comment":""},"socialMedia":{"type":"string[]","comment":""},"relationshipStatus":{"type":"string","comment":""},"religiousAffiliation":{"type":"string","comment":""},"ethnicBackground":{"type":"string","comment":""},"workHistory":{"employer":{"type":"string","comment":""},"jobTitle":{"type":"string","comment":""},"fromDate":{"type":"string","comment":""},"toDate":{"type":"string","comment":""},"jobDuties":{"type":"string","comment":""},"supervisor":{"type":"string","comment":""},"supervisorContact":{"type":"string|int","comment":""},"currentJob":{"type":"boolean","comment":""},"workLocation":{"type":"string","comment":""},"employmentCategory":{"type":"string","comment":""},"income":{"type":"decimal","comment":""}},"howDiscovered":{"type":"string","comment":""},"personalInterests":{"type":"string[]","comment":""},"accomplishments":{"type":"string[]","comment":""},"alumniStatus":{"type":"boolean","comment":""},"nickName":{"type":"string","comment":""},"preferredPronouns":{"type":"string","comment":""},"foodRestrictions":{"type":"string","comment":""},"enrollmentStatus":{"type":"string","comment":""}},"inputMetadata":{"person":{"isArrayType":false,"parameterName":"person","parameterType":"Person","type":"record","fields":{"id":{"optional":true,"typeName":"string|int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"middleName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"middleName","nullable":true},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"gender":{"optional":false,"typeName":"OTHER|FEMALE|GREEN|MALE","type":"enum","typeInstance":"gender","members":{"OTHER":{"typeName":"OTHER","type":"OTHER","typeInstance":"OTHER","nullable":false,"optional":false},"FEMALE":{"typeName":"FEMALE","type":"FEMALE","typeInstance":"FEMALE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"MALE":{"typeName":"MALE","type":"MALE","typeInstance":"MALE","nullable":false,"optional":false}},"nullable":false},"age":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"age","nullable":true},"dateOfBirth":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"dateOfBirth","nullable":true},"nationality":{"typeName":"string","type":"string","typeInstance":"nationality","nullable":false,"optional":true},"passportNumber":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"passportNumber","nullable":true},"status":{"optional":false,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"contactNumbers":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contactNumbers","nullableArray":false,"nullable":false},"primaryEmail":{"typeName":"string","type":"string","typeInstance":"primaryEmail","nullable":false,"optional":false},"alternateEmails":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"alternateEmails","nullableArray":true,"nullable":false},"residentialAddress":{"nullable":false,"optional":false,"type":"record","typeInstance":"residentialAddress","typeName":"record","fields":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"zipCode":{"typeName":"int","type":"int","typeInstance":"zipCode","nullable":false,"optional":false},"latitude":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"latitude","nullable":true},"longitude":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"longitude","nullable":true},"addressType":{"typeName":"string","type":"string","typeInstance":"addressType","nullable":false,"optional":true},"isVerified":{"typeName":"boolean","type":"boolean","typeInstance":"isVerified","nullable":false,"optional":true},"lastUpdated":{"typeName":"string","type":"string","typeInstance":"lastUpdated","nullable":false,"optional":true},"nearbyLandmarks":{"typeName":"string[]","type":"string[]","typeInstance":"nearbyLandmarks","nullable":false,"optional":true},"isPrimary":{"typeName":"boolean","type":"boolean","typeInstance":"isPrimary","nullable":false,"optional":true},"timeZone":{"typeName":"string","type":"string","typeInstance":"timeZone","nullable":false,"optional":true}}},"permanentAddress":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"permanentAddress","members":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"zipCode":{"typeName":"int","type":"int","typeInstance":"zipCode","nullable":false,"optional":false},"latitude":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"latitude","nullable":true},"longitude":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"longitude","nullable":true},"addressType":{"typeName":"string","type":"string","typeInstance":"addressType","nullable":false,"optional":true},"isVerified":{"typeName":"boolean","type":"boolean","typeInstance":"isVerified","nullable":false,"optional":true},"lastUpdated":{"typeName":"string","type":"string","typeInstance":"lastUpdated","nullable":false,"optional":true},"nearbyLandmarks":{"typeName":"string[]","type":"string[]","typeInstance":"nearbyLandmarks","nullable":false,"optional":true},"isPrimary":{"typeName":"boolean","type":"boolean","typeInstance":"isPrimary","nullable":false,"optional":true},"timeZone":{"typeName":"string","type":"string","typeInstance":"timeZone","nullable":false,"optional":true}},"nullable":true},"documents":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"documents","members":{"documentType":{"typeName":"string","type":"string","typeInstance":"documentType","nullable":false,"optional":false},"documentNumber":{"typeName":"string","type":"string","typeInstance":"documentNumber","nullable":false,"optional":false},"issuingCountry":{"typeName":"string","type":"string","typeInstance":"issuingCountry","nullable":false,"optional":false},"expiryDate":{"typeName":"string","type":"string","typeInstance":"expiryDate","nullable":false,"optional":false},"issueDate":{"typeName":"string","type":"string","typeInstance":"issueDate","nullable":false,"optional":true},"isVerified":{"typeName":"boolean","type":"boolean","typeInstance":"isVerified","nullable":false,"optional":true},"verificationSource":{"typeName":"string","type":"string","typeInstance":"verificationSource","nullable":false,"optional":true},"remarks":{"typeName":"string","type":"string","typeInstance":"remarks","nullable":false,"optional":true}},"nullableArray":false,"nullable":true},"emergencyContact":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"emergencyContact","members":{"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"contacts":{"optional":false,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contacts","nullableArray":false,"nullable":false},"relationship":{"typeName":"string","type":"string","typeInstance":"relationship","nullable":false,"optional":false},"address":{"typeName":"string","type":"string","typeInstance":"address","nullable":false,"optional":true},"isPrimary":{"typeName":"boolean","type":"boolean","typeInstance":"isPrimary","nullable":false,"optional":true},"lastContactDate":{"typeName":"string","type":"string","typeInstance":"lastContactDate","nullable":false,"optional":true},"contactId":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"contactId","nullable":false}},"nullable":true},"healthInfo":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"healthInfo","members":{"bloodGroup":{"typeName":"string","type":"string","typeInstance":"bloodGroup","nullable":false,"optional":false},"allergies":{"typeName":"string[]","type":"string[]","typeInstance":"allergies","nullable":false,"optional":false},"medications":{"typeName":"string[]","type":"string[]","typeInstance":"medications","nullable":false,"optional":false},"isInsured":{"typeName":"boolean","type":"boolean","typeInstance":"isInsured","nullable":false,"optional":false},"insuranceProvider":{"typeName":"string","type":"string","typeInstance":"insuranceProvider","nullable":false,"optional":true},"policyNumber":{"typeName":"string","type":"string","typeInstance":"policyNumber","nullable":false,"optional":true},"medicalConditions":{"typeName":"string[]","type":"string[]","typeInstance":"medicalConditions","nullable":false,"optional":true},"lastCheckupDate":{"typeName":"string","type":"string","typeInstance":"lastCheckupDate","nullable":false,"optional":true},"primaryPhysician":{"typeName":"string","type":"string","typeInstance":"primaryPhysician","nullable":false,"optional":true},"hasDisability":{"typeName":"boolean","type":"boolean","typeInstance":"hasDisability","nullable":false,"optional":true},"accommodationNeeds":{"typeName":"string[]","type":"string[]","typeInstance":"accommodationNeeds","nullable":false,"optional":true}},"nullable":true},"financialInfo":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"financialInfo","members":{"preferredPayment":{"optional":false,"typeName":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","type":"enum","typeInstance":"preferredPayment","members":{"CASH":{"typeName":"CASH","type":"CASH","typeInstance":"CASH","nullable":false,"optional":false},"BANK_TRANSFER":{"typeName":"BANK_TRANSFER","type":"BANK_TRANSFER","typeInstance":"BANK_TRANSFER","nullable":false,"optional":false},"DEBIT_CARD":{"typeName":"DEBIT_CARD","type":"DEBIT_CARD","typeInstance":"DEBIT_CARD","nullable":false,"optional":false},"CREDIT_CARD":{"typeName":"CREDIT_CARD","type":"CREDIT_CARD","typeInstance":"CREDIT_CARD","nullable":false,"optional":false}},"nullable":false},"accountNumber":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"accountNumber","nullable":true},"bankName":{"typeName":"string","type":"string","typeInstance":"bankName","nullable":false,"optional":true},"scholarshipAmount":{"typeName":"decimal","type":"decimal","typeInstance":"scholarshipAmount","nullable":false,"optional":true},"tuitionFee":{"typeName":"decimal","type":"decimal","typeInstance":"tuitionFee","nullable":false,"optional":true},"outstandingBalance":{"typeName":"decimal","type":"decimal","typeInstance":"outstandingBalance","nullable":false,"optional":true},"hasLoan":{"typeName":"boolean","type":"boolean","typeInstance":"hasLoan","nullable":false,"optional":true},"loanProvider":{"typeName":"string","type":"string","typeInstance":"loanProvider","nullable":false,"optional":true},"monthlyPayment":{"typeName":"decimal","type":"decimal","typeInstance":"monthlyPayment","nullable":false,"optional":true},"paymentHistory":{"typeName":"string[]","type":"string[]","typeInstance":"paymentHistory","nullable":false,"optional":true},"creditLimit":{"typeName":"decimal","type":"decimal","typeInstance":"creditLimit","nullable":false,"optional":true},"paymentStatus":{"optional":true,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"paymentStatus","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false}},"nullable":true},"academicHistory":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"academicHistory","members":{"institutionName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"institutionName","nullable":true},"gpa":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"gpa","nullable":true},"major":{"typeName":"string","type":"string","typeInstance":"major","nullable":false,"optional":true},"graduationYear":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"graduationYear","nullable":true},"courses":{"typeName":"string[]","type":"string[]","typeInstance":"courses","nullable":false,"optional":true},"grades":{"optional":true,"typeName":"(F|D|C|B|A)[]","type":"enum[]","typeInstance":"grades","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"degreeType":{"typeName":"string","type":"string","typeInstance":"degreeType","nullable":false,"optional":true},"certificationType":{"typeName":"string","type":"string","typeInstance":"certificationType","nullable":false,"optional":true},"transcriptVerified":{"typeName":"string","type":"string","typeInstance":"transcriptVerified","nullable":false,"optional":true},"academicStanding":{"typeName":"string","type":"string","typeInstance":"academicStanding","nullable":false,"optional":true},"honors":{"typeName":"string[]","type":"string[]","typeInstance":"honors","nullable":false,"optional":true},"activities":{"typeName":"string[]","type":"string[]","typeInstance":"activities","nullable":false,"optional":true}},"nullableArray":false,"nullable":true},"skills":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"skills","members":{"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"proficiencyLevel":{"typeName":"int","type":"int","typeInstance":"proficiencyLevel","nullable":false,"optional":true},"experience":{"optional":true,"typeName":"string|int|()","type":"union","typeInstance":"experience","nullable":true},"certificationName":{"typeName":"string","type":"string","typeInstance":"certificationName","nullable":false,"optional":true},"issuingOrganization":{"typeName":"string","type":"string","typeInstance":"issuingOrganization","nullable":false,"optional":true},"dateAcquired":{"typeName":"string","type":"string","typeInstance":"dateAcquired","nullable":false,"optional":true},"expiryDate":{"typeName":"string","type":"string","typeInstance":"expiryDate","nullable":false,"optional":true},"isVerified":{"typeName":"boolean","type":"boolean","typeInstance":"isVerified","nullable":false,"optional":true},"relatedProjects":{"typeName":"string[]","type":"string[]","typeInstance":"relatedProjects","nullable":false,"optional":true},"endorsements":{"typeName":"string[]","type":"string[]","typeInstance":"endorsements","nullable":false,"optional":true}},"nullableArray":false,"nullable":true},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"courseCode":{"typeName":"string","type":"string","typeInstance":"courseCode","nullable":false,"optional":false},"description":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"description","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"duration":{"optional":false,"typeName":"string|int|()","type":"union","typeInstance":"duration","nullable":true},"allowedGrades":{"optional":true,"typeName":"(F|D|C|B|A|())[]","type":"union[]","typeInstance":"allowedGrades","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"professors":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professors","members":{"id":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"id","nullable":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"specializations":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"specializations","nullableArray":false,"nullable":true},"gradesAssigned":{"optional":true,"typeName":"(F|D|C|B|A|())[]","type":"union[]","typeInstance":"gradesAssigned","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false},"status":{"optional":true,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"facultyCount":{"typeName":"int","type":"int","typeInstance":"facultyCount","nullable":false,"optional":false},"specializations":{"typeName":"string[]","type":"string[]","typeInstance":"specializations","nullable":false,"optional":false},"budget":{"typeName":"decimal","type":"decimal","typeInstance":"budget","nullable":false,"optional":false},"established":{"typeName":"string","type":"string","typeInstance":"established","nullable":false,"optional":false},"headOfDepartment":{"typeName":"string","type":"string","typeInstance":"headOfDepartment","nullable":false,"optional":true},"programs":{"typeName":"string[]","type":"string[]","typeInstance":"programs","nullable":false,"optional":true},"buildingLocation":{"typeName":"string","type":"string","typeInstance":"buildingLocation","nullable":false,"optional":true},"departmentCode":{"typeName":"string","type":"string","typeInstance":"departmentCode","nullable":false,"optional":true},"studentCount":{"typeName":"int","type":"int","typeInstance":"studentCount","nullable":false,"optional":true},"researchFocus":{"typeName":"string[]","type":"string[]","typeInstance":"researchFocus","nullable":false,"optional":true},"website":{"typeName":"string","type":"string","typeInstance":"website","nullable":false,"optional":true}},"nullable":false},"evaluationScores":{"optional":true,"typeName":"(decimal|float)[]","type":"union[]","typeInstance":"evaluationScores","nullableArray":false,"nullable":false},"yearsOfExperience":{"typeName":"int","type":"int","typeInstance":"yearsOfExperience","nullable":false,"optional":true},"publications":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"publications","nullableArray":false,"nullable":true},"researchAreas":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"researchAreas","nullableArray":true,"nullable":false},"officeHours":{"typeName":"string","type":"string","typeInstance":"officeHours","nullable":false,"optional":true},"officeLocation":{"typeName":"string","type":"string","typeInstance":"officeLocation","nullable":false,"optional":true},"academicRank":{"typeName":"string","type":"string","typeInstance":"academicRank","nullable":false,"optional":true},"tenure":{"typeName":"string","type":"string","typeInstance":"tenure","nullable":false,"optional":true},"previousPositions":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"previousPositions","fields":{"companyName":{"typeName":"string","type":"string","typeInstance":"companyName","nullable":false,"optional":false},"position":{"typeName":"string","type":"string","typeInstance":"position","nullable":false,"optional":false},"startDate":{"typeName":"string","type":"string","typeInstance":"startDate","nullable":false,"optional":false},"endDate":{"typeName":"string","type":"string","typeInstance":"endDate","nullable":false,"optional":true},"responsibilities":{"typeName":"string","type":"string","typeInstance":"responsibilities","nullable":false,"optional":true},"supervisorName":{"typeName":"string","type":"string","typeInstance":"supervisorName","nullable":false,"optional":true},"supervisorContact":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"supervisorContact","nullable":false},"isCurrentEmployer":{"typeName":"boolean","type":"boolean","typeInstance":"isCurrentEmployer","nullable":false,"optional":true},"location":{"typeName":"string","type":"string","typeInstance":"location","nullable":false,"optional":true},"employmentType":{"typeName":"string","type":"string","typeInstance":"employmentType","nullable":false,"optional":true},"salary":{"typeName":"decimal","type":"decimal","typeInstance":"salary","nullable":false,"optional":true}},"nullableArray":false,"nullable":false},"teachingCourses":{"typeName":"string[]","type":"string[]","typeInstance":"teachingCourses","nullable":false,"optional":true},"awards":{"typeName":"string[]","type":"string[]","typeInstance":"awards","nullable":false,"optional":true},"highestDegree":{"typeName":"string","type":"string","typeInstance":"highestDegree","nullable":false,"optional":true},"contactInformation":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contactInformation","nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false},"name":{"typeName":"string","type":"string","typeInstance":"name","nullable":false,"optional":false},"accreditation":{"typeName":"string","type":"string","typeInstance":"accreditation","nullable":false,"optional":false},"collegeLocation":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"collegeLocation","members":{"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":true},"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"state":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"state","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"zipCode":{"typeName":"int","type":"int","typeInstance":"zipCode","nullable":false,"optional":false},"latitude":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"latitude","nullable":true},"longitude":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"longitude","nullable":true},"addressType":{"typeName":"string","type":"string","typeInstance":"addressType","nullable":false,"optional":true},"isVerified":{"typeName":"boolean","type":"boolean","typeInstance":"isVerified","nullable":false,"optional":true},"lastUpdated":{"typeName":"string","type":"string","typeInstance":"lastUpdated","nullable":false,"optional":true},"nearbyLandmarks":{"typeName":"string[]","type":"string[]","typeInstance":"nearbyLandmarks","nullable":false,"optional":true},"isPrimary":{"typeName":"boolean","type":"boolean","typeInstance":"isPrimary","nullable":false,"optional":true},"timeZone":{"typeName":"string","type":"string","typeInstance":"timeZone","nullable":false,"optional":true}},"nullable":true},"status":{"optional":false,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"establishedYear":{"typeName":"string","type":"string","typeInstance":"establishedYear","nullable":false,"optional":true},"departments":{"typeName":"string[]","type":"string[]","typeInstance":"departments","nullable":false,"optional":true},"president":{"typeName":"string","type":"string","typeInstance":"president","nullable":false,"optional":true},"website":{"typeName":"string","type":"string","typeInstance":"website","nullable":false,"optional":true},"campuses":{"typeName":"string[]","type":"string[]","typeInstance":"campuses","nullable":false,"optional":true},"studentPopulation":{"typeName":"int","type":"int","typeInstance":"studentPopulation","nullable":false,"optional":true},"facultyCount":{"typeName":"int","type":"int","typeInstance":"facultyCount","nullable":false,"optional":true},"programs":{"typeName":"string[]","type":"string[]","typeInstance":"programs","nullable":false,"optional":true},"endowment":{"typeName":"decimal","type":"decimal","typeInstance":"endowment","nullable":false,"optional":true},"mascot":{"typeName":"string","type":"string","typeInstance":"mascot","nullable":false,"optional":true},"sportsTeams":{"typeName":"string[]","type":"string[]","typeInstance":"sportsTeams","nullable":false,"optional":true}},"nullable":true},"languages":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"languages","nullableArray":false,"nullable":true},"isInternational":{"typeName":"boolean","type":"boolean","typeInstance":"isInternational","nullable":false,"optional":true},"joinDate":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"joinDate","nullable":true},"photo":{"optional":true,"typeName":"byte[]|()","type":"union[]|()","typeInstance":"photo","nullableArray":false,"nullable":true},"socialMediaHandles":{"optional":true,"typeName":"(string|())[]|()","type":"union[]|()","typeInstance":"socialMediaHandles","nullableArray":true,"nullable":true},"maritalStatus":{"typeName":"string","type":"string","typeInstance":"maritalStatus","nullable":false,"optional":true},"religion":{"typeName":"string","type":"string","typeInstance":"religion","nullable":false,"optional":true},"ethnicity":{"typeName":"string","type":"string","typeInstance":"ethnicity","nullable":false,"optional":true},"employmentHistory":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"employmentHistory","members":{"companyName":{"typeName":"string","type":"string","typeInstance":"companyName","nullable":false,"optional":false},"position":{"typeName":"string","type":"string","typeInstance":"position","nullable":false,"optional":false},"startDate":{"typeName":"string","type":"string","typeInstance":"startDate","nullable":false,"optional":false},"endDate":{"typeName":"string","type":"string","typeInstance":"endDate","nullable":false,"optional":true},"responsibilities":{"typeName":"string","type":"string","typeInstance":"responsibilities","nullable":false,"optional":true},"supervisorName":{"typeName":"string","type":"string","typeInstance":"supervisorName","nullable":false,"optional":true},"supervisorContact":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"supervisorContact","nullable":false},"isCurrentEmployer":{"typeName":"boolean","type":"boolean","typeInstance":"isCurrentEmployer","nullable":false,"optional":true},"location":{"typeName":"string","type":"string","typeInstance":"location","nullable":false,"optional":true},"employmentType":{"typeName":"string","type":"string","typeInstance":"employmentType","nullable":false,"optional":true},"salary":{"typeName":"decimal","type":"decimal","typeInstance":"salary","nullable":false,"optional":true}},"nullableArray":false,"nullable":true},"referralSource":{"typeName":"string","type":"string","typeInstance":"referralSource","nullable":false,"optional":true},"interests":{"typeName":"string[]","type":"string[]","typeInstance":"interests","nullable":false,"optional":true},"achievements":{"typeName":"string[]","type":"string[]","typeInstance":"achievements","nullable":false,"optional":true},"isAlumni":{"typeName":"boolean","type":"boolean","typeInstance":"isAlumni","nullable":false,"optional":true},"preferredName":{"typeName":"string","type":"string","typeInstance":"preferredName","nullable":false,"optional":true},"pronoun":{"typeName":"string","type":"string","typeInstance":"pronoun","nullable":false,"optional":true},"dietaryRestrictions":{"typeName":"string","type":"string","typeInstance":"dietaryRestrictions","nullable":false,"optional":true},"registrationStatus":{"typeName":"string","type":"string","typeInstance":"registrationStatus","nullable":false,"optional":true},"student_list":{"typeName":"record[]","type":"record[]","typeInstance":"student_list","nullable":false,"optional":false}}}},"outputMetadata":{"id":{"optional":false,"typeName":"string|int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"middleName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"middleName","nullable":true},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"gender":{"optional":false,"typeName":"OTHER|FEMALE|GREEN|MALE","type":"enum","typeInstance":"gender","members":{"OTHER":{"typeName":"OTHER","type":"OTHER","typeInstance":"OTHER","nullable":false,"optional":false},"FEMALE":{"typeName":"FEMALE","type":"FEMALE","typeInstance":"FEMALE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"MALE":{"typeName":"MALE","type":"MALE","typeInstance":"MALE","nullable":false,"optional":false}},"nullable":false},"age":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"birthDate":{"typeName":"string","type":"string","typeInstance":"birthDate","nullable":false,"optional":false},"citizenship":{"typeName":"string","type":"string","typeInstance":"citizenship","nullable":false,"optional":false},"passport":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"passport","nullable":true},"phones":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"phones","nullableArray":false,"nullable":false},"email":{"typeName":"string","type":"string","typeInstance":"email","nullable":false,"optional":false},"backupEmails":{"typeName":"string[]","type":"string[]","typeInstance":"backupEmails","nullable":false,"optional":true},"currentAddress":{"nullable":false,"optional":false,"type":"record","typeInstance":"currentAddress","typeName":"record","fields":{"streetAddress":{"typeName":"string","type":"string","typeInstance":"streetAddress","nullable":false,"optional":false},"cityName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"cityName","nullable":true},"stateName":{"typeName":"string","type":"string","typeInstance":"stateName","nullable":false,"optional":false},"countryName":{"typeName":"string","type":"string","typeInstance":"countryName","nullable":false,"optional":false},"postalCode":{"typeName":"string","type":"string","typeInstance":"postalCode","nullable":false,"optional":false},"lat":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lat","nullable":true},"lng":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lng","nullable":true},"locationType":{"typeName":"string","type":"string","typeInstance":"locationType","nullable":false,"optional":false},"verified":{"typeName":"boolean","type":"boolean","typeInstance":"verified","nullable":false,"optional":false},"updatedOn":{"typeName":"string","type":"string","typeInstance":"updatedOn","nullable":false,"optional":false},"landmarks":{"typeName":"string[]","type":"string[]","typeInstance":"landmarks","nullable":false,"optional":false},"main":{"typeName":"boolean","type":"boolean","typeInstance":"main","nullable":false,"optional":false},"timezone":{"typeName":"string","type":"string","typeInstance":"timezone","nullable":false,"optional":false}}},"homeAddress":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"homeAddress","members":{"streetAddress":{"typeName":"string","type":"string","typeInstance":"streetAddress","nullable":false,"optional":false},"cityName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"cityName","nullable":true},"stateName":{"typeName":"string","type":"string","typeInstance":"stateName","nullable":false,"optional":false},"countryName":{"typeName":"string","type":"string","typeInstance":"countryName","nullable":false,"optional":false},"postalCode":{"typeName":"string","type":"string","typeInstance":"postalCode","nullable":false,"optional":false},"lat":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lat","nullable":true},"lng":{"optional":true,"typeName":"float|()","type":"union","typeInstance":"lng","nullable":true},"locationType":{"typeName":"string","type":"string","typeInstance":"locationType","nullable":false,"optional":false},"verified":{"typeName":"boolean","type":"boolean","typeInstance":"verified","nullable":false,"optional":false},"updatedOn":{"typeName":"string","type":"string","typeInstance":"updatedOn","nullable":false,"optional":false},"landmarks":{"typeName":"string[]","type":"string[]","typeInstance":"landmarks","nullable":false,"optional":false},"main":{"typeName":"boolean","type":"boolean","typeInstance":"main","nullable":false,"optional":false},"timezone":{"typeName":"string","type":"string","typeInstance":"timezone","nullable":false,"optional":false}},"nullable":true},"studentDocs":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"studentDocs","members":{"documentType":{"typeName":"string","type":"string","typeInstance":"documentType","nullable":false,"optional":false},"number":{"typeName":"string","type":"string","typeInstance":"number","nullable":false,"optional":false},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"validUntil":{"typeName":"string","type":"string","typeInstance":"validUntil","nullable":false,"optional":false},"issueDate":{"typeName":"string","type":"string","typeInstance":"issueDate","nullable":false,"optional":false},"verified":{"typeName":"boolean","type":"boolean","typeInstance":"verified","nullable":false,"optional":false},"verifiedBy":{"typeName":"string","type":"string","typeInstance":"verifiedBy","nullable":false,"optional":false},"comments":{"typeName":"string","type":"string","typeInstance":"comments","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"emergency":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"emergency","members":{"contactName":{"typeName":"string","type":"string","typeInstance":"contactName","nullable":false,"optional":false},"contactDetails":{"optional":false,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contactDetails","nullableArray":false,"nullable":false},"relation":{"typeName":"string","type":"string","typeInstance":"relation","nullable":false,"optional":false},"contactAddress":{"typeName":"string","type":"string","typeInstance":"contactAddress","nullable":false,"optional":false},"primaryContact":{"typeName":"boolean","type":"boolean","typeInstance":"primaryContact","nullable":false,"optional":false},"lastContacted":{"typeName":"string","type":"string","typeInstance":"lastContacted","nullable":false,"optional":false},"contactPersonId":{"optional":false,"typeName":"string|int","type":"union","typeInstance":"contactPersonId","nullable":false}},"nullable":true},"healthRecord":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"healthRecord","members":{"blood":{"typeName":"string","type":"string","typeInstance":"blood","nullable":false,"optional":false},"allergyInfo":{"optional":false,"typeName":"(string|())[]","type":"union[]","typeInstance":"allergyInfo","nullableArray":true,"nullable":false},"currentMedications":{"optional":false,"typeName":"string[]|()","type":"union[]|()","typeInstance":"currentMedications","nullableArray":false,"nullable":true},"insuranceStatus":{"typeName":"boolean","type":"boolean","typeInstance":"insuranceStatus","nullable":false,"optional":false},"insurer":{"typeName":"string","type":"string","typeInstance":"insurer","nullable":false,"optional":false},"policyId":{"typeName":"string","type":"string","typeInstance":"policyId","nullable":false,"optional":false},"conditions":{"typeName":"string[]","type":"string[]","typeInstance":"conditions","nullable":false,"optional":false},"checkupDate":{"typeName":"string","type":"string","typeInstance":"checkupDate","nullable":false,"optional":false},"doctorName":{"typeName":"string","type":"string","typeInstance":"doctorName","nullable":false,"optional":false},"disabilityStatus":{"typeName":"boolean","type":"boolean","typeInstance":"disabilityStatus","nullable":false,"optional":false},"specialNeeds":{"typeName":"string[]","type":"string[]","typeInstance":"specialNeeds","nullable":false,"optional":false}},"nullable":true},"finances":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"finances","members":{"paymentPreference":{"optional":false,"typeName":"CASH|BANK_TRANSFER|DEBIT_CARD|CREDIT_CARD","type":"enum","typeInstance":"paymentPreference","members":{"CASH":{"typeName":"CASH","type":"CASH","typeInstance":"CASH","nullable":false,"optional":false},"BANK_TRANSFER":{"typeName":"BANK_TRANSFER","type":"BANK_TRANSFER","typeInstance":"BANK_TRANSFER","nullable":false,"optional":false},"DEBIT_CARD":{"typeName":"DEBIT_CARD","type":"DEBIT_CARD","typeInstance":"DEBIT_CARD","nullable":false,"optional":false},"CREDIT_CARD":{"typeName":"CREDIT_CARD","type":"CREDIT_CARD","typeInstance":"CREDIT_CARD","nullable":false,"optional":false}},"nullable":false},"accountId":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"accountId","nullable":true},"bank":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"bank","nullable":true},"scholarship":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"scholarship","nullable":true},"tuition":{"typeName":"decimal","type":"decimal","typeInstance":"tuition","nullable":false,"optional":false},"outstandingAmount":{"typeName":"decimal","type":"decimal","typeInstance":"outstandingAmount","nullable":false,"optional":false},"loanTaken":{"typeName":"boolean","type":"boolean","typeInstance":"loanTaken","nullable":false,"optional":false},"loanProvider":{"typeName":"string","type":"string","typeInstance":"loanProvider","nullable":false,"optional":false},"monthlyPaymentAmount":{"typeName":"decimal","type":"decimal","typeInstance":"monthlyPaymentAmount","nullable":false,"optional":false},"payments":{"typeName":"string[]","type":"string[]","typeInstance":"payments","nullable":false,"optional":false},"maxCredit":{"typeName":"decimal","type":"decimal","typeInstance":"maxCredit","nullable":false,"optional":false},"paymentStanding":{"optional":false,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"paymentStanding","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false}},"nullable":true},"education":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"education","members":{"school":{"typeName":"string","type":"string","typeInstance":"school","nullable":false,"optional":false},"gradePoint":{"typeName":"float","type":"float","typeInstance":"gradePoint","nullable":false,"optional":false},"specialization":{"typeName":"string","type":"string","typeInstance":"specialization","nullable":false,"optional":false},"completionYear":{"typeName":"int","type":"int","typeInstance":"completionYear","nullable":false,"optional":false},"completedCourses":{"typeName":"string[]","type":"string[]","typeInstance":"completedCourses","nullable":false,"optional":false},"courseGrades":{"optional":false,"typeName":"(F|D|C|B|A)[]","type":"enum[]","typeInstance":"courseGrades","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"degree":{"typeName":"string","type":"string","typeInstance":"degree","nullable":false,"optional":false},"certificate":{"typeName":"string","type":"string","typeInstance":"certificate","nullable":false,"optional":false},"verificationStatus":{"typeName":"string","type":"string","typeInstance":"verificationStatus","nullable":false,"optional":false},"academicLevel":{"typeName":"string","type":"string","typeInstance":"academicLevel","nullable":false,"optional":false},"achievements":{"typeName":"string[]","type":"string[]","typeInstance":"achievements","nullable":false,"optional":false},"extracurriculars":{"typeName":"string[]","type":"string[]","typeInstance":"extracurriculars","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"abilities":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"abilities","members":{"skillName":{"typeName":"string","type":"string","typeInstance":"skillName","nullable":false,"optional":false},"level":{"typeName":"int","type":"int","typeInstance":"level","nullable":false,"optional":false},"experiencePeriod":{"optional":false,"typeName":"string|int","type":"union","typeInstance":"experiencePeriod","nullable":false},"certification":{"typeName":"string","type":"string","typeInstance":"certification","nullable":false,"optional":false},"issuer":{"typeName":"string","type":"string","typeInstance":"issuer","nullable":false,"optional":false},"acquisitionDate":{"typeName":"string","type":"string","typeInstance":"acquisitionDate","nullable":false,"optional":false},"expirationDate":{"typeName":"string","type":"string","typeInstance":"expirationDate","nullable":false,"optional":false},"verified":{"typeName":"boolean","type":"boolean","typeInstance":"verified","nullable":false,"optional":false},"projects":{"typeName":"string[]","type":"string[]","typeInstance":"projects","nullable":false,"optional":false},"testimonials":{"typeName":"string[]","type":"string[]","typeInstance":"testimonials","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"enrolledCourses":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"enrolledCourses","members":{"courseId":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"courseId","nullable":true},"courseName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"courseName","nullable":true},"code":{"typeName":"string","type":"string","typeInstance":"code","nullable":false,"optional":false},"desc":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"desc","nullable":true},"creditHours":{"optional":true,"typeName":"decimal|()","type":"union","typeInstance":"creditHours","nullable":true},"courseDuration":{"optional":true,"typeName":"string|int|()","type":"union","typeInstance":"courseDuration","nullable":true},"possibleGrades":{"optional":true,"typeName":"(F|D|C|B|A)[]","type":"enum[]","typeInstance":"possibleGrades","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"professors":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professors","members":{"id":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"id","nullable":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"specializations":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"specializations","nullableArray":false,"nullable":true},"gradesAssigned":{"optional":true,"typeName":"(F|D|C|B|A|())[]","type":"union[]","typeInstance":"gradesAssigned","members":{"F":{"typeName":"F","type":"F","typeInstance":"F","nullable":false,"optional":false},"D":{"typeName":"D","type":"D","typeInstance":"D","nullable":false,"optional":false},"C":{"typeName":"C","type":"C","typeInstance":"C","nullable":false,"optional":false},"B":{"typeName":"B","type":"B","typeInstance":"B","nullable":false,"optional":false},"A":{"typeName":"A","type":"A","typeInstance":"A","nullable":false,"optional":false}},"nullableArray":true,"nullable":false},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false},"status":{"optional":true,"typeName":"SUSPENDED|PENDING|INACTIVE|ACTIVE","type":"enum","typeInstance":"status","members":{"SUSPENDED":{"typeName":"SUSPENDED","type":"SUSPENDED","typeInstance":"SUSPENDED","nullable":false,"optional":false},"PENDING":{"typeName":"PENDING","type":"PENDING","typeInstance":"PENDING","nullable":false,"optional":false},"INACTIVE":{"typeName":"INACTIVE","type":"INACTIVE","typeInstance":"INACTIVE","nullable":false,"optional":false},"ACTIVE":{"typeName":"ACTIVE","type":"ACTIVE","typeInstance":"ACTIVE","nullable":false,"optional":false}},"nullable":false},"facultyCount":{"typeName":"int","type":"int","typeInstance":"facultyCount","nullable":false,"optional":false},"specializations":{"typeName":"string[]","type":"string[]","typeInstance":"specializations","nullable":false,"optional":false},"budget":{"typeName":"decimal","type":"decimal","typeInstance":"budget","nullable":false,"optional":false},"established":{"typeName":"string","type":"string","typeInstance":"established","nullable":false,"optional":false},"headOfDepartment":{"typeName":"string","type":"string","typeInstance":"headOfDepartment","nullable":false,"optional":true},"programs":{"typeName":"string[]","type":"string[]","typeInstance":"programs","nullable":false,"optional":true},"buildingLocation":{"typeName":"string","type":"string","typeInstance":"buildingLocation","nullable":false,"optional":true},"departmentCode":{"typeName":"string","type":"string","typeInstance":"departmentCode","nullable":false,"optional":true},"studentCount":{"typeName":"int","type":"int","typeInstance":"studentCount","nullable":false,"optional":true},"researchFocus":{"typeName":"string[]","type":"string[]","typeInstance":"researchFocus","nullable":false,"optional":true},"website":{"typeName":"string","type":"string","typeInstance":"website","nullable":false,"optional":true}},"nullable":false},"evaluationScores":{"optional":true,"typeName":"(decimal|float)[]","type":"union[]","typeInstance":"evaluationScores","nullableArray":false,"nullable":false},"yearsOfExperience":{"typeName":"int","type":"int","typeInstance":"yearsOfExperience","nullable":false,"optional":true},"publications":{"optional":true,"typeName":"string[]|()","type":"union[]|()","typeInstance":"publications","nullableArray":false,"nullable":true},"researchAreas":{"optional":true,"typeName":"(string|())[]","type":"union[]","typeInstance":"researchAreas","nullableArray":true,"nullable":false},"officeHours":{"typeName":"string","type":"string","typeInstance":"officeHours","nullable":false,"optional":true},"officeLocation":{"typeName":"string","type":"string","typeInstance":"officeLocation","nullable":false,"optional":true},"academicRank":{"typeName":"string","type":"string","typeInstance":"academicRank","nullable":false,"optional":true},"tenure":{"typeName":"string","type":"string","typeInstance":"tenure","nullable":false,"optional":true},"previousPositions":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"previousPositions","fields":{"companyName":{"typeName":"string","type":"string","typeInstance":"companyName","nullable":false,"optional":false},"position":{"typeName":"string","type":"string","typeInstance":"position","nullable":false,"optional":false},"startDate":{"typeName":"string","type":"string","typeInstance":"startDate","nullable":false,"optional":false},"endDate":{"typeName":"string","type":"string","typeInstance":"endDate","nullable":false,"optional":true},"responsibilities":{"typeName":"string","type":"string","typeInstance":"responsibilities","nullable":false,"optional":true},"supervisorName":{"typeName":"string","type":"string","typeInstance":"supervisorName","nullable":false,"optional":true},"supervisorContact":{"optional":true,"typeName":"string|int","type":"union","typeInstance":"supervisorContact","nullable":false},"isCurrentEmployer":{"typeName":"boolean","type":"boolean","typeInstance":"isCurrentEmployer","nullable":false,"optional":true},"location":{"typeName":"string","type":"string","typeInstance":"location","nullable":false,"optional":true},"employmentType":{"typeName":"string","type":"string","typeInstance":"employmentType","nullable":false,"optional":true},"salary":{"typeName":"decimal","type":"decimal","typeInstance":"salary","nullable":false,"optional":true}},"nullableArray":false,"nullable":false},"teachingCourses":{"typeName":"string[]","type":"string[]","typeInstance":"teachingCourses","nullable":false,"optional":true},"awards":{"typeName":"string[]","type":"string[]","typeInstance":"awards","nullable":false,"optional":true},"highestDegree":{"typeName":"string","type":"string","typeInstance":"highestDegree","nullable":false,"optional":true},"contactInformation":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"contactInformation","nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":true},"spokenLanguages":{"typeName":"string[]","type":"string[]","typeInstance":"spokenLanguages","nullable":false,"optional":true},"foreignStudent":{"typeName":"boolean","type":"boolean","typeInstance":"foreignStudent","nullable":false,"optional":true},"profilePicture":{"optional":true,"typeName":"byte[]|()","type":"union[]|()","typeInstance":"profilePicture","nullableArray":false,"nullable":true},"socialMedia":{"typeName":"string[]","type":"string[]","typeInstance":"socialMedia","nullable":false,"optional":true},"relationshipStatus":{"typeName":"string","type":"string","typeInstance":"relationshipStatus","nullable":false,"optional":false},"religiousAffiliation":{"typeName":"string","type":"string","typeInstance":"religiousAffiliation","nullable":false,"optional":false},"ethnicBackground":{"typeName":"string","type":"string","typeInstance":"ethnicBackground","nullable":false,"optional":false},"workHistory":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"workHistory","fields":{"employer":{"typeName":"string","type":"string","typeInstance":"employer","nullable":false,"optional":false},"jobTitle":{"typeName":"string","type":"string","typeInstance":"jobTitle","nullable":false,"optional":false},"fromDate":{"typeName":"string","type":"string","typeInstance":"fromDate","nullable":false,"optional":false},"toDate":{"typeName":"string","type":"string","typeInstance":"toDate","nullable":false,"optional":false},"jobDuties":{"typeName":"string","type":"string","typeInstance":"jobDuties","nullable":false,"optional":false},"supervisor":{"typeName":"string","type":"string","typeInstance":"supervisor","nullable":false,"optional":false},"supervisorContact":{"optional":false,"typeName":"string|int","type":"union","typeInstance":"supervisorContact","nullable":false},"currentJob":{"typeName":"boolean","type":"boolean","typeInstance":"currentJob","nullable":false,"optional":false},"workLocation":{"typeName":"string","type":"string","typeInstance":"workLocation","nullable":false,"optional":false},"employmentCategory":{"typeName":"string","type":"string","typeInstance":"employmentCategory","nullable":false,"optional":false},"income":{"typeName":"decimal","type":"decimal","typeInstance":"income","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"howDiscovered":{"typeName":"string","type":"string","typeInstance":"howDiscovered","nullable":false,"optional":false},"personalInterests":{"typeName":"string[]","type":"string[]","typeInstance":"personalInterests","nullable":false,"optional":false},"accomplishments":{"typeName":"string[]","type":"string[]","typeInstance":"accomplishments","nullable":false,"optional":false},"alumniStatus":{"typeName":"boolean","type":"boolean","typeInstance":"alumniStatus","nullable":false,"optional":false},"nickName":{"typeName":"string","type":"string","typeInstance":"nickName","nullable":false,"optional":false},"preferredPronouns":{"typeName":"string","type":"string","typeInstance":"preferredPronouns","nullable":false,"optional":false},"foodRestrictions":{"typeName":"string","type":"string","typeInstance":"foodRestrictions","nullable":false,"optional":false},"enrollmentStatus":{"typeName":"string","type":"string","typeInstance":"enrollmentStatus","nullable":false,"optional":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/expected.json deleted file mode 100644 index dcd2e211ae6..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in AItem.person\n select {\n id: personItem.id,\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: (personItem.age).toString()\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/mapping.json deleted file mode 100644 index 17ea78cb443..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/mapping.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "student":{ - "id":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "AItem.person.id" - ] - }, - "firstName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.firstName" - ] - }, - "lastName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.lastName" - ] - }, - "age":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.age" - ] - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/param_def.json deleted file mode 100644 index a6b07a4f482..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_18/param_def.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "inputs":{ - "AItem":{ - "person":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "lastName":{ - "type":"string", - "comment":"" - }, - "age":{ - "type":"int", - "comment":"" - }, - "country":{ - "type":"string", - "comment":"" - }, - "college":{ - "courses":{ - "id":{ - "type":"string", - "comment":"" - }, - "name":{ - "type":"string", - "comment":"" - }, - "credits":{ - "type":"decimal", - "comment":"" - } - } - } - } - } - }, - "output":{ - "student":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "lastName":{ - "type":"string", - "comment":"" - }, - "age":{ - "type":"string", - "comment":"" - } - } - }, - "inputMetadata":{ - "AItem":{ - "isArrayType":true, - "parameterName":"AItem", - "parameterType":"A[] ", - "type":"record[]", - "fields":{ - "person":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"person", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "lastName":{ - "typeName":"string", - "type":"string", - "typeInstance":"lastName", - "nullable":false, - "optional":false - }, - "age":{ - "typeName":"int", - "type":"int", - "typeInstance":"age", - "nullable":false, - "optional":false - }, - "country":{ - "typeName":"string", - "type":"string", - "typeInstance":"country", - "nullable":false, - "optional":false - }, - "college":{ - "nullable":false, - "optional":false, - "type":"record", - "typeInstance":"college", - "typeName":"record", - "fields":{ - "courses":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"courses", - "fields":{ - "id":{ - "typeName":"string", - "type":"string", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "name":{ - "typeName":"string", - "type":"string", - "typeInstance":"name", - "nullable":false, - "optional":false - }, - "credits":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"credits", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - } - } - }, - "nullableArray":false, - "nullable":false - } - } - } - }, - "outputMetadata":{ - "student":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"student", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "lastName":{ - "typeName":"string", - "type":"string", - "typeInstance":"lastName", - "nullable":false, - "optional":false - }, - "age":{ - "typeName":"string", - "type":"string", - "typeInstance":"age", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/expected.json deleted file mode 100644 index 4b04d4993dd..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"items": "from var ItemItem in tr.Items.Item\n select {\n date: tr.Timestamp,\nproduct_id: ItemItem.ProductId,\nquantity: ItemItem.Quantity,\ntotal: tr.TotalAmount\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/mapping.json deleted file mode 100644 index f46ff1b3a9f..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/mapping.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "items":{ - "date":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "tr.Timestamp" - ] - }, - "product_id":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "tr.Items.Item.ProductId" - ] - }, - "quantity":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "tr.Items.Item.Quantity" - ] - }, - "total":{ - "operation":"DIRECT", - "targetType":"decimal", - "parameters":[ - "tr.TotalAmount" - ] - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/param_def.json deleted file mode 100644 index 1a8601a1310..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_19/param_def.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "inputs":{ - "tr":{ - "TransactionId":{ - "type":"string", - "comment":"" - }, - "StoreId":{ - "type":"int", - "comment":"" - }, - "Timestamp":{ - "type":"string", - "comment":"" - }, - "Items":{ - "Item":{ - "ProductId":{ - "type":"string", - "comment":"" - }, - "Name":{ - "type":"string", - "comment":"" - }, - "Quantity":{ - "type":"int", - "comment":"" - }, - "Price":{ - "type":"decimal", - "comment":"" - } - } - }, - "TotalAmount":{ - "type":"decimal", - "comment":"" - }, - "PaymentMethod":{ - "type":"string", - "comment":"" - } - } - }, - "output":{ - "items":{ - "date":{ - "type":"string", - "comment":"" - }, - "product_id":{ - "type":"string", - "comment":"" - }, - "quantity":{ - "type":"int", - "comment":"" - }, - "total":{ - "type":"decimal", - "comment":"" - } - } - }, - "inputMetadata":{ - "tr":{ - "isArrayType":false, - "parameterName":"tr", - "parameterType":"Transaction", - "type":"record", - "fields":{ - "TransactionId":{ - "typeName":"string", - "type":"string", - "typeInstance":"TransactionId", - "nullable":false, - "optional":false - }, - "StoreId":{ - "typeName":"int", - "type":"int", - "typeInstance":"StoreId", - "nullable":false, - "optional":false - }, - "Timestamp":{ - "typeName":"string", - "type":"string", - "typeInstance":"Timestamp", - "nullable":false, - "optional":false - }, - "Items":{ - "nullable":false, - "optional":false, - "type":"record", - "typeInstance":"Items", - "typeName":"record", - "fields":{ - "Item":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"Item", - "fields":{ - "ProductId":{ - "typeName":"string", - "type":"string", - "typeInstance":"ProductId", - "nullable":false, - "optional":false - }, - "Name":{ - "typeName":"string", - "type":"string", - "typeInstance":"Name", - "nullable":false, - "optional":false - }, - "Quantity":{ - "typeName":"int", - "type":"int", - "typeInstance":"Quantity", - "nullable":false, - "optional":false - }, - "Price":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"Price", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - } - }, - "TotalAmount":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"TotalAmount", - "nullable":false, - "optional":false - }, - "PaymentMethod":{ - "typeName":"string", - "type":"string", - "typeInstance":"PaymentMethod", - "nullable":false, - "optional":false - } - } - } - }, - "outputMetadata":{ - "items":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"items", - "fields":{ - "date":{ - "typeName":"string", - "type":"string", - "typeInstance":"date", - "nullable":false, - "optional":false - }, - "product_id":{ - "typeName":"string", - "type":"string", - "typeInstance":"product_id", - "nullable":false, - "optional":false - }, - "quantity":{ - "typeName":"int", - "type":"int", - "typeInstance":"quantity", - "nullable":false, - "optional":false - }, - "total":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"total", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/expected.json deleted file mode 100644 index a4c3b8738ce..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person ?: []\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem?.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address?.street?:\"\",\nzipcode: coursesItem.address?.zipcode?:\"\" \n},\nprofessor: from var professorItem in coursesItem?.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: {\n color: professorItem.department?.color,\ndepartmentName: professorItem.department?.departmentName?:\"\" \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/mapping.json deleted file mode 100644 index dfa4c87968e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int|()","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/param_def.json deleted file mode 100644 index 0cd22c7e4e3..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_2/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]|()","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int|()","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types_new","nullableArray":false,"nullable":true},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"address","members":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}},"nullable":true},"professor":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/expected.json deleted file mode 100644 index d9be65bccfd..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student": "from var personItem in AItem.person\n select {\n id: personItem.id,\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: (personItem.age).toString(),\ncourses: from var coursesItem in personItem.college.courses\n select {\n id: check int:fromString(coursesItem.id),\ncredits: check (coursesItem.credits).ensureType()\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/mapping.json deleted file mode 100644 index f355045c198..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/mapping.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "student":{ - "id":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "AItem.person.id" - ] - }, - "firstName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.firstName" - ] - }, - "lastName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.lastName" - ] - }, - "age":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.age" - ] - }, - "courses":{ - "id":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "AItem.person.college.courses.id" - ] - }, - "credits":{ - "operation":"DIRECT", - "targetType":"float", - "parameters":[ - "AItem.person.college.courses.credits" - ] - } - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/param_def.json deleted file mode 100644 index aeccce20be3..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_20/param_def.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "inputs":{ - "AItem":{ - "person":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "lastName":{ - "type":"string", - "comment":"" - }, - "age":{ - "type":"int", - "comment":"" - }, - "country":{ - "type":"string", - "comment":"" - }, - "college":{ - "courses":{ - "id":{ - "type":"string", - "comment":"" - }, - "name":{ - "type":"string", - "comment":"" - }, - "credits":{ - "type":"decimal", - "comment":"" - } - } - } - } - } - }, - "output":{ - "student":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "lastName":{ - "type":"string", - "comment":"" - }, - "age":{ - "type":"string", - "comment":"" - }, - "courses":{ - "id":{ - "type":"int", - "comment":"" - }, - "credits":{ - "type":"float", - "comment":"" - } - } - } - }, - "inputMetadata":{ - "AItem":{ - "isArrayType":true, - "parameterName":"AItem", - "parameterType":"A[] ", - "type":"record[]", - "fields":{ - "person":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"person", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "lastName":{ - "typeName":"string", - "type":"string", - "typeInstance":"lastName", - "nullable":false, - "optional":false - }, - "age":{ - "typeName":"int", - "type":"int", - "typeInstance":"age", - "nullable":false, - "optional":false - }, - "country":{ - "typeName":"string", - "type":"string", - "typeInstance":"country", - "nullable":false, - "optional":false - }, - "college":{ - "nullable":false, - "optional":false, - "type":"record", - "typeInstance":"college", - "typeName":"record", - "fields":{ - "courses":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"courses", - "fields":{ - "id":{ - "typeName":"string", - "type":"string", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "name":{ - "typeName":"string", - "type":"string", - "typeInstance":"name", - "nullable":false, - "optional":false - }, - "credits":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"credits", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - } - } - }, - "nullableArray":false, - "nullable":false - } - } - } - }, - "outputMetadata":{ - "student":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"student", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "lastName":{ - "typeName":"string", - "type":"string", - "typeInstance":"lastName", - "nullable":false, - "optional":false - }, - "age":{ - "typeName":"string", - "type":"string", - "typeInstance":"age", - "nullable":false, - "optional":false - }, - "courses":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"courses", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "credits":{ - "typeName":"float", - "type":"float", - "typeInstance":"credits", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - }, - "nullableArray":false, - "nullable":false - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/expected.json deleted file mode 100644 index 5557adb1794..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student": "from var personItem in AItem.person\n select {\n id: personItem.id,\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: (personItem.age).toString(),\ncourses: from var coursesItem in personItem.college.courses\n select {\n id: check int:fromString(coursesItem.id),\ncredits: check (coursesItem.credits).ensureType(),\nprofessor: from var professorItem in coursesItem.professor\n select {\n id: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: from var departmentItem in professorItem.department\n select {\n departmentName: departmentItem.departmentName\n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/mapping.json deleted file mode 100644 index 1da398e6658..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/mapping.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "student":{ - "id":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "AItem.person.id" - ] - }, - "firstName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.firstName" - ] - }, - "lastName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.lastName" - ] - }, - "age":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.age" - ] - }, - "courses":{ - "id":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "AItem.person.college.courses.id" - ] - }, - "credits":{ - "operation":"DIRECT", - "targetType":"float", - "parameters":[ - "AItem.person.college.courses.credits" - ] - }, - "professor":{ - "id":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "AItem.person.college.courses.professor.id" - ] - }, - "firstName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.college.courses.professor.firstName" - ] - }, - "department":{ - "departmentName":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "AItem.person.college.courses.professor.department.departmentName" - ] - } - } - } - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/param_def.json deleted file mode 100644 index 9aab4a6b833..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_21/param_def.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "inputs":{ - "AItem":{ - "person":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "lastName":{ - "type":"string", - "comment":"" - }, - "age":{ - "type":"int", - "comment":"" - }, - "country":{ - "type":"string", - "comment":"" - }, - "college":{ - "courses":{ - "id":{ - "type":"string", - "comment":"" - }, - "name":{ - "type":"string", - "comment":"" - }, - "credits":{ - "type":"decimal", - "comment":"" - }, - "professor":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "department":{ - "departmentName":{ - "type":"string", - "comment":"" - } - } - } - } - } - } - } - }, - "output":{ - "student":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "lastName":{ - "type":"string", - "comment":"" - }, - "age":{ - "type":"string", - "comment":"" - }, - "courses":{ - "id":{ - "type":"int", - "comment":"" - }, - "credits":{ - "type":"float", - "comment":"" - }, - "professor":{ - "id":{ - "type":"int", - "comment":"" - }, - "firstName":{ - "type":"string", - "comment":"" - }, - "department":{ - "departmentName":{ - "type":"string", - "comment":"" - } - } - } - } - } - }, - "inputMetadata":{ - "AItem":{ - "isArrayType":true, - "parameterName":"AItem", - "parameterType":"A[] ", - "type":"record[]", - "fields":{ - "person":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"person", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "lastName":{ - "typeName":"string", - "type":"string", - "typeInstance":"lastName", - "nullable":false, - "optional":false - }, - "age":{ - "typeName":"int", - "type":"int", - "typeInstance":"age", - "nullable":false, - "optional":false - }, - "country":{ - "typeName":"string", - "type":"string", - "typeInstance":"country", - "nullable":false, - "optional":false - }, - "college":{ - "nullable":false, - "optional":false, - "type":"record", - "typeInstance":"college", - "typeName":"record", - "fields":{ - "courses":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"courses", - "fields":{ - "id":{ - "typeName":"string", - "type":"string", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "name":{ - "typeName":"string", - "type":"string", - "typeInstance":"name", - "nullable":false, - "optional":false - }, - "credits":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"credits", - "nullable":false, - "optional":false - }, - "professor":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"professor", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "department":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"department", - "fields":{ - "departmentName":{ - "typeName":"string", - "type":"string", - "typeInstance":"departmentName", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - }, - "nullableArray":false, - "nullable":false - } - }, - "nullableArray":false, - "nullable":false - } - } - } - }, - "nullableArray":false, - "nullable":false - } - } - } - }, - "outputMetadata":{ - "student":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"student", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "lastName":{ - "typeName":"string", - "type":"string", - "typeInstance":"lastName", - "nullable":false, - "optional":false - }, - "age":{ - "typeName":"string", - "type":"string", - "typeInstance":"age", - "nullable":false, - "optional":false - }, - "courses":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"courses", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "credits":{ - "typeName":"float", - "type":"float", - "typeInstance":"credits", - "nullable":false, - "optional":false - }, - "professor":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"professor", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "firstName":{ - "typeName":"string", - "type":"string", - "typeInstance":"firstName", - "nullable":false, - "optional":false - }, - "department":{ - "optional":false, - "typeName":"record[]", - "type":"record[]", - "typeInstance":"department", - "fields":{ - "departmentName":{ - "typeName":"string", - "type":"string", - "typeInstance":"departmentName", - "nullable":false, - "optional":false - } - }, - "nullableArray":false, - "nullable":false - } - }, - "nullableArray":false, - "nullable":false - } - }, - "nullableArray":false, - "nullable":false - } - }, - "nullableArray":false, - "nullable":false - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/expected.json deleted file mode 100644 index 4128541717b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"post.id","description":"post.description","author":"author","meta":"{\n tags: re `,`.split(post.tags),\ncategory: post.category,\ncreatedTimeStamp: {\n utcOffset: {\n hours: post.createdTimeStamp.utcOffset?.hours?:0,\nminutes: post.createdTimeStamp.utcOffset?.minutes?:0,\nseconds: post.createdTimeStamp.utcOffset?.seconds \n},\ntimeAbbrev: post.createdTimeStamp.timeAbbrev,\nwhich: post.createdTimeStamp.which,\ndayOfWeek: post.createdTimeStamp.dayOfWeek,\nyear: post.createdTimeStamp.year,\nmonth: post.createdTimeStamp.month,\nday: post.createdTimeStamp.day,\nhour: post.createdTimeStamp.hour,\nminute: post.createdTimeStamp.minute,\nsecond: post.createdTimeStamp.second \n} \n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/mapping.json deleted file mode 100644 index 0665f359856..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/mapping.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "id":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.id" - ] - }, - "description":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "post.description" - ] - }, - "author":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "author.author" - ] - }, - "meta":{ - "tags":{ - "operation":"SPLIT", - "targetType":"string[]", - "parameters":[ - "post.tags", - "," - ] - }, - "category":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "post.category" - ] - }, - "createdTimeStamp":{ - "utcOffset":{ - "hours":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.createdTimeStamp.utcOffset.hours" - ] - }, - "minutes":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.createdTimeStamp.utcOffset.minutes" - ] - }, - "seconds":{ - "operation":"DIRECT", - "targetType":"decimal", - "parameters":[ - "post.createdTimeStamp.utcOffset.seconds" - ] - } - }, - "timeAbbrev":{ - "operation":"DIRECT", - "targetType":"string", - "parameters":[ - "post.createdTimeStamp.timeAbbrev" - ] - }, - "which":{ - "operation":"DIRECT", - "targetType":"0|1", - "parameters":[ - "post.createdTimeStamp.which" - ] - }, - "dayOfWeek":{ - "operation":"DIRECT", - "targetType":"0|1|2|3|4|5|6", - "parameters":[ - "post.createdTimeStamp.dayOfWeek" - ] - }, - "year":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.createdTimeStamp.year" - ] - }, - "month":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.createdTimeStamp.month" - ] - }, - "day":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.createdTimeStamp.day" - ] - }, - "hour":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.createdTimeStamp.hour" - ] - }, - "minute":{ - "operation":"DIRECT", - "targetType":"int", - "parameters":[ - "post.createdTimeStamp.minute" - ] - }, - "second":{ - "operation":"DIRECT", - "targetType":"decimal", - "parameters":[ - "post.createdTimeStamp.second" - ] - } - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/param_def.json deleted file mode 100644 index 829d6f37393..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_22/param_def.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "inputs":{ - "post":{ - "id":{ - "type":"int", - "comment":"" - }, - "description":{ - "type":"string", - "comment":"" - }, - "tags":{ - "type":"string", - "comment":"" - }, - "category":{ - "type":"string", - "comment":"" - }, - "createdTimeStamp":{ - "utcOffset":{ - "hours":{ - "type":"int", - "comment":"" - }, - "minutes":{ - "type":"int", - "comment":"" - }, - "seconds":{ - "type":"decimal", - "comment":"" - } - }, - "timeAbbrev":{ - "type":"string", - "comment":"" - }, - "which":{ - "type":"0|1", - "comment":"" - }, - "dayOfWeek":{ - "type":"0|1|2|3|4|5|6", - "comment":"" - }, - "year":{ - "type":"int", - "comment":"" - }, - "month":{ - "type":"int", - "comment":"" - }, - "day":{ - "type":"int", - "comment":"" - }, - "hour":{ - "type":"int", - "comment":"" - }, - "minute":{ - "type":"int", - "comment":"" - }, - "second":{ - "type":"decimal", - "comment":"" - } - } - }, - "author":{ - "author":{ - "type":"string", - "comment":"" - } - } - }, - "output":{ - "id":{ - "type":"int", - "comment":"" - }, - "description":{ - "type":"string", - "comment":"" - }, - "author":{ - "type":"string", - "comment":"" - }, - "meta":{ - "tags":{ - "type":"string[]", - "comment":"" - }, - "category":{ - "type":"string", - "comment":"" - }, - "createdTimeStamp":{ - "utcOffset":{ - "hours":{ - "type":"int", - "comment":"" - }, - "minutes":{ - "type":"int", - "comment":"" - }, - "seconds":{ - "type":"decimal", - "comment":"" - } - }, - "timeAbbrev":{ - "type":"string", - "comment":"" - }, - "which":{ - "type":"0|1", - "comment":"" - }, - "dayOfWeek":{ - "type":"0|1|2|3|4|5|6", - "comment":"" - }, - "year":{ - "type":"int", - "comment":"" - }, - "month":{ - "type":"int", - "comment":"" - }, - "day":{ - "type":"int", - "comment":"" - }, - "hour":{ - "type":"int", - "comment":"" - }, - "minute":{ - "type":"int", - "comment":"" - }, - "second":{ - "type":"decimal", - "comment":"" - } - } - } - }, - "inputMetadata":{ - "post":{ - "isArrayType":false, - "parameterName":"post", - "parameterType":"Post", - "type":"record", - "fields":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "description":{ - "typeName":"string", - "type":"string", - "typeInstance":"description", - "nullable":false, - "optional":false - }, - "tags":{ - "typeName":"string", - "type":"string", - "typeInstance":"tags", - "nullable":false, - "optional":false - }, - "category":{ - "typeName":"string", - "type":"string", - "typeInstance":"category", - "nullable":false, - "optional":false - }, - "createdTimeStamp":{ - "nullable":false, - "optional":false, - "type":"record", - "typeInstance":"createdTimeStamp", - "typeName":"record", - "fields":{ - "utcOffset":{ - "optional":true, - "typeName":"readonly&record", - "type":"intersection", - "typeInstance":"utcOffset", - "members":{ - "hours":{ - "typeName":"int", - "type":"int", - "typeInstance":"hours", - "nullable":false, - "optional":false - }, - "minutes":{ - "typeName":"int", - "type":"int", - "typeInstance":"minutes", - "nullable":false, - "optional":false - }, - "seconds":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"seconds", - "nullable":false, - "optional":true - } - }, - "nullable":false - }, - "timeAbbrev":{ - "typeName":"string", - "type":"string", - "typeInstance":"timeAbbrev", - "nullable":false, - "optional":true - }, - "which":{ - "optional":true, - "typeName":"0|1", - "type":"union", - "typeInstance":"which", - "members":{ - "0":{ - "typeName":"0", - "type":"0", - "typeInstance":"0", - "nullable":false, - "optional":false - }, - "1":{ - "typeName":"1", - "type":"1", - "typeInstance":"1", - "nullable":false, - "optional":false - } - }, - "nullable":false - }, - "dayOfWeek":{ - "optional":true, - "typeName":"0|1|2|3|4|5|6", - "type":"union", - "typeInstance":"dayOfWeek", - "members":{ - "0":{ - "typeName":"0", - "type":"0", - "typeInstance":"0", - "nullable":false, - "optional":false - }, - "1":{ - "typeName":"1", - "type":"1", - "typeInstance":"1", - "nullable":false, - "optional":false - }, - "2":{ - "typeName":"2", - "type":"2", - "typeInstance":"2", - "nullable":false, - "optional":false - }, - "3":{ - "typeName":"3", - "type":"3", - "typeInstance":"3", - "nullable":false, - "optional":false - }, - "4":{ - "typeName":"4", - "type":"4", - "typeInstance":"4", - "nullable":false, - "optional":false - }, - "5":{ - "typeName":"5", - "type":"5", - "typeInstance":"5", - "nullable":false, - "optional":false - }, - "6":{ - "typeName":"6", - "type":"6", - "typeInstance":"6", - "nullable":false, - "optional":false - } - }, - "nullable":false - }, - "year":{ - "typeName":"int", - "type":"int", - "typeInstance":"year", - "nullable":false, - "optional":false - }, - "month":{ - "typeName":"int", - "type":"int", - "typeInstance":"month", - "nullable":false, - "optional":false - }, - "day":{ - "typeName":"int", - "type":"int", - "typeInstance":"day", - "nullable":false, - "optional":false - }, - "hour":{ - "typeName":"int", - "type":"int", - "typeInstance":"hour", - "nullable":false, - "optional":false - }, - "minute":{ - "typeName":"int", - "type":"int", - "typeInstance":"minute", - "nullable":false, - "optional":false - }, - "second":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"second", - "nullable":false, - "optional":true - } - } - } - } - }, - "author":{ - "isArrayType":false, - "parameterName":"author", - "parameterType":"string ", - "type":"record", - "fields":{ - "author":{ - "typeName":"string", - "type":"string", - "typeInstance":"author", - "nullable":false, - "optional":false - } - } - } - }, - "outputMetadata":{ - "id":{ - "typeName":"int", - "type":"int", - "typeInstance":"id", - "nullable":false, - "optional":false - }, - "description":{ - "typeName":"string", - "type":"string", - "typeInstance":"description", - "nullable":false, - "optional":false - }, - "author":{ - "typeName":"string", - "type":"string", - "typeInstance":"author", - "nullable":false, - "optional":false - }, - "meta":{ - "nullable":false, - "optional":false, - "type":"record", - "typeInstance":"meta", - "typeName":"record", - "fields":{ - "tags":{ - "typeName":"string[]", - "type":"string[]", - "typeInstance":"tags", - "nullable":false, - "optional":false - }, - "category":{ - "typeName":"string", - "type":"string", - "typeInstance":"category", - "nullable":false, - "optional":false - }, - "createdTimeStamp":{ - "nullable":false, - "optional":false, - "type":"record", - "typeInstance":"createdTimeStamp", - "typeName":"record", - "fields":{ - "utcOffset":{ - "optional":true, - "typeName":"readonly&record", - "type":"intersection", - "typeInstance":"utcOffset", - "members":{ - "hours":{ - "typeName":"int", - "type":"int", - "typeInstance":"hours", - "nullable":false, - "optional":false - }, - "minutes":{ - "typeName":"int", - "type":"int", - "typeInstance":"minutes", - "nullable":false, - "optional":false - }, - "seconds":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"seconds", - "nullable":false, - "optional":true - } - }, - "nullable":false - }, - "timeAbbrev":{ - "typeName":"string", - "type":"string", - "typeInstance":"timeAbbrev", - "nullable":false, - "optional":true - }, - "which":{ - "optional":true, - "typeName":"0|1", - "type":"union", - "typeInstance":"which", - "members":{ - "0":{ - "typeName":"0", - "type":"0", - "typeInstance":"0", - "nullable":false, - "optional":false - }, - "1":{ - "typeName":"1", - "type":"1", - "typeInstance":"1", - "nullable":false, - "optional":false - } - }, - "nullable":false - }, - "dayOfWeek":{ - "optional":true, - "typeName":"0|1|2|3|4|5|6", - "type":"union", - "typeInstance":"dayOfWeek", - "members":{ - "0":{ - "typeName":"0", - "type":"0", - "typeInstance":"0", - "nullable":false, - "optional":false - }, - "1":{ - "typeName":"1", - "type":"1", - "typeInstance":"1", - "nullable":false, - "optional":false - }, - "2":{ - "typeName":"2", - "type":"2", - "typeInstance":"2", - "nullable":false, - "optional":false - }, - "3":{ - "typeName":"3", - "type":"3", - "typeInstance":"3", - "nullable":false, - "optional":false - }, - "4":{ - "typeName":"4", - "type":"4", - "typeInstance":"4", - "nullable":false, - "optional":false - }, - "5":{ - "typeName":"5", - "type":"5", - "typeInstance":"5", - "nullable":false, - "optional":false - }, - "6":{ - "typeName":"6", - "type":"6", - "typeInstance":"6", - "nullable":false, - "optional":false - } - }, - "nullable":false - }, - "year":{ - "typeName":"int", - "type":"int", - "typeInstance":"year", - "nullable":false, - "optional":false - }, - "month":{ - "typeName":"int", - "type":"int", - "typeInstance":"month", - "nullable":false, - "optional":false - }, - "day":{ - "typeName":"int", - "type":"int", - "typeInstance":"day", - "nullable":false, - "optional":false - }, - "hour":{ - "typeName":"int", - "type":"int", - "typeInstance":"hour", - "nullable":false, - "optional":false - }, - "minute":{ - "typeName":"int", - "type":"int", - "typeInstance":"minute", - "nullable":false, - "optional":false - }, - "second":{ - "typeName":"decimal", - "type":"decimal", - "typeInstance":"second", - "nullable":false, - "optional":true - } - } - } - } - } - } -} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/expected.json deleted file mode 100644 index 899cfb6e516..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address?.street?:\"\",\nzipcode: coursesItem.address?.zipcode?:\"\" \n},\nprofessor: from var professorItem in coursesItem?.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: {\n color: professorItem.department?.color,\ndepartmentName: professorItem.department?.departmentName?:\"\" \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/mapping.json deleted file mode 100644 index dfa4c87968e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int|()","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/param_def.json deleted file mode 100644 index 10e985f5c8e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_3/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int|()","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"optional":false,"typeName":"record|()","type":"union","typeInstance":"address","members":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}},"nullable":true},"professor":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":true,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record","type":"intersection","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/expected.json deleted file mode 100644 index 4415205325b..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address.street,\nzipcode: coursesItem.address.zipcode \n},\nprofessor: from var professorItem in coursesItem?.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: {\n color: professorItem?.department?.color?:\"BLUE\",\ndepartmentName: professorItem?.department?.departmentName?:\"\" \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/mapping.json deleted file mode 100644 index af221727bd0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/param_def.json deleted file mode 100644 index 20e3509df80..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_4/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":true,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":true}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/expected.json deleted file mode 100644 index 87688b509a9..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem?.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address.street,\nzipcode: coursesItem.address.zipcode \n},\nprofessor: from var professorItem in coursesItem.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: {\n color: professorItem?.department?.color,\ndepartmentName: professorItem?.department?.departmentName?:\"\" \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/mapping.json deleted file mode 100644 index eb065eb2dbb..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED|()","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/param_def.json deleted file mode 100644 index fa90fb72b34..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_5/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":true,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED|()","type":"union","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":true}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED|()","type":"union","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/expected.json deleted file mode 100644 index 87688b509a9..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem?.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address.street,\nzipcode: coursesItem.address.zipcode \n},\nprofessor: from var professorItem in coursesItem.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: {\n color: professorItem?.department?.color,\ndepartmentName: professorItem?.department?.departmentName?:\"\" \n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/mapping.json deleted file mode 100644 index eb065eb2dbb..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED|()","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/param_def.json deleted file mode 100644 index c52efc62883..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_6/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED|()","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":true,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED|()","type":"union","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":true}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"readonly&record|()","type":"union","typeInstance":"department","members":{"color":{"optional":true,"typeName":"BLUE|GREEN|RED|()","type":"union","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":true},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullable":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/expected.json deleted file mode 100644 index 6766961024e..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem?.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address.street,\nzipcode: coursesItem.address.zipcode \n},\nprofessor: from var professorItem in coursesItem.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: from var departmentItem in professorItem?.department ?: []\n select {\n color: departmentItem.color,\ndepartmentName: departmentItem.departmentName\n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/mapping.json deleted file mode 100644 index af221727bd0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/param_def.json deleted file mode 100644 index 523c332bdea..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_7/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":true,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"(readonly&record)[]|()","type":"union[]|()","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":true,"typeName":"(readonly&record)[]|()","type":"union[]|()","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/expected.json deleted file mode 100644 index b5a996eaaa0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem?.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address.street,\nzipcode: coursesItem.address.zipcode \n},\nprofessor: from var professorItem in coursesItem.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: from var departmentItem in professorItem.department ?: []\n select {\n color: departmentItem.color,\ndepartmentName: departmentItem.departmentName\n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/mapping.json deleted file mode 100644 index af221727bd0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/param_def.json deleted file mode 100644 index 354a4d2e564..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_8/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":true,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":false,"typeName":"(readonly&record)[]|()","type":"union[]|()","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":false,"typeName":"(readonly&record)[]|()","type":"union[]|()","typeInstance":"department","members":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/expected.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/expected.json deleted file mode 100644 index db4a22088a4..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/expected.json +++ /dev/null @@ -1 +0,0 @@ -{"student":"from var personItem in A.person\n select {\n id: (personItem?.id).toString(),\nfirstName: personItem.firstName,\nlastName: personItem.lastName,\nage: check (personItem.age).ensureType(),\ntypes_new: personItem.types_new,\ncourses: from var coursesItem in personItem?.college?.courses ?: []\n select {\n colors: coursesItem?.colors?:[],\nid: check int:fromString(coursesItem?.id?:\"\"),\ncredits: check (coursesItem.credits).ensureType(),\naddress: {\n city: coursesItem.address?.city,\nstreet: coursesItem.address.street,\nzipcode: coursesItem.address.zipcode \n},\nprofessor: from var professorItem in coursesItem.professor ?: []\n select {\n types: professorItem.types,\nid: professorItem.id,\nfirstName: professorItem.firstName,\ndepartment: from var departmentItem in professorItem.department\n select {\n color: departmentItem.color,\ndepartmentName: departmentItem.departmentName\n}\n}\n}\n}"} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/mapping.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/mapping.json deleted file mode 100644 index af221727bd0..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/mapping.json +++ /dev/null @@ -1 +0,0 @@ -{"student":{"id":{"operation":"DIRECT","targetType":"string","parameters":["A.person.id"]},"firstName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.firstName"]},"lastName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.lastName"]},"age":{"operation":"DIRECT","targetType":"float|()","parameters":["A.person.age"]},"types_new":{"operation":"DIRECT","targetType":"(string|int)[]","parameters":["A.person.types_new"]},"courses":{"colors":{"operation":"DIRECT","targetType":"(BLUE|GREEN|RED)[]","parameters":["A.person.college.courses.colors"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.id"]},"credits":{"operation":"DIRECT","targetType":"float","parameters":["A.person.college.courses.credits"]},"address":{"city":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.address.city"]},"street":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.street"]},"zipcode":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.address.zipcode"]}},"professor":{"types":{"operation":"DIRECT","targetType":"(string|int)[]|()","parameters":["A.person.college.courses.professor.types"]},"id":{"operation":"DIRECT","targetType":"int","parameters":["A.person.college.courses.professor.id"]},"firstName":{"operation":"DIRECT","targetType":"string|()","parameters":["A.person.college.courses.professor.firstName"]},"department":{"color":{"operation":"DIRECT","targetType":"BLUE|GREEN|RED","parameters":["A.person.college.courses.professor.department.color"]},"departmentName":{"operation":"DIRECT","targetType":"string","parameters":["A.person.college.courses.professor.department.departmentName"]}}}}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/param_def.json b/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/param_def.json deleted file mode 100644 index 960477d4842..00000000000 --- a/workspaces/ballerina/ballerina-extension/test/ai/datamapper/resources/Complex/case_9/param_def.json +++ /dev/null @@ -1 +0,0 @@ -{"inputs":{"A":{"person":{"id":{"type":"int|()","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"int|()","comment":""},"country":{"type":"string","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"college":{"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]|()","comment":""},"id":{"type":"string|()","comment":""},"name":{"type":"string|()","comment":""},"credits":{"type":"decimal","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}}}},"output":{"student":{"id":{"type":"string","comment":""},"firstName":{"type":"string","comment":""},"lastName":{"type":"string|()","comment":""},"age":{"type":"float|()","comment":""},"types_new":{"type":"(string|int)[]","comment":""},"courses":{"colors":{"type":"(BLUE|GREEN|RED)[]","comment":""},"id":{"type":"int","comment":""},"credits":{"type":"float","comment":""},"address":{"city":{"type":"string|()","comment":""},"street":{"type":"string","comment":""},"zipcode":{"type":"string","comment":""}},"professor":{"types":{"type":"(string|int)[]|()","comment":""},"id":{"type":"int","comment":""},"firstName":{"type":"string|()","comment":""},"department":{"color":{"type":"BLUE|GREEN|RED","comment":""},"departmentName":{"type":"string","comment":""}}}}}},"inputMetadata":{"A":{"isArrayType":false,"parameterName":"A","parameterType":"A","type":"record","fields":{"person":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"person","fields":{"id":{"optional":true,"typeName":"int|()","type":"union","typeInstance":"id","nullable":true},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"int|()","type":"union","typeInstance":"age","nullable":true},"country":{"typeName":"string","type":"string","typeInstance":"country","nullable":false,"optional":false},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"college":{"optional":true,"typeName":"record|()","type":"union","typeInstance":"college","members":{"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":true,"typeName":"(BLUE|GREEN|RED)[]|()","type":"union[]|()","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":true},"id":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"id","nullable":true},"name":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"name","nullable":true},"credits":{"typeName":"decimal","type":"decimal","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]|()","type":"union[]|()","typeInstance":"professor","members":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"department","fields":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":true}},"nullableArray":false,"nullable":false}},"nullable":true}},"nullableArray":false,"nullable":false}}}},"outputMetadata":{"student":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"student","fields":{"id":{"typeName":"string","type":"string","typeInstance":"id","nullable":false,"optional":false},"firstName":{"typeName":"string","type":"string","typeInstance":"firstName","nullable":false,"optional":false},"lastName":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"lastName","nullable":true},"age":{"optional":false,"typeName":"float|()","type":"union","typeInstance":"age","nullable":true},"types_new":{"optional":true,"typeName":"(string|int)[]","type":"union[]","typeInstance":"types_new","nullableArray":false,"nullable":false},"courses":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"courses","fields":{"colors":{"optional":false,"typeName":"(BLUE|GREEN|RED)[]","type":"enum[]","typeInstance":"colors","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullableArray":false,"nullable":false},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":false},"credits":{"typeName":"float","type":"float","typeInstance":"credits","nullable":false,"optional":true},"address":{"nullable":false,"optional":false,"type":"record","typeInstance":"address","typeName":"record","fields":{"city":{"optional":true,"typeName":"string|()","type":"union","typeInstance":"city","nullable":true},"street":{"typeName":"string","type":"string","typeInstance":"street","nullable":false,"optional":false},"zipcode":{"typeName":"string","type":"string","typeInstance":"zipcode","nullable":false,"optional":false}}},"professor":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"professor","fields":{"types":{"optional":false,"typeName":"(string|int)[]|()","type":"union[]|()","typeInstance":"types","nullableArray":false,"nullable":true},"id":{"typeName":"int","type":"int","typeInstance":"id","nullable":false,"optional":true},"firstName":{"optional":false,"typeName":"string|()","type":"union","typeInstance":"firstName","nullable":true},"department":{"optional":false,"typeName":"record[]","type":"record[]","typeInstance":"department","fields":{"color":{"optional":false,"typeName":"BLUE|GREEN|RED","type":"enum","typeInstance":"color","members":{"BLUE":{"typeName":"BLUE","type":"BLUE","typeInstance":"BLUE","nullable":false,"optional":false},"GREEN":{"typeName":"GREEN","type":"GREEN","typeInstance":"GREEN","nullable":false,"optional":false},"RED":{"typeName":"RED","type":"RED","typeInstance":"RED","nullable":false,"optional":false}},"nullable":false},"departmentName":{"typeName":"string","type":"string","typeInstance":"departmentName","nullable":false,"optional":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}},"nullableArray":false,"nullable":false}}} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/code.test.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/code.test.ts index 8f3d803424e..ea93b1bacf4 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/code.test.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/code.test.ts @@ -172,7 +172,7 @@ async function setupTestEnvironment(): Promise { } } -suite.only("AI Code Generator Tests Suite", () => { +suite.skip("AI Code Generator Tests Suite", () => { suiteSetup(async function (): Promise { await setupTestEnvironment(); diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/batch-processing.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/batch-processing.ts index d16eba8e1c7..eab486a6be7 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/batch-processing.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/batch-processing.ts @@ -102,18 +102,4 @@ async function setupTestEnvironmentForBatch(projectPath: string): Promise // Give VSCode time to detect the workspace and trigger activation await new Promise(resolve => setTimeout(resolve, TIMING.WORKSPACE_SETTLE_DELAY)); - - // Force extension activation by opening a Ballerina file - try { - const testBalFile = Uri.file(path.join(projectPath, FILES.MAIN_BAL)); - await commands.executeCommand(VSCODE_COMMANDS.OPEN, testBalFile); - await new Promise(resolve => setTimeout(resolve, TIMING.FILE_OPEN_DELAY)); - } catch (error) { - // Fallback: try to execute a ballerina command to force activation - try { - await commands.executeCommand(VSCODE_COMMANDS.SHOW_EXAMPLES); - } catch (cmdError) { - // Extension might still be loading - } - } } diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/constants.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/constants.ts index 002872c0b9a..6225a495d57 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/constants.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/constants.ts @@ -76,6 +76,5 @@ observabilityIncluded = true export const VSCODE_COMMANDS = { CLOSE_ALL_EDITORS: "workbench.action.closeAllEditors", OPEN: "vscode.open", - SHOW_EXAMPLES: "ballerina.showExamples", AI_GENERATE_CODE_CORE: "ballerina.test.ai.generateCodeCore" } as const; diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/evaluator-utils.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/evaluator-utils.ts index 18cd396aab9..49946170609 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/evaluator-utils.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/evaluator-utils.ts @@ -15,7 +15,7 @@ // under the License. import { generateText } from "ai"; -import { ProjectModule, ProjectSource, SourceFile, SourceFiles } from "@wso2/ballerina-core"; +import { ProjectModule, ProjectSource, SourceFile } from "@wso2/ballerina-core"; import { createAnthropic } from "@ai-sdk/anthropic"; import path from "path"; import fs from "fs"; @@ -61,12 +61,12 @@ const evaluationSchema = z.object({ */ export async function evaluateCodeWithLLM( userQuery: string, - initialSource: SourceFiles[], - finalSource: SourceFiles[] + initialSource: SourceFile[], + finalSource: SourceFile[] ): Promise { console.log("šŸ¤– Starting LLM-based semantic evaluation..."); - const stringifySources = (sources: SourceFiles[]): string => { + const stringifySources = (sources: SourceFile[]): string => { if (sources.length === 0) return "No files in the project."; return sources.map(file => `--- File: ${file.filePath} ---\n${file.content}`).join("\n\n"); }; @@ -164,7 +164,9 @@ export async function getProjectSource(dirPath: string): Promise\s*```ballerina([\s\S]*?)```\s*<\/code>/g; let match; diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/test-execution.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/test-execution.ts index 028b2e89c20..c175edc1293 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/test-execution.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/code/utils/test-execution.ts @@ -21,14 +21,14 @@ import { createTestEventHandler } from './test-event-handler'; import { validateTestResult } from './test-validation'; import { VSCODE_COMMANDS } from './constants'; import { getProjectFromResponse, getProjectSource } from "./evaluator-utils"; -import { SourceFiles } from "@wso2/ballerina-core"; +import { SourceFile } from "@wso2/ballerina-core"; /** * Executes a single test case and returns the result */ export async function executeSingleTestCase(useCase: TestUseCase): Promise { console.log(`\nšŸš€ Starting test case: ${useCase.id} - ${useCase.description}`); - + const { handler: testEventHandler, getResult } = createTestEventHandler(useCase); const params: GenerateCodeRequest = { @@ -38,13 +38,13 @@ export async function executeSingleTestCase(useCase: TestUseCase): Promise { +export async function validateTestResult(result: TestEventResult, useCase: TestUseCase, initialSources: SourceFile[], finalSources: SourceFile[]): Promise { const validationDetails = { noErrorCheck: true, noDiagnosticsCheck: true diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/datamapper.test.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/datamapper.test.ts new file mode 100644 index 00000000000..09adc7963f8 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/datamapper.test.ts @@ -0,0 +1,210 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as path from "path"; +import * as vscode from "vscode"; +import * as dotenv from "dotenv"; +import * as fs from "fs"; +import * as assert from "assert"; + +import { testCases } from "./test-cases"; +import { TestCase, DatamapperUsecaseResult, Summary } from "./types"; +import { + DEFAULT_TEST_CONFIG, + TIMING, + PATHS, + VSCODE_COMMANDS, + wait, + processSingleBatch, + handleBatchDelay +} from "./utils"; +import { + ResultManager, + generateComprehensiveSummary, + generateIterationSummary, + generateComprehensiveReport, + logExecutionStart, + logExecutionCompletion +} from "./result-management"; + +/** + * Execute multiple test cases in parallel with comprehensive result management + */ +async function executeParallelTestsWithResults( + testCases: readonly TestCase[] +): Promise { + const resultManager = new ResultManager(); + await resultManager.initializeResultsDirectory(); + + const startTime = Date.now(); + const iterations = DEFAULT_TEST_CONFIG.iterations; + logExecutionStart(testCases.length, DEFAULT_TEST_CONFIG.maxConcurrency, resultManager.getResultsDirectory(), iterations); + + const allUsecaseResults: DatamapperUsecaseResult[] = []; + + // Iterate N times if configured + for (let iteration = 1; iteration <= iterations; iteration++) { + if (iterations > 1) { + console.log(`\n${'='.repeat(80)}`); + console.log(`šŸ”„ STARTING ITERATION ${iteration}/${iterations}`); + console.log('='.repeat(80)); + } + + let batchCount = 0; + + // Process tests in batches to limit concurrency + for (let i = 0; i < testCases.length; i += DEFAULT_TEST_CONFIG.maxConcurrency) { + batchCount++; + const batch = testCases.slice(i, i + DEFAULT_TEST_CONFIG.maxConcurrency); + + // Execute batch and get results + const batchResults = await processSingleBatch(batch, batchCount, iterations > 1 ? iteration : undefined); + + // Persist batch results with iteration info + await persistBatchResults(batchResults, resultManager, i, iterations > 1 ? iteration : undefined); + + // Add to overall results + allUsecaseResults.push(...batchResults); + + // Handle inter-batch delay and monitoring + await handleBatchDelay(i, testCases.length, DEFAULT_TEST_CONFIG.maxConcurrency); + } + + if (iterations > 1) { + const iterationResults = allUsecaseResults.filter(r => r.iteration === iteration); + const iterationPassed = iterationResults.filter(r => r.passed).length; + console.log(`\nāœ… Iteration ${iteration} completed: ${iterationPassed}/${testCases.length} passed (${Math.round(iterationPassed / testCases.length * 100)}%)`); + + // Generate and persist iteration summary + const iterationSummary = generateIterationSummary(iterationResults, iteration); + await resultManager.persistIterationSummary(iterationSummary); + } + } + + console.log(`\nāœ… All ${iterations > 1 ? 'iterations and ' : ''}batches processed. Total test runs: ${allUsecaseResults.length}`); + + // Generate and persist comprehensive summary + const summary = generateComprehensiveSummary(allUsecaseResults, iterations > 1 ? iterations : undefined); + await resultManager.persistSummary(summary); + + // Log completion summary + logExecutionCompletion(startTime, allUsecaseResults, resultManager.getResultsDirectory()); + + return summary; +} + +/** + * Helper function to persist batch results + */ +async function persistBatchResults( + usecaseResults: readonly DatamapperUsecaseResult[], + resultManager: ResultManager, + startIndex: number, + iteration?: number +): Promise { + for (let i = 0; i < usecaseResults.length; i++) { + const resultIndex = startIndex + i; + await resultManager.persistUsecaseResult(usecaseResults[i], resultIndex, iteration); + } +} + +/** + * Sets up the test environment by loading environment variables, + * initializing workspace, and ensuring extension activation + */ +async function setupTestEnvironment(): Promise { + // Load environment variables from .env file if it exists + const envPath = path.resolve(__dirname, PATHS.ENV_FILE_RELATIVE); + if (fs.existsSync(envPath)) { + dotenv.config({ path: envPath }); + console.log("Loaded .env file for AI tests"); + } + + // Poll for AI test command availability + let attempts = 0; + + while (attempts < TIMING.MAX_ACTIVATION_ATTEMPTS) { + const availableCommands = await vscode.commands.getCommands(); + if (availableCommands.includes(VSCODE_COMMANDS.AI_GENERATE_MAPPING_CODE_CORE)) { + break; + } + await new Promise(resolve => setTimeout(resolve, TIMING.EXTENSION_ACTIVATION_RETRY_INTERVAL)); + attempts++; + } + + if (attempts >= TIMING.MAX_ACTIVATION_ATTEMPTS) { + throw new Error("AI test command never registered - extension failed to activate"); + } + + // Log API key availability for test visibility + const anthropicApiKey = process.env.ANTHROPIC_API_KEY; + if (anthropicApiKey && anthropicApiKey.trim() !== "") { + console.log("ANTHROPIC_API_KEY found - tests will attempt BYOK authentication"); + console.log("Using environment variable directly for authentication"); + } else { + console.log("No ANTHROPIC_API_KEY found - tests will expect authentication errors"); + } +} + +suite.only("AI Datamapper Tests Suite", () => { + + suiteSetup(async function (): Promise { + await setupTestEnvironment(); + }); + + suiteTeardown(async function (): Promise { + console.log("Test suite completed - using environment-based auth, no credentials to clean up"); + }); + + suite("Datamapper Code Generation", () => { + // Check API key before running any tests in this suite + const anthropicApiKey = process.env.ANTHROPIC_API_KEY; + const hasAnthropicKey = anthropicApiKey && anthropicApiKey.trim() !== ""; + + if (!hasAnthropicKey) { + console.log(`\nāš ļø Skipping entire test suite: ANTHROPIC_API_KEY not set`); + return; // Skip the entire suite + } + + test("Execute all datamapper test cases in parallel with comprehensive result management", async function (): Promise { + + console.log(`\nšŸ”§ Test Configuration (Comprehensive Results):`); + console.log(` API Key Available: Yes`); + console.log(` Total Test Cases: ${testCases.length}`); + console.log(` Iterations: ${DEFAULT_TEST_CONFIG.iterations}`); + console.log(` Max Concurrency: ${DEFAULT_TEST_CONFIG.maxConcurrency}`); + + await wait(TIMING.TEST_WAIT_TIME); // Wait for workspace to settle + + // Execute all test cases with comprehensive result management + const summary = await executeParallelTestsWithResults(testCases); + + // Generate comprehensive report + generateComprehensiveReport(summary); + + // Assert overall test success + console.log(`\nāœ… Comprehensive test execution completed:`); + console.log(` Success Rate: ${Math.round(summary.accuracy)}%`); + if (summary.iterations && summary.iterations > 1) { + console.log(` Total Iterations: ${summary.iterations}`); + console.log(` Total Test Runs: ${summary.totalTests}`); + } + + assert.ok(true); + }); + + }); +}); diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/index.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/index.ts new file mode 100644 index 00000000000..33f45a6d93d --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/index.ts @@ -0,0 +1,19 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +export * from './result-persistence'; +export * from './result-manager'; +export * from './report-generator'; diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/report-generator.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/report-generator.ts new file mode 100644 index 00000000000..801c340283c --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/report-generator.ts @@ -0,0 +1,287 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { Summary, DatamapperUsecaseResult, IterationSummary, TestCaseAccuracy } from '../types'; + +/** + * Generates comprehensive report from test summary + */ +export function generateComprehensiveReport(summary: Summary): void { + console.log('\n' + '='.repeat(80)); + console.log('šŸ“Š DATAMAPPER TEST EXECUTION REPORT'); + console.log('='.repeat(80)); + + console.log(`\nšŸ“ˆ OVERALL SUMMARY:`); + console.log(` Total Test Cases: ${summary.totalTests}`); + console.log(` Passed: ${summary.totalPassed} (${Math.round(summary.accuracy)}%)`); + console.log(` Failed: ${summary.totalFailed} (${Math.round((summary.totalFailed / summary.totalTests) * 100)}%)`); + console.log(` Test Case Accuracy: ${summary.accuracy}%`); + + // Display field-level accuracy + if (summary.totalFields !== undefined && summary.fieldAccuracy !== undefined) { + console.log(`\nšŸŽÆ FIELD-LEVEL ACCURACY:`); + console.log(` Total Fields/Assertions: ${summary.totalFields}`); + console.log(` Fields Passed: ${summary.totalFieldsPassed}`); + console.log(` Fields Failed: ${summary.totalFields - (summary.totalFieldsPassed || 0)}`); + console.log(` Field Accuracy: ${summary.fieldAccuracy.toFixed(2)}%`); + } + + // Display iteration-specific summaries if multiple iterations + if (summary.iterations && summary.iterations > 1 && summary.iterationResults) { + logIterationSummaries(summary.iterationResults); + } + + // Display per-test-case accuracy if multiple iterations + if (summary.iterations && summary.iterations > 1 && summary.perTestCaseAccuracy) { + logPerTestCaseAccuracy(summary.perTestCaseAccuracy); + } + + console.log('='.repeat(80)); +} + +/** + * Logs iteration summaries + */ +function logIterationSummaries(iterationResults: readonly IterationSummary[]): void { + console.log(`\nšŸ”„ ITERATION SUMMARIES:`); + iterationResults.forEach((iteration) => { + console.log(`\n Iteration ${iteration.iteration}:`); + console.log(` Total Tests: ${iteration.totalTests}`); + console.log(` Passed: ${iteration.totalPassed} (${Math.round(iteration.accuracy)}%)`); + console.log(` Failed: ${iteration.totalFailed}`); + console.log(` Average Duration: ${iteration.averageDuration.toFixed(2)}ms`); + }); +} + +/** + * Logs per-test-case accuracy + */ +function logPerTestCaseAccuracy(perTestCaseAccuracy: readonly TestCaseAccuracy[]): void { + console.log(`\nšŸ“Š PER-TEST-CASE ACCURACY:`); + perTestCaseAccuracy.forEach((testCase) => { + console.log(` ${testCase.testName}:`); + console.log(` Success: ${testCase.successCount}/${testCase.totalAttempts} (${Math.round(testCase.accuracy)}%)`); + }); +} + +/** + * Generates comprehensive summary from results + */ +export function generateComprehensiveSummary( + results: readonly DatamapperUsecaseResult[], + iterations?: number +): Summary { + const totalPassed = results.filter(r => r.passed).length; + const totalFailed = results.length - totalPassed; + const accuracy = (totalPassed / results.length) * 100; + const totalDuration = results.reduce((sum, r) => sum + (r.duration || 0), 0); + const averageDuration = totalDuration / results.length; + + // Calculate field-level accuracy + let totalFields = 0; + let totalFieldsPassed = 0; + + results.forEach(result => { + if (result.fieldResults) { + totalFields += result.fieldResults.length; + totalFieldsPassed += result.fieldResults.filter(f => f.passed).length; + } + }); + + const fieldAccuracy = totalFields > 0 ? (totalFieldsPassed / totalFields) * 100 : 0; + + // Build summary with or without iteration data + if (iterations && iterations > 1) { + return { + results, + totalTests: results.length, + totalPassed, + totalFailed, + accuracy, + totalDuration, + averageDuration, + timestamp: Date.now(), + iterations, + iterationResults: generateIterationResults(results, iterations), + perTestCaseAccuracy: generatePerTestCaseAccuracy(results), + totalFields, + totalFieldsPassed, + fieldAccuracy + }; + } + + return { + results, + totalTests: results.length, + totalPassed, + totalFailed, + accuracy, + totalDuration, + averageDuration, + timestamp: Date.now(), + totalFields, + totalFieldsPassed, + fieldAccuracy + }; +} + +/** + * Generates iteration-specific results + */ +function generateIterationResults( + results: readonly DatamapperUsecaseResult[], + iterations: number +): IterationSummary[] { + const iterationSummaries: IterationSummary[] = []; + + for (let i = 1; i <= iterations; i++) { + const iterationResults = results.filter(r => r.iteration === i); + const totalPassed = iterationResults.filter(r => r.passed).length; + const totalFailed = iterationResults.length - totalPassed; + const accuracy = (totalPassed / iterationResults.length) * 100; + const totalDuration = iterationResults.reduce((sum, r) => sum + (r.duration || 0), 0); + const averageDuration = totalDuration / iterationResults.length; + + iterationSummaries.push({ + iteration: i, + totalTests: iterationResults.length, + totalPassed, + totalFailed, + accuracy, + totalDuration, + averageDuration, + timestamp: Date.now(), + results: iterationResults + }); + } + + return iterationSummaries; +} + +/** + * Generates per-test-case accuracy across iterations + */ +function generatePerTestCaseAccuracy( + results: readonly DatamapperUsecaseResult[] +): TestCaseAccuracy[] { + const testCaseMap = new Map(); + + results.forEach((result) => { + const existing = testCaseMap.get(result.testName) || { successCount: 0, totalAttempts: 0 }; + existing.totalAttempts++; + if (result.passed) { + existing.successCount++; + } + testCaseMap.set(result.testName, existing); + }); + + const perTestCaseAccuracy: TestCaseAccuracy[] = []; + let index = 0; + + testCaseMap.forEach((stats, testName) => { + perTestCaseAccuracy.push({ + testCaseIndex: index++, + testName, + successCount: stats.successCount, + totalAttempts: stats.totalAttempts, + accuracy: (stats.successCount / stats.totalAttempts) * 100 + }); + }); + + return perTestCaseAccuracy; +} + +/** + * Generates iteration summary + */ +export function generateIterationSummary( + results: readonly DatamapperUsecaseResult[], + iteration: number +): IterationSummary { + const totalPassed = results.filter(r => r.passed).length; + const totalFailed = results.length - totalPassed; + const accuracy = (totalPassed / results.length) * 100; + const totalDuration = results.reduce((sum, r) => sum + (r.duration || 0), 0); + const averageDuration = totalDuration / results.length; + + return { + iteration, + totalTests: results.length, + totalPassed, + totalFailed, + accuracy, + totalDuration, + averageDuration, + timestamp: Date.now(), + results + }; +} + +/** + * Logs execution start + */ +export function logExecutionStart( + totalTests: number, + maxConcurrency: number, + resultsDir: string, + iterations: number +): void { + console.log('\n' + '='.repeat(80)); + console.log('šŸš€ DATAMAPPER TEST EXECUTION STARTED'); + console.log('='.repeat(80)); + console.log(` Total Test Cases: ${totalTests}`); + console.log(` Iterations: ${iterations}`); + console.log(` Max Concurrency: ${maxConcurrency}`); + console.log(` Results Directory: ${resultsDir}`); + console.log('='.repeat(80)); +} + +/** + * Logs execution completion + */ +export function logExecutionCompletion( + startTime: number, + results: readonly DatamapperUsecaseResult[], + resultsDir: string +): void { + const duration = Date.now() - startTime; + const totalPassed = results.filter(r => r.passed).length; + const totalFailed = results.length - totalPassed; + + // Calculate field-level accuracy + let totalFields = 0; + let totalFieldsPassed = 0; + + results.forEach(result => { + if (result.fieldResults) { + totalFields += result.fieldResults.length; + totalFieldsPassed += result.fieldResults.filter(f => f.passed).length; + } + }); + + const fieldAccuracy = totalFields > 0 ? (totalFieldsPassed / totalFields) * 100 : 0; + + console.log('\n' + '='.repeat(80)); + console.log('āœ… DATAMAPPER TEST EXECUTION COMPLETED'); + console.log('='.repeat(80)); + console.log(` Total Duration: ${(duration / 1000).toFixed(2)}s`); + console.log(` Passed: ${totalPassed}/${results.length}`); + console.log(` Failed: ${totalFailed}/${results.length}`); + console.log(` Test Case Accuracy: ${Math.round((totalPassed / results.length) * 100)}%`); + console.log(` Field-Level Accuracy: ${fieldAccuracy.toFixed(2)}% (${totalFieldsPassed}/${totalFields} fields)`); + console.log(` Results saved to: ${resultsDir}`); + console.log('='.repeat(80)); +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/result-manager.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/result-manager.ts new file mode 100644 index 00000000000..78756da9c3a --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/result-manager.ts @@ -0,0 +1,73 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as fs from "fs"; +import * as path from "path"; +import { DatamapperUsecaseResult, Summary, IterationSummary } from '../types'; +import { persistUsecaseResult, persistSummary, persistIterationSummary } from './result-persistence'; +import { PATHS } from '../utils/constants'; + +/** + * Comprehensive Result Persistence System for Datamapper + */ +export class ResultManager { + private readonly resultsDir: string; + + constructor(baseDir: string = PATHS.DEFAULT_RESULTS_DIR) { + this.resultsDir = path.resolve(__dirname, baseDir); + } + + /** + * Initializes the results directory by removing existing and creating new + */ + async initializeResultsDirectory(): Promise { + if (fs.existsSync(this.resultsDir)) { + await fs.promises.rm(this.resultsDir, { recursive: true, force: true }); + console.log("Existing results directory removed"); + } + + await fs.promises.mkdir(this.resultsDir, { recursive: true }); + console.log("Results directory initialized"); + } + + /** + * Persists a single use case result + */ + async persistUsecaseResult(usecaseResult: DatamapperUsecaseResult, index: number, iteration?: number): Promise { + await persistUsecaseResult(usecaseResult, index, this.resultsDir, iteration); + } + + /** + * Persists the comprehensive summary + */ + async persistSummary(summary: Summary): Promise { + await persistSummary(summary, this.resultsDir); + } + + /** + * Persists an iteration summary + */ + async persistIterationSummary(iterationSummary: IterationSummary): Promise { + await persistIterationSummary(iterationSummary, this.resultsDir); + } + + /** + * Returns the results directory path + */ + getResultsDirectory(): string { + return this.resultsDir; + } +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/result-persistence.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/result-persistence.ts new file mode 100644 index 00000000000..0526ce66518 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/result-management/result-persistence.ts @@ -0,0 +1,133 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as fs from "fs"; +import * as path from "path"; +import { DatamapperUsecaseResult, Summary, SummaryCompact, IterationSummary } from '../types'; + +/** + * Persists a single datamapper use case result to the file system + */ +export async function persistUsecaseResult( + usecaseResult: DatamapperUsecaseResult, + index: number, + resultsDir: string, + iteration?: number +): Promise { + // Create directory structure: results/iteration_X/Y/ or results/Y/ if no iterations + let resultDir: string; + if (iteration !== undefined) { + const iterationDir = path.join(resultsDir, `iteration_${iteration}`); + await fs.promises.mkdir(iterationDir, { recursive: true }); + resultDir = path.join(iterationDir, index.toString()); + } else { + resultDir = path.join(resultsDir, index.toString()); + } + await fs.promises.mkdir(resultDir, { recursive: true }); + + // Write result summary + await fs.promises.writeFile( + path.join(resultDir, "result.json"), + JSON.stringify({ + testName: usecaseResult.testName, + passed: usecaseResult.passed, + duration: usecaseResult.duration, + iteration: usecaseResult.iteration, + failureReason: usecaseResult.failureReason, + fieldResults: usecaseResult.fieldResults + }, null, 2) + ); + + // Write bal test results + await fs.promises.writeFile( + path.join(resultDir, "bal-test-result.json"), + JSON.stringify(usecaseResult.balTestResult, null, 2) + ); + + // Write field-level results separately for easy analysis + if (usecaseResult.fieldResults && usecaseResult.fieldResults.length > 0) { + await fs.promises.writeFile( + path.join(resultDir, "field-results.json"), + JSON.stringify(usecaseResult.fieldResults, null, 2) + ); + } + + console.log(`Result persisted for index ${index}${iteration !== undefined ? ` (iteration ${iteration})` : ''}: ${usecaseResult.testName}`); +} + +/** + * Persists the comprehensive summary + */ +export async function persistSummary(summary: Summary, resultsDir: string): Promise { + const compactSummary: SummaryCompact = { + totalTests: summary.totalTests, + totalPassed: summary.totalPassed, + totalFailed: summary.totalFailed, + accuracy: summary.accuracy + }; + + await fs.promises.writeFile( + path.join(resultsDir, "summary.json"), + JSON.stringify(compactSummary, null, 2) + ); + + // Write detailed summary with per-test-case accuracy if available + if (summary.perTestCaseAccuracy) { + await fs.promises.writeFile( + path.join(resultsDir, "per-test-case-accuracy.json"), + JSON.stringify(summary.perTestCaseAccuracy, null, 2) + ); + } + + // Write field-level accuracy summary + if (summary.totalFields !== undefined && summary.totalFieldsPassed !== undefined) { + await fs.promises.writeFile( + path.join(resultsDir, "field-level-accuracy.json"), + JSON.stringify({ + totalFields: summary.totalFields, + totalFieldsPassed: summary.totalFieldsPassed, + totalFieldsFailed: summary.totalFields - summary.totalFieldsPassed, + fieldAccuracy: summary.fieldAccuracy + }, null, 2) + ); + } + + console.log("Summary persisted to results directory"); +} + +/** + * Persists an iteration summary + */ +export async function persistIterationSummary(iterationSummary: IterationSummary, resultsDir: string): Promise { + const iterationDir = path.join(resultsDir, `iteration_${iterationSummary.iteration}`); + await fs.promises.mkdir(iterationDir, { recursive: true }); + + await fs.promises.writeFile( + path.join(iterationDir, "iteration-summary.json"), + JSON.stringify({ + iteration: iterationSummary.iteration, + totalTests: iterationSummary.totalTests, + totalPassed: iterationSummary.totalPassed, + totalFailed: iterationSummary.totalFailed, + accuracy: iterationSummary.accuracy, + totalDuration: iterationSummary.totalDuration, + averageDuration: iterationSummary.averageDuration, + timestamp: iterationSummary.timestamp + }, null, 2) + ); + + console.log(`Iteration ${iterationSummary.iteration} summary persisted`); +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/test-cases.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/test-cases.ts new file mode 100644 index 00000000000..96cc3a8606f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/test-cases.ts @@ -0,0 +1,42 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as path from "path"; +import { TestCase } from "./types"; +import { PATHS } from "./utils/constants"; + +const PROJECT_ROOT = path.resolve(__dirname, PATHS.PROJECT_ROOT_RELATIVE); + +/** + * Test cases for datamapper code generation + */ +export const testCases: TestCase[] = [ + { + name: "Person to Student mapping", + resourcePath: path.join(PROJECT_ROOT, "case1"), + expectedFunctionName: "transform", + }, + { + name: "Employee to EmployeeInfo mapping", + resourcePath: path.join(PROJECT_ROOT, "case2"), + expectedFunctionName: "transform", + }, + { + name: "Student to PersonalProfile mapping", + resourcePath: path.join(PROJECT_ROOT, "case3"), + expectedFunctionName: "transform", + } +]; diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/config-types.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/config-types.ts new file mode 100644 index 00000000000..660ae90eae8 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/config-types.ts @@ -0,0 +1,23 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * Test configuration + */ +export interface TestConfiguration { + readonly maxConcurrency: number; + readonly iterations: number; +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/index.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/index.ts new file mode 100644 index 00000000000..70a5e24582e --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/index.ts @@ -0,0 +1,19 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +export * from './test-types'; +export * from './result-types'; +export * from './config-types'; diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/result-types.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/result-types.ts new file mode 100644 index 00000000000..30a153ec759 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/result-types.ts @@ -0,0 +1,98 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { BalTestResult } from "./test-types"; + +/** + * Field-level accuracy tracking + */ +export interface FieldAccuracy { + readonly fieldName: string; + readonly testName: string; + readonly passed: boolean; + readonly expected?: string; + readonly actual?: string; +} + +/** + * Datamapper use case result + */ +export interface DatamapperUsecaseResult { + readonly testName: string; + readonly balTestResult: BalTestResult; + readonly passed: boolean; + readonly duration?: number; + readonly timestamp?: number; + readonly failureReason?: string; + readonly iteration?: number; + readonly fieldResults?: readonly FieldAccuracy[]; +} + +/** + * Per-test-case accuracy across iterations + */ +export interface TestCaseAccuracy { + readonly testCaseIndex: number; + readonly testName: string; + readonly successCount: number; + readonly totalAttempts: number; + readonly accuracy: number; +} + +/** + * Iteration-specific summary + */ +export interface IterationSummary { + readonly iteration: number; + readonly totalTests: number; + readonly totalPassed: number; + readonly totalFailed: number; + readonly accuracy: number; + readonly totalDuration: number; + readonly averageDuration: number; + readonly timestamp: number; + readonly results: readonly DatamapperUsecaseResult[]; +} + +/** + * Comprehensive summary of all datamapper test results + */ +export interface Summary { + readonly results: readonly DatamapperUsecaseResult[]; + readonly totalTests: number; + readonly totalPassed: number; + readonly totalFailed: number; + readonly accuracy: number; + readonly totalDuration: number; + readonly averageDuration: number; + readonly timestamp: number; + readonly iterations?: number; + readonly iterationResults?: readonly IterationSummary[]; + readonly perTestCaseAccuracy?: readonly TestCaseAccuracy[]; + readonly totalFields?: number; + readonly totalFieldsPassed?: number; + readonly fieldAccuracy?: number; +} + +/** + * Compact summary for persistence + */ +export interface SummaryCompact { + readonly totalTests: number; + readonly totalPassed: number; + readonly totalFailed: number; + readonly accuracy: number; +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/test-types.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/test-types.ts new file mode 100644 index 00000000000..6afc3e4966f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/types/test-types.ts @@ -0,0 +1,70 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +/** + * Test case definition for datamapper + */ +export interface TestCase { + readonly name: string; + readonly resourcePath: string; + readonly expectedFunctionName: string; +} + +/** + * Test event result + */ +export interface TestEventResult { + started: boolean; + completed: boolean; + error?: string; + fileArray?: any[]; + content?: string; +} + +/** + * Individual test assertion result + */ +export interface TestAssertionResult { + readonly testName: string; + readonly fieldName: string; + readonly passed: boolean; + readonly expected?: string; + readonly actual?: string; +} + +/** + * Ballerina test result + */ +export interface BalTestResult { + readonly passed: number; + readonly failed: number; + readonly skipped: number; + readonly total: number; + readonly output: string; + readonly success: boolean; + readonly assertions?: readonly TestAssertionResult[]; +} + +/** + * Datamapper test result + */ +export interface DatamapperTestResult { + readonly testCase: TestCase; + readonly generationResult: TestEventResult; + readonly balTestResult?: BalTestResult; + readonly passed: boolean; + readonly failureReason?: string; +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/batch-processing.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/batch-processing.ts new file mode 100644 index 00000000000..4288bfb6120 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/batch-processing.ts @@ -0,0 +1,146 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { TestCase, DatamapperUsecaseResult } from "../types"; +import { executeDatamapperTest, updateMainBalFile, runBalTest } from "./test-execution"; +import { DEFAULT_TEST_CONFIG, TIMING, wait } from "./constants"; + +/** + * Process a single test case and return the result + */ +export async function processSingleTestCase( + testCase: TestCase, + iteration?: number +): Promise { + const startTime = Date.now(); + + console.log(`\n${'='.repeat(80)}`); + console.log(`šŸ“‹ Processing: ${testCase.name}${iteration ? ` (Iteration ${iteration})` : ''}`); + console.log('='.repeat(80)); + + const generationResult = await executeDatamapperTest(testCase); + + if (generationResult.error) { + return { + testName: testCase.name, + balTestResult: { passed: 0, failed: 0, skipped: 0, total: 0, output: "", success: false }, + passed: false, + failureReason: `Generation failed: ${generationResult.error}`, + duration: Date.now() - startTime, + timestamp: Date.now(), + iteration + }; + } + + if (!generationResult.fileArray || generationResult.fileArray.length === 0) { + return { + testName: testCase.name, + balTestResult: { passed: 0, failed: 0, skipped: 0, total: 0, output: "", success: false }, + passed: false, + failureReason: "No files generated", + duration: Date.now() - startTime, + timestamp: Date.now(), + iteration + }; + } + + // Write all generated files to disk + const fs = require("fs"); + for (const file of generationResult.fileArray) { + console.log(`āœ… Writing generated file: ${file.filePath}`); + await fs.promises.writeFile(file.filePath, file.content, "utf-8"); + } + + // Wait to ensure files are properly persisted + console.log(`ā³ Waiting ${TIMING.FILE_WRITE_DELAY}ms for files to be persisted...`); + await wait(TIMING.FILE_WRITE_DELAY); + + // Additional wait before running bal test to ensure file system stability + console.log(`ā³ Waiting ${TIMING.PRE_BAL_TEST_DELAY}ms before running bal test...`); + await wait(TIMING.PRE_BAL_TEST_DELAY); + + // Run bal test to validate generated code + const balTestResult = await runBalTest(testCase); + + // Test passes if bal test succeeds + const passed = balTestResult.success; + + let failureReason: string | undefined; + if (!passed) { + failureReason = `Bal test failed: ${balTestResult.failed} test(s) failed`; + } + + // Extract field-level results from assertions + const fieldResults = balTestResult.assertions?.map(assertion => ({ + fieldName: assertion.fieldName, + testName: assertion.testName, + passed: assertion.passed, + expected: assertion.expected, + actual: assertion.actual + })) || []; + + console.log(`\n${passed ? 'āœ…' : 'āŒ'} Test ${passed ? 'PASSED' : 'FAILED'} for ${testCase.name}`); + if (failureReason) { + console.log(` Reason: ${failureReason}`); + } + + return { + testName: testCase.name, + balTestResult, + passed, + failureReason, + duration: Date.now() - startTime, + timestamp: Date.now(), + iteration, + fieldResults + }; +} + +/** + * Process a batch of test cases + */ +export async function processSingleBatch( + testCases: readonly TestCase[], + batchCount: number, + iteration?: number +): Promise { + console.log(`\n${'='.repeat(80)}`); + console.log(`šŸ”„ Processing Batch ${batchCount}${iteration ? ` (Iteration ${iteration})` : ''} - ${testCases.length} test case(s)`); + console.log('='.repeat(80)); + + const results = await Promise.all( + testCases.map(testCase => processSingleTestCase(testCase, iteration)) + ); + + const passed = results.filter(r => r.passed).length; + console.log(`\nāœ… Batch ${batchCount} completed: ${passed}/${testCases.length} passed`); + + return results; +} + +/** + * Handle inter-batch delay + */ +export async function handleBatchDelay( + currentIndex: number, + totalTests: number, + batchSize: number +): Promise { + if (currentIndex + batchSize < totalTests) { + console.log(`\nā³ Waiting ${TIMING.INTER_BATCH_DELAY}ms before next batch...\n`); + await wait(TIMING.INTER_BATCH_DELAY); + } +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/constants.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/constants.ts new file mode 100644 index 00000000000..1f4f39ffb69 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/constants.ts @@ -0,0 +1,74 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { TestConfiguration } from '../types'; + +/** + * Default test configuration + */ +export const DEFAULT_TEST_CONFIG: TestConfiguration = { + maxConcurrency: 1, + iterations: 1 +} as const; + +/** + * Timing constants + */ +export const TIMING = { + WORKSPACE_SETUP_DELAY: 10000, + WORKSPACE_SETTLE_DELAY: 3000, + EXTENSION_ACTIVATION_RETRY_INTERVAL: 2000, + MAX_ACTIVATION_ATTEMPTS: 30, + INTER_BATCH_DELAY: 2000, + TEST_WAIT_TIME: 15000, + BAL_TEST_TIMEOUT: 60000, + FILE_WRITE_DELAY: 2000, + PRE_BAL_TEST_DELAY: 3000 +} as const; + +/** + * Path constants + */ +export const PATHS = { + PROJECT_ROOT_RELATIVE: "../../../../../test/data/ai_datamapper", + ENV_FILE_RELATIVE: "../../../../.env", + DEFAULT_RESULTS_DIR: "../../../../../../test/ai/evals/datamapper/results" +} as const; + +/** + * File constants + */ +export const FILES = { + MAIN_BAL: "main.bal", + TYPES_BAL: "types.bal", + BALLERINA_TOML: "Ballerina.toml" +} as const; + +/** + * VS Code commands + */ +export const VSCODE_COMMANDS = { + CLOSE_ALL_EDITORS: "workbench.action.closeAllEditors", + OPEN: "vscode.open", + AI_GENERATE_MAPPING_CODE_CORE: "ballerina.test.ai.generatemappingCodecore" +} as const; + +/** + * Wait utility function + */ +export async function wait(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/index.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/index.ts new file mode 100644 index 00000000000..d7d0eaa4292 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/index.ts @@ -0,0 +1,20 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +export * from './constants'; +export * from './test-event-handler'; +export * from './test-execution'; +export * from './batch-processing'; diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/test-event-handler.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/test-event-handler.ts new file mode 100644 index 00000000000..b25754cc0aa --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/test-event-handler.ts @@ -0,0 +1,48 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import { TestEventResult } from "../types"; + +/** + * Create a test event handler for capturing datamapper generation events + */ +export function createTestEventHandler(): { handler: any; getResult: () => TestEventResult } { + const result: TestEventResult = { + started: false, + completed: false, + }; + + const handler = (event: any) => { + console.log("Event received:", event.type); + + if (event.type === "start") { + result.started = true; + } else if (event.type === "stop") { + result.completed = true; + } else if (event.type === "error") { + result.error = event.content; + } else if (event.type === "generated_sources") { + result.fileArray = event.fileArray; + } else if (event.type === "content_block") { + result.content = event.content; + } + }; + + return { + handler, + getResult: () => result, + }; +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/test-execution.ts b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/test-execution.ts new file mode 100644 index 00000000000..d3d61dff561 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/ai/evals/datamapper/utils/test-execution.ts @@ -0,0 +1,228 @@ +// Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + +// WSO2 LLC. licenses this file to you under the Apache License, +// Version 2.0 (the "License"); you may not use this file except +// in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as vscode from "vscode"; +import * as fs from "fs"; +import * as path from "path"; +import { exec } from "child_process"; +import { promisify } from "util"; +import { ProcessMappingParametersRequest } from "@wso2/ballerina-core"; +import { TestCase, TestEventResult, BalTestResult } from "../types"; +import { VSCODE_COMMANDS, TIMING, FILES } from "./constants"; +import { createTestEventHandler } from "./test-event-handler"; + +const execAsync = promisify(exec); + +/** + * Setup workspace for test execution + */ +async function setupWorkspace(projectPath: string): Promise { + console.log(`šŸ“‚ Setting up workspace: ${projectPath}`); + + // Close all editors first + await vscode.commands.executeCommand(VSCODE_COMMANDS.CLOSE_ALL_EDITORS); + + // Add the Ballerina workspace to trigger workspaceContains activation event + const currentFolderCount = vscode.workspace.workspaceFolders?.length || 0; + vscode.workspace.updateWorkspaceFolders(0, currentFolderCount, { + uri: vscode.Uri.file(projectPath), + }); + + // Wait for workspace to be added + await new Promise(resolve => setTimeout(resolve, TIMING.WORKSPACE_SETUP_DELAY)); + + // Force extension activation by opening the types file first (to load type definitions) + try { + const typesBalFile = vscode.Uri.file(path.join(projectPath, FILES.TYPES_BAL)); + console.log(`šŸ“„ Opening types file: ${typesBalFile.fsPath}`); + await vscode.commands.executeCommand(VSCODE_COMMANDS.OPEN, typesBalFile); + await new Promise(resolve => setTimeout(resolve, 2000)); + + // Then open main.bal file + const mainBalFile = vscode.Uri.file(path.join(projectPath, FILES.MAIN_BAL)); + console.log(`šŸ“„ Opening main file: ${mainBalFile.fsPath}`); + await vscode.commands.executeCommand(VSCODE_COMMANDS.OPEN, mainBalFile); + await new Promise(resolve => setTimeout(resolve, 2000)); + } catch (error) { + console.error("Error opening files:", error); + } + + // Give extra time for language server to index all files + console.log(`ā³ Waiting for language server to index files...`); + await new Promise(resolve => setTimeout(resolve, TIMING.WORKSPACE_SETTLE_DELAY)); +} + +/** + * Execute datamapper test for a single test case + */ +export async function executeDatamapperTest(testCase: TestCase): Promise { + console.log(`\nšŸš€ Starting datamapper test: ${testCase.name}`); + + const { handler, getResult } = createTestEventHandler(); + + // Setup workspace properly + await setupWorkspace(testCase.resourcePath); + + // Wait for workspace to stabilize and language server to index + await new Promise(resolve => setTimeout(resolve, TIMING.WORKSPACE_SETTLE_DELAY)); + + const params: ProcessMappingParametersRequest = { + parameters: { + inputRecord: [], + outputRecord: "", + functionName: testCase.expectedFunctionName, + } + }; + + try { + await vscode.commands.executeCommand( + VSCODE_COMMANDS.AI_GENERATE_MAPPING_CODE_CORE, + params, + handler + ); + + const result = getResult(); + return result; + } catch (error) { + console.error(`āŒ Test case ${testCase.name} failed with error:`, error); + const result = getResult(); + return result; + } +} + +/** + * Update main.bal file with generated code + */ +export async function updateMainBalFile(testCase: TestCase, generatedCode: string): Promise { + const mainBalPath = `${testCase.resourcePath}/main.bal`; + await fs.promises.writeFile(mainBalPath, generatedCode, "utf-8"); + console.log(`āœ… Updated ${mainBalPath} with generated mapping code`); +} + +/** + * Parse individual test assertions from bal test output + */ +function parseTestAssertions(output: string): any[] { + const assertions: any[] = []; + + const assertionPattern = /\[fail\]\s+(\w+):\s+Assertion Failed!\s+expected:\s+'([^']*)'\s+actual\s+:\s+'([^']*)'/g; + let match; + + while ((match = assertionPattern.exec(output)) !== null) { + const testName = match[1]; + const expected = match[2]; + const actual = match[3]; + + assertions.push({ + testName, + fieldName: testName, // Use test name as field identifier + passed: false, + expected, + actual + }); + } + + // For passing tests, extract from test summary + // Pattern: test name in output followed by passing status + const passedTestsPattern = /(\d+)\s+passing/i; + const passMatch = output.match(passedTestsPattern); + + if (passMatch) { + // Try to extract passing test names + const testNamePattern = /@test:Config\s*\{\}\s*function\s+(\w+)/g; + const testContent = output.match(/Running\s+Tests/i); + + if (testContent) { + // Find test function names in the surrounding context + const testFuncMatches = [...output.matchAll(/\[pass\]\s+(\w+)/g)]; + testFuncMatches.forEach(m => { + assertions.push({ + testName: m[1], + fieldName: m[1], + passed: true + }); + }); + } + } + + return assertions; +} + +/** + * Run Ballerina test for a test case + */ +export async function runBalTest(testCase: TestCase): Promise { + console.log(`\n🧪 Running bal test in ${testCase.resourcePath}`); + + try { + const { stdout, stderr } = await execAsync("bal test", { + cwd: testCase.resourcePath, + timeout: TIMING.BAL_TEST_TIMEOUT + }); + + const output = stdout + stderr; + console.log("Bal test output:", output); + + // Parse bal test output to extract metrics + const passingMatch = output.match(/(\d+)\s+passing/i); + const failingMatch = output.match(/(\d+)\s+failing/i); + const skippedMatch = output.match(/(\d+)\s+skipped/i); + + const passed = passingMatch ? parseInt(passingMatch[1], 10) : 0; + const failed = failingMatch ? parseInt(failingMatch[1], 10) : 0; + const skipped = skippedMatch ? parseInt(skippedMatch[1], 10) : 0; + const total = passed + failed + skipped; + + // Parse individual assertions + const assertions = parseTestAssertions(output); + + return { + passed, + failed, + skipped, + total, + output, + success: failed === 0 && passed > 0, + assertions + }; + } catch (error: any) { + const output = error.stdout + error.stderr; + console.error("Bal test failed:", output); + + // Try to parse metrics even from error output + const passingMatch = output.match(/(\d+)\s+passing/i); + const failingMatch = output.match(/(\d+)\s+failing/i); + const skippedMatch = output.match(/(\d+)\s+skipped/i); + + const passed = passingMatch ? parseInt(passingMatch[1], 10) : 0; + const failed = failingMatch ? parseInt(failingMatch[1], 10) : 0; + const skipped = skippedMatch ? parseInt(skippedMatch[1], 10) : 0; + const total = passed + failed + skipped; + + // Parse individual assertions + const assertions = parseTestAssertions(output); + + return { + passed, + failed, + skipped, + total, + output, + success: false, + assertions + }; + } +} diff --git a/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/index.ts b/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/index.ts index e2309aace78..f42d6fedd87 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/index.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/index.ts @@ -29,27 +29,28 @@ export function run(): Promise { const testsRoot = path.resolve(__dirname, "."); return new Promise((resolve, reject) => { - glob.glob("**/**.test.js", { cwd: testsRoot }, (err, files) => { - if (err) { - return reject(err); - } - - // Add files to the test suite - files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); - - try { - // Run the mocha test - mocha.run((failures) => { - if (failures > 0) { - reject(new Error(`${failures} tests failed.`)); - } else { - resolve(); - } - }); - } catch (err) { + glob.glob("**/**.test.js", { cwd: testsRoot }) + .then((files) => { + // Add files to the test suite + files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run((failures) => { + if (failures > 0) { + reject(new Error(`${failures} tests failed.`)); + } else { + resolve(); + } + }); + } catch (err) { + console.error(err); + reject(err); + } + }) + .catch((err) => { console.error(err); reject(err); - } - }); + }); }); } diff --git a/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/setup.ts b/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/setup.ts index 2000537bf9a..5e966615075 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/setup.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/integration_tests/libs/setup.ts @@ -35,8 +35,7 @@ const PATHS = { const VSCODE_COMMANDS = { CLOSE_ALL_EDITORS: "workbench.action.closeAllEditors", - OPEN: "vscode.open", - SHOW_EXAMPLES: "ballerina.showExamples", + OPEN: "vscode.open" }; /** @@ -59,21 +58,6 @@ export async function setupTestEnvironment(): Promise { // Wait for workspace to settle and extension to activate await new Promise(resolve => setTimeout(resolve, TIMING.WORKSPACE_SETTLE_DELAY)); - // Force extension activation by opening a Ballerina file - try { - const PROJECT_ROOT = path.resolve(__dirname, PATHS.PROJECT_ROOT_RELATIVE); - const testBalFile = Uri.file(path.join(PROJECT_ROOT, "main.bal")); - await commands.executeCommand(VSCODE_COMMANDS.OPEN, testBalFile); - await new Promise(resolve => setTimeout(resolve, TIMING.FILE_OPEN_DELAY)); - } catch (error) { - // Fallback: try to execute a ballerina command to force activation - try { - await commands.executeCommand(VSCODE_COMMANDS.SHOW_EXAMPLES); - } catch (cmdError) { - // Extension might still be loading - } - } - // Wait for extension to activate (it activates onStartupFinished) // Give it sufficient time to load language server and initialize console.log("Waiting for extension activation and language server initialization..."); diff --git a/workspaces/ballerina/ballerina-extension/test/ai/post_proccess/post.test.ts b/workspaces/ballerina/ballerina-extension/test/ai/post_proccess/post.test.ts index 56b87f7ac5f..9809a7105b9 100644 --- a/workspaces/ballerina/ballerina-extension/test/ai/post_proccess/post.test.ts +++ b/workspaces/ballerina/ballerina-extension/test/ai/post_proccess/post.test.ts @@ -21,7 +21,7 @@ import { attemptRepairProject } from '../../../src/rpc-managers/ai-panel/repair- import * as assert from 'assert'; import * as fs from 'fs'; import * as os from 'os'; -import { StateMachine } from '../../../src/stateMachine'; +import { StateMachine } from '../../stateMachine'; import { Uri } from 'vscode'; import { Diagnostics } from '@wso2/ballerina-core'; diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/Ballerina.toml b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/Ballerina.toml new file mode 100644 index 00000000000..27fe75ff3e7 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/Ballerina.toml @@ -0,0 +1,8 @@ +[package] +org = "test" +name = "datamapper_case1" +version = "0.1.0" +distribution = "2201.8.0" + +[build-options] +observabilityIncluded = true diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/Dependencies.toml b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/Dependencies.toml new file mode 100644 index 00000000000..0dacfb2451f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/Dependencies.toml @@ -0,0 +1,95 @@ +# AUTO-GENERATED FILE. DO NOT MODIFY. + +# This file is auto-generated by Ballerina for managing dependency versions. +# It should not be modified by hand. + +[ballerina] +dependencies-toml-version = "2" +distribution-version = "2201.12.7" + +[[package]] +org = "ballerina" +name = "jballerina.java" +version = "0.0.0" + +[[package]] +org = "ballerina" +name = "lang.__internal" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.object"} +] + +[[package]] +org = "ballerina" +name = "lang.array" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.__internal"} +] + +[[package]] +org = "ballerina" +name = "lang.error" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "lang.object" +version = "0.0.0" +scope = "testOnly" + +[[package]] +org = "ballerina" +name = "observe" +version = "1.5.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "test" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.array"}, + {org = "ballerina", name = "lang.error"} +] +modules = [ + {org = "ballerina", packageName = "test", moduleName = "test"} +] + +[[package]] +org = "ballerinai" +name = "observe" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "observe"} +] +modules = [ + {org = "ballerinai", packageName = "observe", moduleName = "observe"} +] + +[[package]] +org = "test" +name = "datamapper_case1" +version = "0.1.0" +dependencies = [ + {org = "ballerina", name = "test"}, + {org = "ballerinai", name = "observe"} +] +modules = [ + {org = "test", packageName = "datamapper_case1", moduleName = "datamapper_case1"} +] + diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/main.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/main.bal new file mode 100644 index 00000000000..8d796461b3c --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/main.bal @@ -0,0 +1,3 @@ +function transform(Person person) returns Student => { + +}; diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/tests_cache/native-config/mocked-func-class-map.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/tests_cache/native-config/mocked-func-class-map.json new file mode 100644 index 00000000000..1f3ac6a178e --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/tests_cache/native-config/mocked-func-class-map.json @@ -0,0 +1 @@ +{"datamapper_case1/tests.test":[]} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/tests_cache/test_suit.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/tests_cache/test_suit.json new file mode 100644 index 00000000000..3e628fbf0e0 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/tests_cache/test_suit.json @@ -0,0 +1 @@ +{"datamapper_case1":{"orgName":"test","version":"0.1.0","packageName":"datamapper_case1","packageId":"datamapper_case1","testPackageId":"datamapper_case1$test","executeFilePath":"tests.test_execute-generated_1","sourceRootPath":"/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1","testUtilityFunctions":{"transform":"test.datamapper_case1.0.main","testB":"test.datamapper_case1$test.0.tests.test","executeTestRegistrar0":"test.datamapper_case1$test.0.tests.test_execute-generated_1","__execute__":"test.datamapper_case1$test.0.tests.test_execute-generated_1","testA":"test.datamapper_case1$test.0.tests.test"},"beforeSuiteFunctionNames":[],"afterSuiteFunctionNames":{},"beforeEachFunctionNames":[],"afterEachFunctionNames":[],"tests":[],"groups":{},"testExecutionDependencies":["/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/test/0.0.0/any/platform/java21/testerina-core-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/test/0.0.0/java21/ballerina-test-0.0.0.jar","/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/test/datamapper_case1/0.1.0/java21/test-datamapper_case1-0.1.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-commons-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/observe/1.5.0/java21/ballerina-observe.mockextension-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/observe/1.5.0/java21/ballerina-observe-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/observe-native-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerinai/observe/0.0.0/java21/ballerinai-observe-0.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/org.jacoco.report-0.8.12.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerinai/observe/0.0.0/java21/platform/java21/observe-internal-native-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/ballerina-rt-2201.12.7.jar","/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/cache/test/datamapper_case1/0.1.0/java21/test-datamapper_case1-0.1.0-testable.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-tree-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/testerina-runtime-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/ballerina-lang-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/org.jacoco.core-0.8.12.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/java-diff-utils-4.5.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/testerina-core-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/test/0.0.0/any/platform/java21/java-diff-utils-4.5.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-trace-1.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-semconv-1.0.0-alpha.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-common-1.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-testing-1.0.0.jar"],"isReportRequired":false,"isSingleDDTExecution":false,"mockFunctionNamesMap":{}}} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/rerun_test.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/rerun_test.json new file mode 100644 index 00000000000..9fc2d5d0306 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/target/rerun_test.json @@ -0,0 +1 @@ +{"datamapper_case1":{"testNames":[],"testModuleNames":{},"subTestNames":{}}} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/tests/test.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/tests/test.bal new file mode 100644 index 00000000000..f8ec86a2f46 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/tests/test.bal @@ -0,0 +1,19 @@ +import ballerina/test; + +Person person = { + firstName: "John", + lastName: "Doe", + age: 19 +}; + +Student student = transform(person); + +@test:Config {} +function testA() { + test:assertEquals(student.fullName, "John Doe"); +} + +@test:Config {} +function testB() { + test:assertEquals(student.age, "19"); +} diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/types.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/types.bal new file mode 100644 index 00000000000..b1b86f9ea1b --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case1/types.bal @@ -0,0 +1,10 @@ +type Person record { + string firstName; + string lastName; + int age; +}; + +type Student record { + string fullName; + string age; +}; diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/Ballerina.toml b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/Ballerina.toml new file mode 100644 index 00000000000..1c719308a15 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/Ballerina.toml @@ -0,0 +1,8 @@ +[package] +org = "test" +name = "datamapper_case2" +version = "0.1.0" +distribution = "2201.8.0" + +[build-options] +observabilityIncluded = true diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/Dependencies.toml b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/Dependencies.toml new file mode 100644 index 00000000000..c578525142e --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/Dependencies.toml @@ -0,0 +1,95 @@ +# AUTO-GENERATED FILE. DO NOT MODIFY. + +# This file is auto-generated by Ballerina for managing dependency versions. +# It should not be modified by hand. + +[ballerina] +dependencies-toml-version = "2" +distribution-version = "2201.12.7" + +[[package]] +org = "ballerina" +name = "jballerina.java" +version = "0.0.0" + +[[package]] +org = "ballerina" +name = "lang.__internal" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.object"} +] + +[[package]] +org = "ballerina" +name = "lang.array" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.__internal"} +] + +[[package]] +org = "ballerina" +name = "lang.error" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "lang.object" +version = "0.0.0" +scope = "testOnly" + +[[package]] +org = "ballerina" +name = "observe" +version = "1.5.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "test" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.array"}, + {org = "ballerina", name = "lang.error"} +] +modules = [ + {org = "ballerina", packageName = "test", moduleName = "test"} +] + +[[package]] +org = "ballerinai" +name = "observe" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "observe"} +] +modules = [ + {org = "ballerinai", packageName = "observe", moduleName = "observe"} +] + +[[package]] +org = "test" +name = "datamapper_case2" +version = "0.1.0" +dependencies = [ + {org = "ballerina", name = "test"}, + {org = "ballerinai", name = "observe"} +] +modules = [ + {org = "test", packageName = "datamapper_case2", moduleName = "datamapper_case2"} +] + diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/main.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/main.bal new file mode 100644 index 00000000000..08daedb605d --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/main.bal @@ -0,0 +1,3 @@ +function transform(Employee employee) returns EmployeeInfo => { + +}; diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/tests_cache/native-config/mocked-func-class-map.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/tests_cache/native-config/mocked-func-class-map.json new file mode 100644 index 00000000000..dd7bb5ebc97 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/tests_cache/native-config/mocked-func-class-map.json @@ -0,0 +1 @@ +{"datamapper_case2/tests.test":[]} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/tests_cache/test_suit.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/tests_cache/test_suit.json new file mode 100644 index 00000000000..974c74825e9 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/tests_cache/test_suit.json @@ -0,0 +1 @@ +{"datamapper_case2":{"orgName":"test","version":"0.1.0","packageName":"datamapper_case2","packageId":"datamapper_case2","testPackageId":"datamapper_case2$test","executeFilePath":"tests.test_execute-generated_1","sourceRootPath":"/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2","testUtilityFunctions":{"transform":"test.datamapper_case2.0.main","testB":"test.datamapper_case2$test.0.tests.test","testC":"test.datamapper_case2$test.0.tests.test","executeTestRegistrar0":"test.datamapper_case2$test.0.tests.test_execute-generated_1","testA":"test.datamapper_case2$test.0.tests.test","__execute__":"test.datamapper_case2$test.0.tests.test_execute-generated_1"},"beforeSuiteFunctionNames":[],"afterSuiteFunctionNames":{},"beforeEachFunctionNames":[],"afterEachFunctionNames":[],"tests":[],"groups":{},"testExecutionDependencies":["/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/test/0.0.0/any/platform/java21/testerina-core-2201.12.7.jar","/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/test/datamapper_case2/0.1.0/java21/test-datamapper_case2-0.1.0-testable.jar","/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/cache/test/datamapper_case2/0.1.0/java21/test-datamapper_case2-0.1.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-commons-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/org.jacoco.core-0.8.12.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/observe/1.5.0/java21/ballerina-observe.mockextension-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/observe/1.5.0/java21/ballerina-observe-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/observe-native-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerinai/observe/0.0.0/java21/ballerinai-observe-0.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerinai/observe/0.0.0/java21/platform/java21/observe-internal-native-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/org.jacoco.report-0.8.12.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/ballerina-rt-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/test/0.0.0/java21/ballerina-test-0.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/ballerina-lang-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/testerina-runtime-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/java-diff-utils-4.5.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-tree-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/testerina-core-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/test/0.0.0/any/platform/java21/java-diff-utils-4.5.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-trace-1.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-semconv-1.0.0-alpha.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-common-1.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-testing-1.0.0.jar"],"isReportRequired":false,"isSingleDDTExecution":false,"mockFunctionNamesMap":{}}} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/rerun_test.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/rerun_test.json new file mode 100644 index 00000000000..d2c6926508e --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/target/rerun_test.json @@ -0,0 +1 @@ +{"datamapper_case2":{"testNames":[],"testModuleNames":{},"subTestNames":{}}} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/tests/test.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/tests/test.bal new file mode 100644 index 00000000000..7dcb714fd8c --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/tests/test.bal @@ -0,0 +1,24 @@ +import ballerina/test; + +Employee employee = { + id: 1001, + name: "Jane Smith", + salary: 75000.50 +}; + +EmployeeInfo info = transform(employee); + +@test:Config {} +function testA() { + test:assertEquals(info.employeeId, "1001"); +} + +@test:Config {} +function testB() { + test:assertEquals(info.displayName, "Jane Smith"); +} + +@test:Config {} +function testC() { + test:assertEquals(info.formattedSalary, "$75000.50"); +} diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/types.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/types.bal new file mode 100644 index 00000000000..694290c043f --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case2/types.bal @@ -0,0 +1,11 @@ +type Employee record { + int id; + string name; + decimal salary; +}; + +type EmployeeInfo record { + string employeeId; + string displayName; + string formattedSalary; +}; diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/Ballerina.toml b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/Ballerina.toml new file mode 100644 index 00000000000..7eaa06dbea0 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/Ballerina.toml @@ -0,0 +1,8 @@ +[package] +org = "test" +name = "datamapper_case3" +version = "0.1.0" +distribution = "2201.8.0" + +[build-options] +observabilityIncluded = true diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/Dependencies.toml b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/Dependencies.toml new file mode 100644 index 00000000000..f91e02d6bcc --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/Dependencies.toml @@ -0,0 +1,95 @@ +# AUTO-GENERATED FILE. DO NOT MODIFY. + +# This file is auto-generated by Ballerina for managing dependency versions. +# It should not be modified by hand. + +[ballerina] +dependencies-toml-version = "2" +distribution-version = "2201.12.7" + +[[package]] +org = "ballerina" +name = "jballerina.java" +version = "0.0.0" + +[[package]] +org = "ballerina" +name = "lang.__internal" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.object"} +] + +[[package]] +org = "ballerina" +name = "lang.array" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.__internal"} +] + +[[package]] +org = "ballerina" +name = "lang.error" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "lang.object" +version = "0.0.0" +scope = "testOnly" + +[[package]] +org = "ballerina" +name = "observe" +version = "1.5.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"} +] + +[[package]] +org = "ballerina" +name = "test" +version = "0.0.0" +scope = "testOnly" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "lang.array"}, + {org = "ballerina", name = "lang.error"} +] +modules = [ + {org = "ballerina", packageName = "test", moduleName = "test"} +] + +[[package]] +org = "ballerinai" +name = "observe" +version = "0.0.0" +dependencies = [ + {org = "ballerina", name = "jballerina.java"}, + {org = "ballerina", name = "observe"} +] +modules = [ + {org = "ballerinai", packageName = "observe", moduleName = "observe"} +] + +[[package]] +org = "test" +name = "datamapper_case3" +version = "0.1.0" +dependencies = [ + {org = "ballerina", name = "test"}, + {org = "ballerinai", name = "observe"} +] +modules = [ + {org = "test", packageName = "datamapper_case3", moduleName = "datamapper_case3"} +] + diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/main.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/main.bal new file mode 100644 index 00000000000..7d8b552b729 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/main.bal @@ -0,0 +1,3 @@ +function transform(Student student) returns PersonalProfile => { + +}; diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/tests_cache/native-config/mocked-func-class-map.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/tests_cache/native-config/mocked-func-class-map.json new file mode 100644 index 00000000000..8a2215e5146 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/tests_cache/native-config/mocked-func-class-map.json @@ -0,0 +1 @@ +{"datamapper_case3/tests.test":[]} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/tests_cache/test_suit.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/tests_cache/test_suit.json new file mode 100644 index 00000000000..76aef560dc9 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/tests_cache/test_suit.json @@ -0,0 +1 @@ +{"datamapper_case3":{"orgName":"test","version":"0.1.0","packageName":"datamapper_case3","packageId":"datamapper_case3","testPackageId":"datamapper_case3$test","executeFilePath":"tests.test_execute-generated_1","sourceRootPath":"/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3","testUtilityFunctions":{"testBioGender":"test.datamapper_case3$test.0.tests.test","transform":"test.datamapper_case3.0.main","testAddress":"test.datamapper_case3$test.0.tests.test","testBioAge":"test.datamapper_case3$test.0.tests.test","executeTestRegistrar0":"test.datamapper_case3$test.0.tests.test_execute-generated_1","testNumberOfRoomates":"test.datamapper_case3$test.0.tests.test","testSemesterGPA":"test.datamapper_case3$test.0.tests.test","testId":"test.datamapper_case3$test.0.tests.test","testBioName":"test.datamapper_case3$test.0.tests.test","__execute__":"test.datamapper_case3$test.0.tests.test_execute-generated_1","testAcademicMajor":"test.datamapper_case3$test.0.tests.test"},"beforeSuiteFunctionNames":[],"afterSuiteFunctionNames":{},"beforeEachFunctionNames":[],"afterEachFunctionNames":[],"tests":[],"groups":{},"testExecutionDependencies":["/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/test/0.0.0/any/platform/java21/testerina-core-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/observe/1.5.0/java21/ballerina-observe-1.5.0.jar","/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/test/datamapper_case3/0.1.0/java21/test-datamapper_case3-0.1.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/observe/1.5.0/java21/ballerina-observe.mockextension-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/observe-native-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerinai/observe/0.0.0/java21/ballerinai-observe-0.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-commons-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerinai/observe/0.0.0/java21/platform/java21/observe-internal-native-1.5.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/ballerina-rt-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/ballerina-lang-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/org.jacoco.core-0.8.12.jar","/Users/vinoth/Downloads/vscode-extension/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/cache/test/datamapper_case3/0.1.0/java21/test-datamapper_case3-0.1.0-testable.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/cache/ballerina/test/0.0.0/java21/ballerina-test-0.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/testerina-runtime-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/org.jacoco.report-0.8.12.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-tree-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/testerina-core-2201.12.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/asm-9.7.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/bre/lib/java-diff-utils-4.5.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/test/0.0.0/any/platform/java21/java-diff-utils-4.5.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-trace-1.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-semconv-1.0.0-alpha.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-common-1.0.0.jar","/Users/vinoth/.ballerina/ballerina-home/distributions/ballerina-2201.12.7/repo/bala/ballerina/observe/1.5.0/java21/platform/java21/opentelemetry-sdk-testing-1.0.0.jar"],"isReportRequired":false,"isSingleDDTExecution":false,"mockFunctionNamesMap":{}}} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/rerun_test.json b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/rerun_test.json new file mode 100644 index 00000000000..749aa8542e1 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/target/rerun_test.json @@ -0,0 +1 @@ +{"datamapper_case3":{"testNames":[],"testModuleNames":{},"subTestNames":{}}} \ No newline at end of file diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/tests/test.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/tests/test.bal new file mode 100644 index 00000000000..3e1befb5999 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/tests/test.bal @@ -0,0 +1,65 @@ +import ballerina/test; + +Student student = { + id: 1001, + studentName: "Alice Johnson", + age: 20, + gender: "Female", + semesterGPA: ["3.8", "3.9", "4.0"], + academicMajor: "Computer Science", + roommates: [ + { + id: 1002, + studentName: "Bob Smith", + age: 21, + gender: "Male", + semesterGPA: [], + academicMajor: "Mathematics", + roommates: [], + address: "" + } + ], + address: "123 College Ave" +}; + +PersonalProfile profile = transform(student); + +@test:Config {} +function testId() { + test:assertEquals(profile.id, 1001); +} + +@test:Config {} +function testBioName() { + test:assertEquals(profile.bio.name, "Alice Johnson"); +} + +@test:Config {} +function testBioGender() { + test:assertEquals(profile.bio.gender, "Female"); +} + +@test:Config {} +function testBioAge() { + test:assertEquals(profile.bio.age, 20); +} + +@test:Config {} +function testAcademicMajor() { + test:assertEquals(profile.academicRecord.major, "Computer Science"); +} + +@test:Config {} +function testSemesterGPA() { + test:assertEquals(profile.academicRecord.semesterGPA, ["3.8", "3.9", "4.0"]); +} + +@test:Config {} +function testNumberOfRoomates() { + test:assertEquals(profile.accommodationDetails.numberOfRoomates, 1); +} + +@test:Config {} +function testAddress() { + test:assertEquals(profile.accommodationDetails.address, "123 College Ave"); +} diff --git a/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/types.bal b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/types.bal new file mode 100644 index 00000000000..3ed7727b0e8 --- /dev/null +++ b/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper/case3/types.bal @@ -0,0 +1,33 @@ +type Student record { + int id; + string studentName; + int age; + string gender; + string[] semesterGPA; + string academicMajor; + Student[] roommates; + string address; +}; + +type PersonalProfile record { + int id; + Bio bio; + AcademicRecord academicRecord; + Accommodation accommodationDetails; +}; + +type Bio record { + string name; + string gender; + int age; +}; + +type AcademicRecord record { + string major; + string[] semesterGPA; +}; + +type Accommodation record { + int numberOfRoomates; + string address; +}; diff --git a/workspaces/ballerina/ballerina-extension/test/runAiTest.ts b/workspaces/ballerina/ballerina-extension/test/runAiTest.ts index d5a50d3443b..3e89b66a624 100644 --- a/workspaces/ballerina/ballerina-extension/test/runAiTest.ts +++ b/workspaces/ballerina/ballerina-extension/test/runAiTest.ts @@ -36,7 +36,7 @@ async function main() { if (missingVars.length > 0) { console.warn( - '\nāš ļø Environment Variable Configuration Warning:\n' + + '\n Environment Variable Configuration Warning:\n' + `Missing required environment variables: ${missingVars.join(', ')}\n` + `Please provide values in either .env file or runtime environment.\n` ); @@ -67,7 +67,8 @@ async function main() { extensionDevelopmentPath, extensionTestsPath, launchArgs: [ - '--grep=^AI Code Generator Tests Suite' + '--grep=^AI Code Generator Tests Suite', + '--grep=^AI Datamapper Tests Suite' ], extensionTestsEnv: { ...envKeys, diff --git a/workspaces/ballerina/ballerina-extension/webpack.config.js b/workspaces/ballerina/ballerina-extension/webpack.config.js index cbf4aad0946..509f2aa0292 100644 --- a/workspaces/ballerina/ballerina-extension/webpack.config.js +++ b/workspaces/ballerina/ballerina-extension/webpack.config.js @@ -3,15 +3,48 @@ 'use strict'; const path = require('path'); -const MergeIntoSingleFile = require('webpack-merge-and-include-globally'); +const fs = require('fs'); +const { minify } = require('uglify-js'); const dotenv = require('dotenv'); const webpack = require('webpack'); const { createEnvDefinePlugin } = require('../../../common/scripts/env-webpack-helper'); +/** + * Concatenate and minify a list of source files into a single output file. + * @param {{ sources: string[]; outputRelativePath: string }} options + * @returns {{ apply(compiler: import('webpack').Compiler): void }} + */ +function concatenateAndMinify(options) { + return { + apply(compiler) { + compiler.hooks.afterEmit.tapPromise('ConcatenateAndMinifyPlugin', async (compilation) => { + try { + const concatenated = options.sources + .map(file => fs.readFileSync(file, 'utf8')) + .join('\n;\n'); + const result = minify(concatenated, { toplevel: false }); + if (result.error) throw result.error; + const outBase = (compiler.options.output && compiler.options.output.path) ? compiler.options.output.path : path.resolve(__dirname, 'dist'); + const outPath = path.resolve(outBase, options.outputRelativePath); + fs.mkdirSync(path.dirname(outPath), { recursive: true }); + fs.writeFileSync(outPath, result.code, 'utf8'); + console.log(`Created concatenated webview commons: ${outPath}`); + } catch (err) { + const e = err instanceof Error ? err : new Error(String(err)); + compilation.errors.push(e); + console.error('Failed to build webviewCommons.js:', e); + } + }); + } + }; +} + const envPath = path.resolve(__dirname, '.env'); -const env = dotenv.config({ path: envPath }).parsed; +const env = dotenv.config({ path: envPath }).parsed || {}; // ensure object for //@ts-check console.log("Fetching values for environment variables..."); -const { envKeys, missingVars } = createEnvDefinePlugin(env); +const cenv = /** @type {any} */ (createEnvDefinePlugin(env)); +const envKeys = cenv.envKeys || {}; +const missingVars = Array.isArray(cenv.missingVars) ? cenv.missingVars : []; if (missingVars.length > 0) { console.warn( '\nāš ļø Environment Variable Configuration Warning:\n' + @@ -60,16 +93,13 @@ module.exports = { stats: 'normal', plugins: [ new webpack.DefinePlugin(envKeys), - new MergeIntoSingleFile({ - files: { - [path.join('..', 'resources', 'jslibs', 'webviewCommons.js')]: [ - path.resolve('resources', 'utils', 'undo-redo.js'), - path.resolve('node_modules', 'pako', 'dist', 'pako.min.js'), - ], - }, - transform: { - 'webviewCommons.js': code => require("uglify-js").minify(code).code - } + // Custom concatenation + minification plugin (replacement for deprecated dependency) + concatenateAndMinify({ + sources: [ + path.resolve(__dirname, 'resources', 'utils', 'undo-redo.js'), + path.resolve(__dirname, 'node_modules', 'pako', 'dist', 'pako.min.js'), + ], + outputRelativePath: path.join('..', 'resources', 'jslibs', 'webviewCommons.js') }) ] }; diff --git a/workspaces/ballerina/ballerina-low-code-diagram/package.json b/workspaces/ballerina/ballerina-low-code-diagram/package.json index 2fa7e46f929..89be7a03d29 100644 --- a/workspaces/ballerina/ballerina-low-code-diagram/package.json +++ b/workspaces/ballerina/ballerina-low-code-diagram/package.json @@ -21,9 +21,9 @@ "storybook:setup": "node tools/setup-storybook.js" }, "dependencies": { + "@date-io/date-fns": "^3.2.1", "@wso2/ballerina-core": "workspace:*", "@wso2/syntax-tree": "workspace:*", - "@date-io/date-fns": "^3.2.1", "classnames": "^2.5.1", "clipboard-copy": "^4.0.1", "clsx": "^2.1.1", @@ -38,14 +38,14 @@ "lodash.camelcase": "^4.3.0", "lodash.clonedeep": "^4.5.0", "lodash.debounce": "^4.0.8", + "monaco-editor": "0.52.2", "react": "18.2.0", "react-dom": "18.2.0", "react-intl": "^7.1.11", "react-lottie": "^1.2.10", "react-zoom-pan-pinch": "^3.7.0", "uuid": "^11.1.0", - "vscode-languageserver-protocol": "^3.17.5", - "monaco-editor": "0.52.2" + "vscode-languageserver-protocol": "^3.17.5" }, "devDependencies": { "@babel/core": "^7.27.1", @@ -73,9 +73,10 @@ "copy-webpack-plugin": "^13.0.0", "copyfiles": "^2.4.1", "css-loader": "^7.1.2", + "express": "^4.22.1", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^9.1.0", - "glob": "^11.0.2", + "glob": "^11.1.0", "react-scripts-ts": "^3.1.0", "react-test-renderer": "^19.1.0", "rimraf": "^6.0.1", @@ -101,8 +102,7 @@ "typescript": "5.8.3", "webpack": "^5.99.8", "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.2.1", - "express": "^5.1.0" + "webpack-dev-server": "^5.2.1" }, "repository": { "type": "git", diff --git a/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts b/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts index 0ad25d5aaa1..7b5882861a8 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/BallerinaRpcClient.ts @@ -51,7 +51,10 @@ import { currentThemeChanged, ChatNotify, onChatNotify, - AIMachineSendableEvent + AIMachineSendableEvent, + dependencyPullProgress, + ProjectMigrationResult, + onMigratedProject } from "@wso2/ballerina-core"; import { LangClientRpcClient } from "./rpc-clients/lang-client/rpc-client"; import { LibraryBrowserRpcClient } from "./rpc-clients/library-browser/rpc-client"; @@ -237,6 +240,14 @@ export class BallerinaRpcClient { this.messenger.onNotification(onMigrationToolStateChanged, callback); } + onDependencyPullProgress(callback: (message: string) => void) { + this.messenger.onNotification(dependencyPullProgress, callback); + } + + onMigratedProject(callback: (result: ProjectMigrationResult) => void) { + this.messenger.onNotification(onMigratedProject, callback); + } + getPopupVisualizerState(): Promise { return this.messenger.sendRequest(getPopupVisualizerState, HOST_EXTENSION); } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts index 8d5200a6ad8..4f3a08c0288 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/agent-chat/rpc-client.ts @@ -14,14 +14,19 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. + * + * THIS FILE INCLUDES AUTO GENERATED CODE */ - import { + abortChatRequest, AgentChatAPI, ChatReqMessage, ChatRespMessage, - abortChatRequest, - getChatMessage + getChatMessage, + getTracingStatus, + showTraceView, + TraceInput, + TraceStatus } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -40,4 +45,12 @@ export class AgentChatRpcClient implements AgentChatAPI { abortChatRequest(): void { return this._messenger.sendNotification(abortChatRequest, HOST_EXTENSION); } + + getTracingStatus(): Promise { + return this._messenger.sendRequest(getTracingStatus, HOST_EXTENSION); + } + + showTraceView(params: TraceInput): Promise { + return this._messenger.sendRequest(showTraceView, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts index b70e51a425a..733e57fbd04 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/ai-panel/rpc-client.ts @@ -24,30 +24,21 @@ import { AIPanelPrompt, AddFilesToProjectRequest, AddToProjectRequest, - AllDataMapperSourceRequest, - CodeSegment, - CreateTempFileRequest, - DataMapperModelResponse, - DatamapperModelContext, DeleteFromProjectRequest, DeveloperDocument, DocGenerationRequest, - ExtendedDataMapperMetadata, FetchDataRequest, FetchDataResponse, GenerateCodeRequest, - GenerateMappingsResponse, GenerateOpenAPIRequest, - GenerateTypesFromRecordRequest, - GenerateTypesFromRecordResponse, GetFromFileRequest, - GetModuleDirParams, LLMDiagnostics, LoginMethod, MetadataWithAttachments, - NotifyAIMappingsRequest, PostProcessRequest, PostProcessResponse, + ProcessContextTypeCreationRequest, + ProcessMappingParametersRequest, ProjectDiagnostics, ProjectSource, RelevantLibrariesAndFunctionsRequest, @@ -63,29 +54,25 @@ import { abortAIGeneration, abortTestGeneration, addChatSummary, - addCodeSegmentToWorkspace, addFilesToProject, - addInlineCodeSegmentToWorkspace, addToProject, applyDoOnFailBlocks, checkSyntaxError, clearInitialPrompt, - createTempFileAndGenerateMetadata, createTestDirecoryIfNotExists, deleteFromProject, fetchData, generateCode, - generateDataMapperModel, + generateContextTypes, generateFunctionTests, generateHealthcareCode, - generateMappings, + generateInlineMappingCode, + generateMappingCode, generateOpenAPI, generateTestPlan, getAIMachineSnapshot, getAccessToken, - getActiveFile, getBackendUrl, - getContentFromFile, getDefaultPrompt, getDriftDiagnosticContents, getFileExists, @@ -94,7 +81,6 @@ import { getGeneratedDocumentation, getGeneratedTests, getLoginMethod, - getModuleDirectory, getProjectUuid, getRefreshedAccessToken, getRelevantLibrariesAndFunctions, @@ -104,21 +90,19 @@ import { getServiceSourceForName, getShadowDiagnostics, getTestDiagnostics, - getTypesFromRecord, handleChatSummaryError, isCopilotSignedIn, isNaturalProgrammingDirectoryExists, isRequirementsSpecificationFileExist, + isUserAuthenticated, markAlertShown, - notifyAIMappings, - openAIMappingChatWindow, + openChatWindowWithCommand, postProcess, promptGithubAuthorize, promptWSO2AILogout, readDeveloperMdFile, repairGeneratedCode, showSignInAlert, - stopAIMappings, submitFeedback, updateDevelopmentDocument, updateRequirementSpecification @@ -181,14 +165,6 @@ export class AiPanelRpcClient implements AIPanelAPI { return this._messenger.sendNotification(deleteFromProject, HOST_EXTENSION, params); } - notifyAIMappings(params: NotifyAIMappingsRequest): Promise { - return this._messenger.sendRequest(notifyAIMappings, HOST_EXTENSION, params); - } - - stopAIMappings(): Promise { - return this._messenger.sendRequest(stopAIMappings, HOST_EXTENSION); - } - getShadowDiagnostics(params: ProjectSource): Promise { return this._messenger.sendRequest(getShadowDiagnostics, HOST_EXTENSION, params); } @@ -201,32 +177,20 @@ export class AiPanelRpcClient implements AIPanelAPI { return this._messenger.sendNotification(clearInitialPrompt, HOST_EXTENSION); } - openAIMappingChatWindow(params: DataMapperModelResponse): void { - return this._messenger.sendNotification(openAIMappingChatWindow, HOST_EXTENSION, params); - } - - generateDataMapperModel(params: DatamapperModelContext): Promise { - return this._messenger.sendRequest(generateDataMapperModel, HOST_EXTENSION, params); - } - - getTypesFromRecord(params: GenerateTypesFromRecordRequest): Promise { - return this._messenger.sendRequest(getTypesFromRecord, HOST_EXTENSION, params); - } - - createTempFileAndGenerateMetadata(params: CreateTempFileRequest): Promise { - return this._messenger.sendRequest(createTempFileAndGenerateMetadata, HOST_EXTENSION, params); + openChatWindowWithCommand(): void { + return this._messenger.sendNotification(openChatWindowWithCommand, HOST_EXTENSION); } - generateMappings(params: MetadataWithAttachments): Promise { - return this._messenger.sendRequest(generateMappings, HOST_EXTENSION, params); + generateContextTypes(params: ProcessContextTypeCreationRequest): void { + return this._messenger.sendNotification(generateContextTypes, HOST_EXTENSION, params); } - addCodeSegmentToWorkspace(params: CodeSegment): Promise { - return this._messenger.sendRequest(addCodeSegmentToWorkspace, HOST_EXTENSION, params); + generateMappingCode(params: ProcessMappingParametersRequest): void { + return this._messenger.sendNotification(generateMappingCode, HOST_EXTENSION, params); } - addInlineCodeSegmentToWorkspace(params: CodeSegment): void { - return this._messenger.sendNotification(addInlineCodeSegmentToWorkspace, HOST_EXTENSION, params); + generateInlineMappingCode(params: MetadataWithAttachments): void { + return this._messenger.sendNotification(generateInlineMappingCode, HOST_EXTENSION, params); } getGeneratedTests(params: TestGenerationRequest): Promise { @@ -265,10 +229,6 @@ export class AiPanelRpcClient implements AIPanelAPI { return this._messenger.sendRequest(postProcess, HOST_EXTENSION, params); } - getActiveFile(): Promise { - return this._messenger.sendRequest(getActiveFile, HOST_EXTENSION); - } - promptGithubAuthorize(): Promise { return this._messenger.sendRequest(promptGithubAuthorize, HOST_EXTENSION); } @@ -329,14 +289,6 @@ export class AiPanelRpcClient implements AIPanelAPI { return this._messenger.sendNotification(createTestDirecoryIfNotExists, HOST_EXTENSION, params); } - getModuleDirectory(params: GetModuleDirParams): Promise { - return this._messenger.sendRequest(getModuleDirectory, HOST_EXTENSION, params); - } - - getContentFromFile(params: GetFromFileRequest): Promise { - return this._messenger.sendRequest(getContentFromFile, HOST_EXTENSION, params); - } - submitFeedback(params: SubmitFeedbackRequest): Promise { return this._messenger.sendRequest(submitFeedback, HOST_EXTENSION, params); } @@ -380,4 +332,8 @@ export class AiPanelRpcClient implements AIPanelAPI { addFilesToProject(params: AddFilesToProjectRequest): Promise { return this._messenger.sendRequest(addFilesToProject, HOST_EXTENSION, params); } + + isUserAuthenticated(): Promise { + return this._messenger.sendRequest(isUserAuthenticated, HOST_EXTENSION); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts index 98ae747249f..95e8bc53f4f 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/bi-diagram/rpc-client.ts @@ -38,6 +38,8 @@ import { BIModuleNodesResponse, BINodeTemplateRequest, BINodeTemplateResponse, + BISearchNodesRequest, + BISearchNodesResponse, BISearchRequest, BISearchResponse, BISourceCodeRequest, @@ -45,9 +47,13 @@ import { BuildMode, ClassFieldModifierRequest, ComponentRequest, + ConfigVariableRequest, ConfigVariableResponse, CreateComponentResponse, CurrentBreakpointsResponse, + DeleteConfigVariableRequestV2, + DeleteConfigVariableResponseV2, + DeleteProjectRequest, DeleteTypeRequest, DeleteTypeResponse, DeploymentRequest, @@ -83,7 +89,6 @@ import { OpenAPIGeneratedModulesResponse, OpenConfigTomlRequest, ProjectComponentsResponse, - ProjectImports, ProjectRequest, ProjectStructureResponse, ReadmeContentRequest, @@ -109,6 +114,8 @@ import { UpdateTypesRequest, UpdateTypesResponse, UpdatedArtifactsResponse, + VerifyTypeDeleteRequest, + VerifyTypeDeleteResponse, VisibleTypesRequest, VisibleTypesResponse, WorkspacesResponse, @@ -119,17 +126,18 @@ import { createComponent, createGraphqlClassType, createProject, + addProjectToWorkspace, deleteByComponentInfo, deleteConfigVariableV2, deleteFlowNode, deleteOpenApiGeneratedModules, + deleteProject, deleteType, deployProject, formDidClose, formDidOpen, generateOpenApiClient, getAiSuggestions, - getAllImports, getAvailableChunkers, getAvailableDataLoaders, getAvailableEmbeddingProviders, @@ -141,6 +149,7 @@ import { getConfigVariableNodeTemplate, getConfigVariables, getConfigVariablesV2, + getDataMapperCompletions, getDesignModel, getDevantMetadata, getEnclosedFunction, @@ -177,6 +186,7 @@ import { renameIdentifier, runProject, search, + searchNodes, updateClassField, updateConfigVariables, updateConfigVariablesV2, @@ -185,12 +195,14 @@ import { updateServiceClass, updateType, updateTypes, - DeleteConfigVariableRequestV2, - DeleteConfigVariableResponseV2, - VerifyTypeDeleteRequest, - VerifyTypeDeleteResponse, verifyTypeDelete, - ConfigVariableRequest, + FormDiagnosticsRequest, + FormDiagnosticsResponse, + getFormDiagnostics, + getExpressionTokens, + ExpressionTokensRequest, + AddProjectToWorkspaceRequest, + OpenReadmeRequest, } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -262,6 +274,14 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendNotification(createProject, HOST_EXTENSION, params); } + deleteProject(params: DeleteProjectRequest): void { + return this._messenger.sendNotification(deleteProject, HOST_EXTENSION, params); + } + + addProjectToWorkspace(params: AddProjectToWorkspaceRequest): void { + return this._messenger.sendNotification(addProjectToWorkspace, HOST_EXTENSION, params); + } + getWorkspaces(): Promise { return this._messenger.sendRequest(getWorkspaces, HOST_EXTENSION); } @@ -290,6 +310,10 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(getExpressionCompletions, HOST_EXTENSION, params); } + getDataMapperCompletions(params: ExpressionCompletionsRequest): Promise { + return this._messenger.sendRequest(getDataMapperCompletions, HOST_EXTENSION, params); + } + getConfigVariables(): Promise { return this._messenger.sendRequest(getConfigVariables, HOST_EXTENSION); } @@ -322,12 +346,12 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(getModuleNodes, HOST_EXTENSION); } - getReadmeContent(): Promise { - return this._messenger.sendRequest(getReadmeContent, HOST_EXTENSION); + getReadmeContent(params: ReadmeContentRequest): Promise { + return this._messenger.sendRequest(getReadmeContent, HOST_EXTENSION, params); } - openReadme(): void { - return this._messenger.sendNotification(openReadme, HOST_EXTENSION); + openReadme(params: OpenReadmeRequest): void { + return this._messenger.sendNotification(openReadme, HOST_EXTENSION, params); } renameIdentifier(params: RenameIdentifierRequest): Promise { @@ -370,12 +394,12 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(getBreakpointInfo, HOST_EXTENSION); } - getExpressionDiagnostics(params: ExpressionDiagnosticsRequest): Promise { - return this._messenger.sendRequest(getExpressionDiagnostics, HOST_EXTENSION, params); + getFormDiagnostics(params: FormDiagnosticsRequest): Promise { + return this._messenger.sendRequest(getFormDiagnostics, HOST_EXTENSION, params); } - getAllImports(): Promise { - return this._messenger.sendRequest(getAllImports, HOST_EXTENSION); + getExpressionDiagnostics(params: ExpressionDiagnosticsRequest): Promise { + return this._messenger.sendRequest(getExpressionDiagnostics, HOST_EXTENSION, params); } formDidOpen(params: FormDidOpenParams): Promise { @@ -470,6 +494,10 @@ export class BiDiagramRpcClient implements BIDiagramAPI { return this._messenger.sendRequest(search, HOST_EXTENSION, params); } + searchNodes(params: BISearchNodesRequest): Promise { + return this._messenger.sendRequest(searchNodes, HOST_EXTENSION, params); + } + getRecordNames(): Promise { return this._messenger.sendRequest(getRecordNames, HOST_EXTENSION); } @@ -497,4 +525,8 @@ export class BiDiagramRpcClient implements BIDiagramAPI { verifyTypeDelete(params: VerifyTypeDeleteRequest): Promise { return this._messenger.sendRequest(verifyTypeDelete, HOST_EXTENSION, params); } + + getExpressionTokens(params: ExpressionTokensRequest): Promise { + return this._messenger.sendRequest(getExpressionTokens, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts index cbbcbeafe3a..a7731461765 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/common/rpc-client.ts @@ -27,26 +27,30 @@ import { FileOrDirResponse, GoToSourceRequest, OpenExternalUrlRequest, + PackageTomlValues, RunExternalCommandRequest, RunExternalCommandResponse, + SampleDownloadRequest, ShowErrorMessageRequest, TypeResponse, WorkspaceFileRequest, WorkspaceRootResponse, + WorkspaceTypeResponse, WorkspacesFileResponse, + downloadSelectedSampleFromGithub, executeCommand, experimentalEnabled, getBallerinaDiagnostics, + getCurrentProjectTomlValues, getTypeCompletions, getWorkspaceFiles, getWorkspaceRoot, + getWorkspaceType, goToSource, isNPSupported, openExternalUrl, runBackgroundTerminalCommand, selectFileOrDirPath, - getCurrentProjectTomlValues, - TomlValues, selectFileOrFolderPath, showErrorMessage } from "@wso2/ballerina-core"; @@ -111,8 +115,16 @@ export class CommonRpcClient implements CommonRPCAPI { showErrorMessage(params: ShowErrorMessageRequest): void { return this._messenger.sendNotification(showErrorMessage, HOST_EXTENSION, params); } - - getCurrentProjectTomlValues(): Promise { + + getCurrentProjectTomlValues(): Promise> { return this._messenger.sendRequest(getCurrentProjectTomlValues, HOST_EXTENSION); } + + getWorkspaceType(): Promise { + return this._messenger.sendRequest(getWorkspaceType, HOST_EXTENSION); + } + + downloadSelectedSampleFromGithub(params: SampleDownloadRequest): Promise { + return this._messenger.sendRequest(downloadSelectedSampleFromGithub, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts index 20a4f0978b3..7c8219b7f43 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/data-mapper/rpc-client.ts @@ -21,7 +21,8 @@ import { AddArrayElementRequest, AddClausesRequest, AddSubMappingRequest, - AllDataMapperSourceRequest, + ClausePositionRequest, + ClausePositionResponse, ClearTypeCacheResponse, ConvertToQueryRequest, DMModelRequest, @@ -34,6 +35,7 @@ import { DeleteMappingRequest, DeleteSubMappingRequest, ExpandedDMModelResponse, + FieldPropertyRequest, GetDataMapperCodedataRequest, GetDataMapperCodedataResponse, GetSubMappingCodedataRequest, @@ -54,11 +56,12 @@ import { deleteClause, deleteMapping, deleteSubMapping, - getAllDataMapperSource, + getClausePosition, getDataMapperCodedata, getDataMapperModel, getDataMapperSource, getExpandedDMFromDMModel, + getFieldProperty, getInitialIDMSource, getProcessTypeReference, getProperty, @@ -137,14 +140,18 @@ export class DataMapperRpcClient implements DataMapperAPI { return this._messenger.sendRequest(getSubMappingCodedata, HOST_EXTENSION, params); } - getAllDataMapperSource(params: AllDataMapperSourceRequest): Promise { - return this._messenger.sendRequest(getAllDataMapperSource, HOST_EXTENSION, params); - } - getProperty(params: PropertyRequest): Promise { return this._messenger.sendRequest(getProperty, HOST_EXTENSION, params); } + getFieldProperty(params: FieldPropertyRequest): Promise { + return this._messenger.sendRequest(getFieldProperty, HOST_EXTENSION, params); + } + + getClausePosition(params: ClausePositionRequest): Promise { + return this._messenger.sendRequest(getClausePosition, HOST_EXTENSION, params); + } + getExpandedDMFromDMModel(params: DMModelRequest): Promise { return this._messenger.sendRequest(getExpandedDMFromDMModel, HOST_EXTENSION, params); } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/lang-client/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/lang-client/rpc-client.ts index f8ca9980d51..d32b268b933 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/lang-client/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/lang-client/rpc-client.ts @@ -62,6 +62,7 @@ import { didOpen, getBallerinaProjectComponents, getBallerinaVersion, + isSupportedSLVersion, getCompletion, getDefinitionPosition, getDiagnostics, @@ -83,7 +84,8 @@ import { getTypesFromFnDefinition, rename, stModify, - updateFileContent + updateFileContent, + SemanticVersion } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -115,6 +117,10 @@ export class LangClientRpcClient implements LangClientAPI { return this._messenger.sendRequest(getBallerinaVersion, HOST_EXTENSION); } + isSupportedSLVersion(params: SemanticVersion): Promise { + return this._messenger.sendRequest(isSupportedSLVersion, HOST_EXTENSION, params); + } + getCompletion(params: CompletionRequest): Promise { return this._messenger.sendRequest(getCompletion, HOST_EXTENSION, params); } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/migrate-integration/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/migrate-integration/rpc-client.ts index 8c91f99e201..e2894c7c5a3 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/migrate-integration/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/migrate-integration/rpc-client.ts @@ -25,13 +25,17 @@ import { MigrateRequest, MigrationToolPullRequest, OpenMigrationReportRequest, + OpenSubProjectReportRequest, SaveMigrationReportRequest, + StoreSubProjectReportsRequest, getMigrationTools, importIntegration, migrateProject, openMigrationReport, + openSubProjectReport, pullMigrationTool, - saveMigrationReport + saveMigrationReport, + storeSubProjectReports } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -59,6 +63,14 @@ export class MigrateIntegrationRpcClient implements MigrateIntegrationAPI { return this._messenger.sendNotification(openMigrationReport, HOST_EXTENSION, params); } + openSubProjectReport(params: OpenSubProjectReportRequest): void { + return this._messenger.sendNotification(openSubProjectReport, HOST_EXTENSION, params); + } + + storeSubProjectReports(params: StoreSubProjectReportsRequest): void { + return this._messenger.sendNotification(storeSubProjectReports, HOST_EXTENSION, params); + } + saveMigrationReport(params: SaveMigrationReportRequest): void { return this._messenger.sendNotification(saveMigrationReport, HOST_EXTENSION, params); } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/service-designer/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/service-designer/rpc-client.ts index 0f4d33beae2..b4aca46cadd 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/service-designer/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/service-designer/rpc-client.ts @@ -34,22 +34,27 @@ import { ListenerSourceCodeRequest, ListenersRequest, ListenersResponse, + PayloadContext, ResourceReturnTypesRequest, - ResourceReturnTypesResponse, ServiceDesignerAPI, + ServiceInitSourceRequest, ServiceModelFromCodeRequest, ServiceModelFromCodeResponse, + ServiceModelInitResponse, ServiceModelRequest, ServiceModelResponse, ServiceSourceCodeRequest, TriggerModelsRequest, TriggerModelsResponse, UpdatedArtifactsResponse, + VisibleTypesResponse, addFunctionSourceCode, addListenerSourceCode, addResourceSourceCode, addServiceSourceCode, + createServiceAndListener, exportOASFile, + generateExamplePayloadJson, getFunctionFromSource, getFunctionModel, getHttpResourceModel, @@ -57,6 +62,7 @@ import { getListenerModelFromCode, getListeners, getResourceReturnTypes, + getServiceInitModel, getServiceModel, getServiceModelFromCode, getTriggerModels, @@ -130,7 +136,7 @@ export class ServiceDesignerRpcClient implements ServiceDesignerAPI { return this._messenger.sendRequest(getHttpResourceModel, HOST_EXTENSION, params); } - getResourceReturnTypes(params: ResourceReturnTypesRequest): Promise { + getResourceReturnTypes(params: ResourceReturnTypesRequest): Promise { return this._messenger.sendRequest(getResourceReturnTypes, HOST_EXTENSION, params); } @@ -145,4 +151,16 @@ export class ServiceDesignerRpcClient implements ServiceDesignerAPI { updateResourceSourceCode(params: FunctionSourceCodeRequest): Promise { return this._messenger.sendRequest(updateResourceSourceCode, HOST_EXTENSION, params); } + + getServiceInitModel(params: ServiceModelRequest): Promise { + return this._messenger.sendRequest(getServiceInitModel, HOST_EXTENSION, params); + } + + createServiceAndListener(params: ServiceInitSourceRequest): Promise { + return this._messenger.sendRequest(createServiceAndListener, HOST_EXTENSION, params); + } + + generateExamplePayloadJson(params: PayloadContext): Promise { + return this._messenger.sendRequest(generateExamplePayloadJson, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts index b8841f763cf..8df1ec6c8de 100644 --- a/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts +++ b/workspaces/ballerina/ballerina-rpc-client/src/rpc-clients/visualizer/rpc-client.ts @@ -21,9 +21,12 @@ import { AddToUndoStackRequest, ColorThemeKind, HistoryEntry, + JoinProjectPathRequest, + JoinProjectPathResponse, OpenViewRequest, + ProjectStructureArtifactResponse, UndoRedoStateResponse, - UpdateUndoRedoMangerRequest, + UpdatedArtifactsResponse, VisualizerAPI, addToHistory, addToUndoStack, @@ -35,8 +38,10 @@ import { joinProjectPath, openView, redo, + resetUndoRedoStack, undo, - undoRedoState + undoRedoState, + updateCurrentArtifactLocation } from "@wso2/ballerina-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -88,11 +93,19 @@ export class VisualizerRpcClient implements VisualizerAPI { return this._messenger.sendRequest(undoRedoState, HOST_EXTENSION); } - joinProjectPath(segments: string | string[]): Promise { - return this._messenger.sendRequest(joinProjectPath, HOST_EXTENSION, segments); + resetUndoRedoStack(): void { + return this._messenger.sendNotification(resetUndoRedoStack, HOST_EXTENSION); + } + + joinProjectPath(params: JoinProjectPathRequest): Promise { + return this._messenger.sendRequest(joinProjectPath, HOST_EXTENSION, params); } getThemeKind(): Promise { return this._messenger.sendRequest(getThemeKind, HOST_EXTENSION); } + + updateCurrentArtifactLocation(params: UpdatedArtifactsResponse): Promise { + return this._messenger.sendRequest(updateCurrentArtifactLocation, HOST_EXTENSION, params); + } } diff --git a/workspaces/ballerina/ballerina-side-panel/package.json b/workspaces/ballerina/ballerina-side-panel/package.json index a13f9a36fe3..9c1eaeb002c 100644 --- a/workspaces/ballerina/ballerina-side-panel/package.json +++ b/workspaces/ballerina/ballerina-side-panel/package.json @@ -18,23 +18,51 @@ "author": "", "license": "ISC", "dependencies": { - "react": "18.2.0", - "react-dom": "18.2.0", + "@codemirror/autocomplete": "~6.19.1", + "@codemirror/commands": "~6.10.0", + "@codemirror/language-data": "~6.5.2", + "@codemirror/lint": "~6.8.1", + "@codemirror/state": "~6.5.2", + "@codemirror/view": "~6.38.8", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@wso2/ui-toolkit": "workspace:*", "@wso2/ballerina-core": "workspace:*", "@wso2/ballerina-rpc-client": "workspace:*", + "@wso2/ui-toolkit": "workspace:*", "lodash": "~4.17.21", + "markdown-it": "~14.1.0", + "prosemirror-commands": "~1.7.1", + "prosemirror-gapcursor": "~1.4.0", + "prosemirror-history": "~1.5.0", + "prosemirror-inputrules": "~1.5.1", + "prosemirror-keymap": "~1.2.2", + "prosemirror-markdown": "~1.13.2", + "prosemirror-model": "~1.25.4", + "prosemirror-schema-basic": "~1.2.2", + "prosemirror-schema-list": "~1.5.1", + "prosemirror-state": "~1.4.3", + "prosemirror-view": "~1.41.3", + "react": "18.2.0", + "react-dom": "18.2.0", "react-hook-form": "7.56.4", - "react-markdown": "~10.1.0" + "react-markdown": "~10.1.0", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "@github/markdown-toolbar-element": "^2.2.3", + "@codemirror/commands": "~6.10.0", + "@codemirror/state": "~6.5.2", + "@codemirror/view": "~6.38.6", + "@codemirror/autocomplete": "~6.19.1", + "@codemirror/lang-sql": "~6.10.0", + "@codemirror/language": "~6.11.3", + "@lezer/highlight": "~1.2.3" }, "devDependencies": { "@storybook/react": "^6.5.16", + "@types/lodash": "~4.17.16", "@types/react": "18.2.0", "@types/react-dom": "18.2.0", - "typescript": "5.8.3", - "@types/lodash": "~4.17.16", - "copyfiles": "^2.4.1" + "copyfiles": "^2.4.1", + "typescript": "5.8.3" } } diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/CardList/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/CardList/index.tsx index 64b594411c5..1b09a2344a8 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/CardList/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/CardList/index.tsx @@ -39,6 +39,7 @@ namespace S { export const PanelBody = styled(SidePanelBody)` height: calc(100vh - 100px); padding-top: 0; + overflow-y: auto; `; export const StyledSearchInput = styled(SearchBox)` @@ -301,7 +302,7 @@ function CardList(props: CardListProps) { return ( {nodes.map((node, index) => ( - handleCardClick(node)}> + handleCardClick(node)} title={node.description}> {node.icon ? node.icon : } {node.label} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/Form/FormDescription.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/Form/FormDescription.tsx index 4b3bd1d54e7..0345c192164 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/Form/FormDescription.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/Form/FormDescription.tsx @@ -28,7 +28,6 @@ namespace S { export const FormInfoDescription = styled.div` color: ${ThemeColors.ON_SURFACE_VARIANT}; font-size: 13px; - margin-bottom: 12px; padding: 8px 12px; border-radius: 4px; opacity: 0.9; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx index 55eac7e51ac..ee7921bf142 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/Form/index.tsx @@ -48,6 +48,7 @@ import { Type, VisualizableField, NodeProperties, + VisualizerLocation, } from "@wso2/ballerina-core"; import { FormContext, Provider } from "../../context"; import { @@ -319,9 +320,11 @@ export interface FormProps { projectPath?: string; selectedNode?: NodeKind; onSubmit?: (data: FormValues, dirtyFields?: any) => void; + onBlur?: (data: FormValues, dirtyFields?: any) => void; + onFormValidation?: (data: FormValues, dirtyFields?: any) => Promise; isSaving?: boolean; openRecordEditor?: (isOpen: boolean, fields: FormValues, editingField?: FormField, newType?: string | NodeProperties) => void; - openView?: (filePath: string, position: NodePosition) => void; + openView?: (location: VisualizerLocation) => void; openSubPanel?: (subPanel: SubPanel) => void; subPanelView?: SubPanelView; onCancelForm?: () => void; @@ -340,19 +343,23 @@ export interface FormProps { concertRequired?: boolean; concertMessage?: string; formImports?: FormImports; + popupManager?: { + addPopup: (modal: React.ReactNode, id: string, title: string, height?: number, width?: number) => void; + removeLastPopup: () => void; + closePopup: (id: string) => void; + } preserveOrder?: boolean; handleSelectedTypeChange?: (type: string | CompletionItem) => void; scopeFieldAddon?: React.ReactNode; - newServerUrl?: string; onChange?: (fieldKey: string, value: any, allValues: FormValues) => void; - mcpTools?: { name: string; description?: string }[]; - onToolsChange?: (selectedTools: string[]) => void; injectedComponents?: { component: React.ReactNode; index: number; }[]; hideSaveButton?: boolean; // Option to hide the save button onValidityChange?: (isValid: boolean) => void; // Callback for form validity status + changeOptionalFieldTitle?: string; // Option to change the title of optional fields + openFormTypeEditor?: (open: boolean, newType?: string, editingField?: FormField) => void; } export const Form = forwardRef((props: FormProps) => { @@ -364,6 +371,8 @@ export const Form = forwardRef((props: FormProps) => { cancelText, actionButton, onSubmit, + onBlur, + onFormValidation, isSaving, onCancelForm, oneTimeForm, @@ -377,6 +386,7 @@ export const Form = forwardRef((props: FormProps) => { visualizableField, recordTypeFields, nestedForm, + popupManager, compact = false, isInferredReturnType, concertRequired = true, @@ -385,12 +395,11 @@ export const Form = forwardRef((props: FormProps) => { preserveOrder = false, handleSelectedTypeChange, scopeFieldAddon, - newServerUrl, - mcpTools, - onToolsChange, injectedComponents, hideSaveButton = false, onValidityChange, + changeOptionalFieldTitle = undefined, + openFormTypeEditor } = props; const { @@ -413,11 +422,13 @@ export const Form = forwardRef((props: FormProps) => { const [isMarkdownExpanded, setIsMarkdownExpanded] = useState(false); const [isIdentifierEditing, setIsIdentifierEditing] = useState(false); const [isSubComponentEnabled, setIsSubComponentEnabled] = useState(false); + const [optionalFieldsTitle, setOptionalFieldsTitle] = useState("Advanced Configurations"); const markdownRef = useRef(null); const [isUserConcert, setIsUserConcert] = useState(false); const [savingButton, setSavingButton] = useState(null); + const [isValidatingForm, setIsValidatingForm] = useState(false); useEffect(() => { @@ -481,6 +492,10 @@ export const Form = forwardRef((props: FormProps) => { }); setDiagnosticsInfo(diagnosticsMap); reset(defaultValues); + + if (changeOptionalFieldTitle) { + setOptionalFieldsTitle("Advanced Configurations"); + } } }, [formFields, reset]); @@ -489,6 +504,18 @@ export const Form = forwardRef((props: FormProps) => { onSubmit && onSubmit(data, dirtyFields); }; + const handleFormValidation = async (): Promise => { + setIsValidatingForm(true); + const data = getValues(); + const validationResult = await onFormValidation(data, dirtyFields); + setIsValidatingForm(false); + return validationResult; + } + + const handleOnBlur = async () => { + onBlur?.(getValues(), dirtyFields); + }; + // Expose a method to trigger the save // useImperativeHandle(ref, () => ({ // triggerSave: () => handleSubmit(handleOnSave)(), // Call handleSubmit with the save function @@ -587,48 +614,61 @@ export const Form = forwardRef((props: FormProps) => { }, targetLineRange, fileName, + popupManager: popupManager, + nodeInfo: { + kind: selectedNode, + } }; // Find the first editable field - const firstEditableFieldIndex = formFields.findIndex((field) => field.editable !== false); + const firstEditableFieldIndex = formFields.findIndex( + (field) => field.editable !== false && (field.value == null || field.value === '') + ); const isValid = useMemo(() => { - if (!diagnosticsInfo) { - return true; - } + let hasDiagnostics: boolean = false; - let hasDiagnostics: boolean = true; - for (const diagnosticsInfoItem of diagnosticsInfo) { - const key = diagnosticsInfoItem.key; - if (!key) { - continue; - } + // Check diagnostics from diagnosticsInfo state + if (diagnosticsInfo) { + for (const diagnosticsInfoItem of diagnosticsInfo) { + const key = diagnosticsInfoItem.key; + if (!key) { + continue; + } - let diagnostics: Diagnostic[] = diagnosticsInfoItem.diagnostics || []; - if (diagnostics.length === 0) { - clearErrors(key); - continue; - } else { - // Filter the BCE2066 diagnostics - diagnostics = diagnostics.filter( - (d) => d.code !== "BCE2066" || d.message !== "incompatible types: expected 'any', found 'error'" - ); - - const diagnosticsMessage = diagnostics.map((d) => d.message).join("\n"); - setError(key, { type: "validate", message: diagnosticsMessage }); - - // If the severity is not ERROR, don't invalidate - const hasErrorDiagnostics = diagnostics.some((d) => d.severity === 1); - if (hasErrorDiagnostics) { - hasDiagnostics = false; - } else { + let diagnostics: Diagnostic[] = diagnosticsInfoItem.diagnostics || []; + if (diagnostics.length === 0) { + clearErrors(key); continue; + } else { + // Filter the BCE2066 diagnostics + diagnostics = diagnostics.filter( + (d) => d.code !== "BCE2066" || d.message !== "incompatible types: expected 'any', found 'error'" + ); + + const diagnosticsMessage = diagnostics.map((d) => d.message).join("\n"); + setError(key, { type: "validate", message: diagnosticsMessage }); + + // If the severity is not ERROR, don't invalidate + const hasErrorDiagnostics = diagnostics.some((d) => d.severity === 1); + if (hasErrorDiagnostics) { + hasDiagnostics = true; + } else { + continue; + } } } } - return hasDiagnostics; - }, [diagnosticsInfo]); + // Check diagnostics directly from formFields + for (const field of formFields) { + if (field.diagnostics && field.diagnostics.length > 0) { + hasDiagnostics = true; + } + } + + return !hasDiagnostics; + }, [diagnosticsInfo, formFields]); // Call onValidityChange when form validity changes useEffect(() => { @@ -648,8 +688,8 @@ export const Form = forwardRef((props: FormProps) => { }; const disableSaveButton = - !isValid || isValidating || props.disableSaveButton || (concertMessage && concertRequired && !isUserConcert) || - isIdentifierEditing || isSubComponentEnabled || Object.keys(errors).length > 0; + isValidating || props.disableSaveButton || (concertMessage && concertRequired && !isUserConcert) || + isIdentifierEditing || isSubComponentEnabled || isValidatingForm || Object.keys(errors).length > 0; const handleShowMoreClick = () => { setIsMarkdownExpanded(!isMarkdownExpanded); @@ -684,9 +724,12 @@ export const Form = forwardRef((props: FormProps) => { })(); }; - const handleOnSaveClick = () => { + const handleOnSaveClick = async () => { setSavingButton('save'); - handleSubmit(handleOnSave)(); + const isValidForm = onFormValidation ? await handleFormValidation() : true; + if (isValidForm) { + handleSubmit(handleOnSave)(); + } }; return ( @@ -731,25 +774,35 @@ export const Form = forwardRef((props: FormProps) => { .sort((a, b) => b.groupNo - a.groupNo) .filter((field) => field.type !== "VIEW"); - const renderedComponents = fieldsToRender.reduce((acc, field, index) => { + const renderedComponents: React.ReactNode[] = []; + let renderedFieldCount = 0; + const injectedIndices = new Set(); // Track which injections have been added + + fieldsToRender.forEach((field) => { + // Check if we need to inject components before this field if (injectedComponents) { injectedComponents.forEach((injected) => { - if (injected.index === index) { - acc.push(injected.component); + if (injected.index === renderedFieldCount && !injectedIndices.has(injected.index)) { + renderedComponents.push( + + {injected.component} + + ); + injectedIndices.add(injected.index); } }); } if (field.advanced || field.hidden) { - return acc; + return; } // When preserveOrder is false, skip prioritized fields (they'll be rendered at bottom) if (!preserveOrder && isPrioritizedField(field)) { - return acc; + return; } const updatedField = updateFormFieldWithImports(field, formImports); - acc.push( + renderedComponents.push( { openSubPanel={handleOpenSubPanel} subPanelView={subPanelView} handleOnFieldFocus={handleOnFieldFocus} - autoFocus={firstEditableFieldIndex === formFields.indexOf(updatedField)} + autoFocus={firstEditableFieldIndex === formFields.indexOf(updatedField) && !hideSaveButton} recordTypeFields={recordTypeFields} onIdentifierEditingStateChange={handleIdentifierEditingStateChange} handleOnTypeChange={handleOnTypeChange} setSubComponentEnabled={setIsSubComponentEnabled} handleNewTypeSelected={handleNewTypeSelected} - newServerUrl={newServerUrl} - mcpTools={mcpTools} - onToolsChange={onToolsChange} + onBlur={handleOnBlur} + isContextTypeEditorSupported={updatedField?.isContextTypeSupported} + openFormTypeEditor={ + openFormTypeEditor && + ((open: boolean, newType?: string) => openFormTypeEditor(open, newType, updatedField)) + } /> {updatedField.key === "scope" && scopeFieldAddon} ); - return acc; - }, []); + renderedFieldCount++; + }); + // Check if we need to inject components after all fields if (injectedComponents) { injectedComponents.forEach((injected) => { - if (injected.index >= fieldsToRender.length) { - renderedComponents.push(injected.component); + if (injected.index >= renderedFieldCount && !injectedIndices.has(injected.index)) { + renderedComponents.push( + + {injected.component} + + ); + injectedIndices.add(injected.index); } }); } @@ -789,7 +851,7 @@ export const Form = forwardRef((props: FormProps) => { })()} {hasAdvanceFields && ( - Optional Configurations + {optionalFieldsTitle} {!showAdvancedOptions && ( { {hasAdvanceFields && showAdvancedOptions && formFields.map((field) => { - if (field.advanced) { + if (field.advanced && !field.hidden) { const updatedField = updateFormFieldWithImports(field, formImports); return ( @@ -837,6 +899,7 @@ export const Form = forwardRef((props: FormProps) => { recordTypeFields={recordTypeFields} onIdentifierEditingStateChange={handleIdentifierEditingStateChange} handleOnTypeChange={handleOnTypeChange} + onBlur={handleOnBlur} /> ); @@ -853,6 +916,7 @@ export const Form = forwardRef((props: FormProps) => { handleOnFieldFocus={handleOnFieldFocus} recordTypeFields={recordTypeFields} onIdentifierEditingStateChange={handleIdentifierEditingStateChange} + onBlur={handleOnBlur} /> )} {typeField && !isInferredReturnType && ( @@ -867,6 +931,7 @@ export const Form = forwardRef((props: FormProps) => { recordTypeFields={recordTypeFields} onIdentifierEditingStateChange={handleIdentifierEditingStateChange} handleNewTypeSelected={handleNewTypeSelected} + onBlur={handleOnBlur} /> )} @@ -879,6 +944,7 @@ export const Form = forwardRef((props: FormProps) => { onIdentifierEditingStateChange={handleIdentifierEditingStateChange} handleNewTypeSelected={handleNewTypeSelected} handleOnTypeChange={handleOnTypeChange} + onBlur={handleOnBlur} /> {typeField && ( { onClick={handleOnSaveClick} disabled={disableSaveButton || isSaving} > - {isSaving && savingButton === 'save' ? ( + {isValidatingForm ? ( + Validating... + ) : isSaving && savingButton === 'save' ? ( {submitText || "Saving..."} - ) : submitText || "Save"} + ) : ( + submitText || "Save" + )} )} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/Form/types.ts b/workspaces/ballerina/ballerina-side-panel/src/components/Form/types.ts index a2bcbd3bf82..d74111308e8 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/Form/types.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/Form/types.ts @@ -20,6 +20,7 @@ import { RefObject } from "react"; import { DiagnosticMessage, FormDiagnostics, TextEdit, PropertyModel, LinePosition, LineRange, ExpressionProperty, Metadata, RecordTypeField, Imports, ConfigProperties } from "@wso2/ballerina-core"; import { ParamConfig } from "../ParamManager/ParamManager"; import { CompletionItem, FormExpressionEditorRef, HelperPaneHeight, HelperPaneOrigin, OptionProps } from "@wso2/ui-toolkit"; +import { InputMode } from "../editors/MultiModeExpressionEditor/ChipExpressionEditor/types"; export type FormValues = { [key: string]: any; @@ -53,12 +54,14 @@ export type FormField = { enabled: boolean; lineRange?: LineRange; metadata?: Metadata; + isContextTypeSupported?: boolean; codedata?: { [key: string]: any }; imports?: { [key: string]: string }; actionLabel?: string | JSX.Element; properties?: ConfigProperties; actionCallback?: () => void; - onValueChange?: (value: string) => void; + onValueChange?: (value: string | boolean) => void; + isGraphqlId?: boolean; }; export type ParameterValue = { @@ -89,6 +92,12 @@ export type HelperPaneCompletionCategory = { items: HelperPaneCompletionItem[]; } + +export type HelperpaneOnChangeOptions = { + closeHelperPane?: boolean; + replaceFullText?: boolean; +} + export type HelperPaneVariableInfo = { category: HelperPaneCompletionCategory[]; } @@ -137,7 +146,8 @@ type FormTypeConditionalProps = { value: string, cursorPosition: number, fetchReferenceTypes: boolean, - valueTypeConstraint: string + valueTypeConstraint: string, + fieldKey?: string ) => Promise; getTypeHelper: ( fieldKey: string, @@ -170,12 +180,13 @@ type FormHelperPaneConditionalProps = { anchorRef: RefObject, defaultValue: string, value: string, - onChange: (value: string, updatedCursorPosition: number) => void, + onChange: (value: string, options?: HelperpaneOnChangeOptions) => void, changeHelperPaneState: (isOpen: boolean) => void, helperPaneHeight: HelperPaneHeight, recordTypeField?: RecordTypeField, isAssignIdentifier?: boolean, - valueTypeConstraint?: string | string[] + valueTypeConstraint?: string | string[], + inputMode?: InputMode ) => JSX.Element; helperPaneOrigin?: HelperPaneOrigin; helperPaneHeight: HelperPaneHeight; @@ -209,6 +220,19 @@ type FormExpressionEditorBaseProps = { onSave?: (value: string) => void | Promise; onRemove?: () => void; onSaveConfigurables?: (values: any) => void; + onOpenRecordConfigPage?: (fieldKey: string, currentValue: string, recordTypeField: any, onChange: (value: string) => void) => void; +} + +type ExpressionEditorRPCManager = { + getExpressionTokens: ( + expression: string, + filePath: string, + position: LinePosition + ) => Promise; +} + +type ExpressionEditorFormProps = { + rpcManager: ExpressionEditorRPCManager; } type SanitizedExpressionEditorProps = { @@ -221,6 +245,7 @@ export type FormExpressionEditorProps = FormTypeConditionalProps & FormHelperPaneConditionalProps & FormExpressionEditorBaseProps & + ExpressionEditorFormProps & SanitizedExpressionEditorProps; export type FormImports = { diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/GroupList/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/GroupList/index.tsx index 3eb6bc77a45..555826f913e 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/GroupList/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/GroupList/index.tsx @@ -22,6 +22,8 @@ import styled from "@emotion/styled"; import { CallIcon, LogIcon } from "../../resources"; import { Category, Node } from "./../NodeList/types"; import { stripHtmlTags } from "../Form/utils"; +import { formatMethodName } from "../../utils/formatMethodName"; + namespace S { export const Card = styled.div<{}>` @@ -229,7 +231,8 @@ function getComponentTitle(node: Node) { return stripHtmlTags(node.description); } - return stripHtmlTags(node.label); + const label = stripHtmlTags(node.label); + return formatMethodName(label); } function getComponentDescription(node: Node) { diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx index 477e7a121ed..422df6601f6 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/index.tsx @@ -18,21 +18,23 @@ import React, { useMemo } from 'react'; import { Label, Slider, SwitchWrapper } from './styles'; -import { getDefaultExpressionMode } from '../editors/ChipExpressionEditor/utils'; -import { InputMode } from '../editors/ChipExpressionEditor/types'; +import { InputMode } from '../editors/MultiModeExpressionEditor/ChipExpressionEditor/types'; +import { getDefaultExpressionMode } from '../editors/MultiModeExpressionEditor/ChipExpressionEditor/utils'; interface ModeSwitcherProps { value: InputMode; + isRecordTypeField: boolean; onChange: (value: InputMode) => void; valueTypeConstraint: string | string[]; + fieldKey?: string; } -const ModeSwitcher: React.FC = ({ value, onChange, valueTypeConstraint }) => { +const ModeSwitcher: React.FC = ({ value, isRecordTypeField, onChange, valueTypeConstraint, fieldKey }) => { const isChecked = value === InputMode.EXP; const defaultMode = useMemo( - () => getDefaultExpressionMode(valueTypeConstraint), - [valueTypeConstraint] + () => isRecordTypeField ? InputMode.RECORD : getDefaultExpressionMode(valueTypeConstraint, fieldKey), + [valueTypeConstraint, isRecordTypeField, fieldKey] ); const handlePrimaryModeClick = () => { diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/styles.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/styles.tsx index 58a604160b3..872f1e0c11e 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/styles.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ModeSwitcher/styles.tsx @@ -34,15 +34,19 @@ export const Label = styled.span` top: 50%; transform: translateY(-50%); cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + white-space: nowrap; &:first-of-type { left: 0; - width: 30%; + width: 40%; } &:last-of-type { - left: 30%; - width: 70%; + left: 40%; + width: 60%; } `; @@ -67,17 +71,13 @@ export const Slider = styled.div<{ checked: boolean }>` content: ""; position: absolute; height: calc(100% - 4px); - width: ${props => props.checked ? 'calc(70% - 6px)' : 'calc(30% - 2px)'}; - left: ${props => props.checked ? 'calc(30% + 4px)' : '2px'}; - top: 1px; + width: ${props => props.checked ? 'calc(60% - 4px)' : 'calc(40% - 2px)'}; + left: ${props => props.checked ? 'calc(40% + 2px)' : '2px'}; border-radius: 1px; background: ${ThemeColors.SURFACE_DIM}; transition: all 0.25s cubic-bezier(0.4, 0.0, 0.2, 1); z-index: 0; border: 1px solid ${ThemeColors.OUTLINE}; - box-shadow: - 0 1px 3px rgba(0, 0, 0, 0.4), - inset 0 1px 0 rgba(255, 255, 255, 0.1); } &:active:before { @@ -94,7 +94,8 @@ export const SwitchWrapper = styled.div` position: relative; display: inline-flex; align-items: center; - width: 110px; + min-width: 112px; + width: max-content; height: 24px; margin-top: 2px; `; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts index eeca926019b..da37cedf5bd 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts +++ b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/categoryConfig.ts @@ -31,6 +31,7 @@ export interface CategoryConfig { actions: CategoryAction[]; showWhenEmpty: boolean; useConnectionContainer: boolean; // Whether to use getConnectionContainer for rendering + fixed?: boolean; // Whether the header should be non-collapsible } // Configuration for all categories with their specific behaviors @@ -44,7 +45,8 @@ export const CATEGORY_CONFIGS: Record = { handlerKey: 'onAddConnection' }], showWhenEmpty: true, - useConnectionContainer: true + useConnectionContainer: true, + fixed: true }, "Current Integration": { title: "Current Integration", @@ -72,7 +74,8 @@ export const CATEGORY_CONFIGS: Record = { } ], showWhenEmpty: true, - useConnectionContainer: false + useConnectionContainer: false, + fixed: true }, "Agents": { title: "Agents", @@ -89,7 +92,8 @@ export const CATEGORY_CONFIGS: Record = { handlerKey: 'onAdd' }], showWhenEmpty: true, - useConnectionContainer: true + useConnectionContainer: true, + fixed: true }, "Vector Stores": { title: "Vector Stores", @@ -100,7 +104,8 @@ export const CATEGORY_CONFIGS: Record = { handlerKey: 'onAdd' }], showWhenEmpty: true, - useConnectionContainer: true + useConnectionContainer: true, + fixed: true }, "Embedding Providers": { title: "Embedding Providers", @@ -111,7 +116,8 @@ export const CATEGORY_CONFIGS: Record = { handlerKey: 'onAdd' }], showWhenEmpty: true, - useConnectionContainer: true + useConnectionContainer: true, + fixed: true }, "Data Loaders": { title: "Data Loaders", @@ -122,7 +128,8 @@ export const CATEGORY_CONFIGS: Record = { handlerKey: 'onAdd' }], showWhenEmpty: true, - useConnectionContainer: true + useConnectionContainer: true, + fixed: true }, "Chunkers": { title: "Chunkers", @@ -133,10 +140,11 @@ export const CATEGORY_CONFIGS: Record = { handlerKey: 'onAdd' }], showWhenEmpty: true, - useConnectionContainer: true + useConnectionContainer: true, + fixed: true }, - "Vector Knowledge Bases": { - title: "Vector Knowledge Bases", + "Knowledge Bases": { + title: "Knowledge Bases", actions: [{ type: 'add', tooltip: "", @@ -144,7 +152,8 @@ export const CATEGORY_CONFIGS: Record = { handlerKey: 'onAdd' }], showWhenEmpty: true, - useConnectionContainer: true + useConnectionContainer: true, + fixed: true } }; @@ -163,6 +172,11 @@ export const shouldUseConnectionContainer = (title: string): boolean => { return config?.useConnectionContainer ?? false; }; +export const isCategoryFixed = (title: string): boolean => { + const config = getCategoryConfig(title); + return config?.fixed ?? false; +}; + export const getCategoryActions = (title: string, contextTitle?: string): CategoryAction[] => { const config = getCategoryConfig(title); if (!config) return []; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx index 12ff3dd2877..f8e1e6ba4e2 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/NodeList/index.tsx @@ -36,7 +36,7 @@ import { GroupListSkeleton } from "../Skeletons"; import GroupList from "../GroupList"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; import { getExpandedCategories, setExpandedCategories, getDefaultExpandedState } from "../../utils/localStorage"; -import { getCategoryConfig, shouldShowEmptyCategory, shouldUseConnectionContainer, getCategoryActions, CategoryAction } from "./categoryConfig"; +import { shouldShowEmptyCategory, shouldUseConnectionContainer, getCategoryActions, isCategoryFixed } from "./categoryConfig"; namespace S { export const Container = styled.div<{}>` @@ -54,6 +54,7 @@ namespace S { export const PanelBody = styled(SidePanelBody)` height: calc(100vh - 100px); padding-top: 0; + overflow-y: auto; `; export const StyledSearchInput = styled(SearchBox)` @@ -237,6 +238,7 @@ namespace S { } `; + export const AdvancedSubTitle = styled.div` font-size: 12px; opacity: 0.7; @@ -261,6 +263,18 @@ namespace S { } `; + export const CategoryHeaderFixed = styled.div<{ fullWidth?: boolean }>` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: -webkit-fill-available; + padding: 12px; + cursor: default; + border-radius: 5px; + margin: ${({ fullWidth }) => fullWidth ? '0 -12px' : '0'}; + `; + export const CategoryCard = styled.div<{ hasBackground?: boolean }>` background-color: ${({ hasBackground }) => hasBackground ? `rgba(255, 255, 255, 0.02)` : 'transparent'}; border-radius: 5px; @@ -544,7 +558,7 @@ export function NodeList(props: NodeListProps) { "Logging": { hasBackground: true }, "Model Providers": { hasBackground: false }, "Embedding Providers": { hasBackground: false }, - "Vector Knowledge Bases": { hasBackground: false }, + "Knowledge Bases": { hasBackground: false }, "Vector Stores": { hasBackground: false }, "Data Loaders": { hasBackground: false }, "Chunkers": { hasBackground: false }, @@ -589,9 +603,17 @@ export function NodeList(props: NodeListProps) { {!isSubCategory ? ( - toggleCategory(group.title)}> - - {group.title} + (() => { + const isFixed = isCategoryFixed(group.title); + const HeaderComponent = isFixed ? S.CategoryHeaderFixed : S.CategoryHeader; + const headerProps = isFixed ? + { fullWidth: config.hasBackground && !isSubCategory } : + { fullWidth: config.hasBackground && !isSubCategory, onClick: () => toggleCategory(group.title) }; + + return ( + + + {group.title}
{categoryActions.map((action, actionIndex) => { const handlers = { @@ -622,14 +644,18 @@ export function NodeList(props: NodeListProps) { ); })} - - - - - + {!isFixed && ( + + + + + + )}
-
+ + ); + })() ) : ( @@ -637,7 +663,7 @@ export function NodeList(props: NodeListProps) { )} - {isCategoryExpanded && ( + {(isCategoryExpanded || isCategoryFixed(group.title)) && ( <> {(!group.items || group.items.length === 0) && !searchText && diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx index bb2bc268d26..18b77bf5056 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamEditor.tsx @@ -22,7 +22,7 @@ import React, { RefObject, useEffect, useState } from 'react'; import { EditorContainer } from './styles'; import { Parameter } from './ParamManager'; import Form from '../Form'; -import { FormField, FormValues } from '../Form/types'; +import { FormField, FormValues, HelperpaneOnChangeOptions } from '../Form/types'; import { useFormContext } from '../../context'; import { RecordTypeField, TextEdit } from '@wso2/ballerina-core'; import { HelperPaneHeight } from '@wso2/ui-toolkit'; @@ -51,7 +51,7 @@ export function ParamEditor(props: ParamProps) { anchorRef: RefObject, defaultValue: string, value: string, - onChange: (value: string, updatedCursorPosition: number) => void, + onChange: (value: string, options?: HelperpaneOnChangeOptions) => void, changeHelperPaneState: (isOpen: boolean) => void, helperPaneHeight: HelperPaneHeight, recordTypeField?: RecordTypeField diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx index 357f80bd888..99b0b61d179 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/ParamManager/ParamManager.tsx @@ -313,6 +313,9 @@ export function ParamManager(props: ParamManagerProps) { field.editable = param.identifierEditable; field.lineRange = param.identifierRange; } + if (field.key === "type" && field.type === "ACTION_TYPE" && param.formValues['isGraphqlId'] !== undefined) { + field.isGraphqlId = param.formValues['isGraphqlId']; + } } }) render.push( diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/TypeModeSwitcher/index.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/TypeModeSwitcher/index.tsx new file mode 100644 index 00000000000..dc73fc19282 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/TypeModeSwitcher/index.tsx @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Label, Slider, SwitchWrapper } from './styles'; + + +export enum TypeInputMode { + GUIDED = "Guided", + ADVANCED = "Advanced" +} + +interface TypeModeSwitcherProps { + value: TypeInputMode; + onChange: (value: TypeInputMode) => void; +} + +const TypeModeSwitcher: React.FC = ({ value, onChange }) => { + const isChecked = value === TypeInputMode.ADVANCED; + + const handleGuidedClick = () => { + onChange(TypeInputMode.GUIDED); + }; + + const handleAdvancedClick = () => { + onChange(TypeInputMode.ADVANCED); + }; + + return ( + + + + + + + ); +}; + +export default TypeModeSwitcher; + diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/TypeModeSwitcher/styles.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/TypeModeSwitcher/styles.tsx new file mode 100644 index 00000000000..83d0126a7d6 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/TypeModeSwitcher/styles.tsx @@ -0,0 +1,101 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import styled from "@emotion/styled"; +import { ThemeColors } from '@wso2/ui-toolkit'; + +interface LabelProps { + active: boolean; +} + +export const Label = styled.span` + position: absolute; + text-align: center; + font-size: 10px; + z-index: 1; + transition: all 0.2s ease; + color: ${props => props.active ? ThemeColors.ON_SURFACE : ThemeColors.ON_SURFACE_VARIANT}; + font-weight: ${props => props.active ? '600' : '500'}; + top: 50%; + transform: translateY(-50%); + cursor: pointer; + + &:first-of-type { + left: 0; + width: 40%; + } + + &:last-of-type { + left: 40%; + width: 60%; + } +`; + +export const Slider = styled.div<{ checked: boolean }>` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: ${ThemeColors.SURFACE_CONTAINER}; + color: ${ThemeColors.ON_SURFACE}; + font-weight: 500; + border-radius: 2px; + display: flex; + justify-content: flex-start; + align-items: center; + padding: 2px; + transition: all 0.2s ease; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + + &:before { + content: ""; + position: absolute; + height: calc(100% - 4px); + width: ${props => props.checked ? 'calc(60% - 6px)' : 'calc(40% - 2px)'}; + left: ${props => props.checked ? 'calc(40% + 4px)' : '2px'}; + top: 1px; + border-radius: 1px; + background: ${ThemeColors.SURFACE_DIM}; + transition: all 0.25s cubic-bezier(0.4, 0.0, 0.2, 1); + z-index: 0; + border: 1px solid ${ThemeColors.OUTLINE}; + box-shadow: + 0 1px 3px rgba(0, 0, 0, 0.4), + inset 0 1px 0 rgba(255, 255, 255, 0.1); + } + + &:active:before { + background: ${ThemeColors.SURFACE_DIM}; + box-shadow: + 0 1px 2px rgba(0, 0, 0, 0.3), + inset 0 1px 0 rgba(255, 255, 255, 0.05); + transform: translateY(1px); + } +`; + +export const SwitchWrapper = styled.div` + font-size: 12px; + position: relative; + display: inline-flex; + align-items: center; + width: 110px; + height: 24px; + margin-top: 2px; +`; + diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionExpressionEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionExpressionEditor.tsx index e7916549762..e585412f381 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionExpressionEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionExpressionEditor.tsx @@ -26,6 +26,7 @@ const Row = styled.div` display: flex; flex-direction: column; margin: 0; + width: 100%; `; const actionButtonStyles = { diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionTypeEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionTypeEditor.tsx index 25018fa5bce..046290cfb8b 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionTypeEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ActionTypeEditor.tsx @@ -33,6 +33,7 @@ import { Typography, CompletionItem, Button, + CheckBox, } from "@wso2/ui-toolkit"; import { FormField } from "../Form/types"; import { useFormContext } from "../../context"; @@ -44,6 +45,53 @@ import styled from "@emotion/styled"; import ReactMarkdown from "react-markdown"; import { NodeProperties, PropertyModel } from "@wso2/ballerina-core"; +const isGraphQLScalarType = (type: string): boolean => { + const scalarTypes = [ + 'string', + 'int', + 'float', + 'decimal' + ]; + + const isScalarOrArrayOfScalar = (t: string): boolean => { + let cleanType = t.trim().replace(/\?$/, ''); + + if (cleanType.endsWith('[]')) { + const baseType = cleanType.slice(0, -2).trim(); + return isScalarOrArrayOfScalar(baseType); + } + + if (cleanType.startsWith('(') && cleanType.endsWith(')')) { + cleanType = cleanType.slice(1, -1).trim(); + if (cleanType.includes('|')) { + const unionParts = cleanType.split('|').map(part => part.trim()); + return unionParts.every(part => isScalarOrArrayOfScalar(part)); + } + } + + return scalarTypes.includes(cleanType.toLowerCase()); + }; + + let cleanType = type.trim().replace(/\?$/, ''); + + if (cleanType.endsWith('[]') && cleanType.includes('(') && cleanType.includes('|')) { + const baseType = cleanType.slice(0, -2).trim(); + return isScalarOrArrayOfScalar(baseType); + } + + if (cleanType.includes('|')) { + const unionParts = cleanType.split('|').map(part => part.trim()); + return unionParts.every(part => isScalarOrArrayOfScalar(part)); + } + + if (cleanType.endsWith('[]')) { + const baseType = cleanType.slice(0, -2).trim(); + return isScalarOrArrayOfScalar(baseType); + } + + return isScalarOrArrayOfScalar(cleanType); +}; + interface ActionTypeEditorProps { field: FormField; openRecordEditor: (open: boolean, newType?: string | NodeProperties) => void; @@ -74,6 +122,31 @@ const codiconStyles = { marginRight: '2px' } +const CheckBoxLabel = styled.div` + font-family: var(--font-family); + color: var(--vscode-editor-foreground); + text-align: left; +`; + +const CheckBoxDescription = styled.div` + font-family: var(--font-family); + color: var(--vscode-list-deemphasizedForeground); + text-align: left; +`; + +const CheckBoxLabelGroup = styled.div` + display: flex; + flex-direction: column; + gap: 2px; +`; + +const CheckBoxBoxGroup = styled.div` + display: flex; + flex-direction: row; + width: 100%; + align-items: flex-start; +`; + const EditorRibbon = ({ onClick }: { onClick: () => void }) => { return ( @@ -129,6 +202,8 @@ export function ActionTypeEditor(props: ActionTypeEditorProps) { const [focused, setFocused] = useState(false); const [isTypeOptional, setIsTypeOptional] = useState(false); const [isCodeActionMenuOpen, setIsCodeActionMenuOpen] = useState(false); + const [isGraphqlId, setIsGraphqlId] = useState(field.isGraphqlId || false); + const [showGraphqlCheckbox, setShowGraphqlCheckbox] = useState(false); const [isTypeHelperOpen, setIsTypeHelperOpen] = useState(false); @@ -248,7 +323,7 @@ export function ActionTypeEditor(props: ActionTypeEditorProps) { setFocused(true); // Trigger actions on focus await onFocus?.(); - await retrieveVisibleTypes(value, value.length, true, field.valueTypeConstraint as string); + await retrieveVisibleTypes(value, value.length, true, field.valueTypeConstraint as string, field.key); handleOnFieldFocus?.(field.key); }; @@ -336,12 +411,35 @@ export function ActionTypeEditor(props: ActionTypeEditorProps) { // Initialize optional type state based on field value useEffect(() => { - if (field.value) { - const isOptional = checkTypeOptional(field.value); + const typeValue = typeof field.value === 'string' ? field.value : ''; + + if (typeValue) { + const isOptional = checkTypeOptional(typeValue); setIsTypeOptional(isOptional); + + // Check if the type is a GraphQL scalar type to show/hide checkbox + const isScalar = isGraphQLScalarType(typeValue); + setShowGraphqlCheckbox(isScalar); + } else { + // If no value, hide the checkbox + setShowGraphqlCheckbox(false); } }, [field.value]); + // Initialize GraphQL ID state from field + useEffect(() => { + if (field.isGraphqlId !== undefined) { + setIsGraphqlId(field.isGraphqlId); + } + }, [field.isGraphqlId]); + + // Update form value when checkbox changes + const handleGraphqlIdChange = (checked: boolean) => { + setIsGraphqlId(checked); + // Store the isGraphqlId value in a hidden form field + form.setValue(`isGraphqlId`, checked, { shouldValidate: false, shouldDirty: true }); + }; + // Create code actions and menu items const createCodeActionsAndMenuItems = () => { const nullableAction = field.properties ? field.properties["nullableAction"] : undefined; @@ -540,6 +638,16 @@ export function ActionTypeEditor(props: ActionTypeEditorProps) { const isOptional = checkTypeOptional(updatedValue); setIsTypeOptional(isOptional); + // Check if the new type is a GraphQL scalar type + const isScalar = isGraphQLScalarType(updatedValue); + setShowGraphqlCheckbox(isScalar); + + // If the type is not a scalar, reset the GraphQL ID checkbox + if (!isScalar) { + setIsGraphqlId(false); + form.setValue(`isGraphqlId`, false, { shouldValidate: false, shouldDirty: true }); + } + // Set show default completion const typeExists = referenceTypes.find((type) => type.label === updatedValue); @@ -567,7 +675,8 @@ export function ActionTypeEditor(props: ActionTypeEditorProps) { updatedValue, updatedCursorPosition, false, - field.valueTypeConstraint as string + field.valueTypeConstraint as string, + field.key ); }} onCompletionSelect={handleCompletionSelect} @@ -588,6 +697,27 @@ export function ActionTypeEditor(props: ActionTypeEditorProps) { helperPaneZIndex={40001} /> {error?.message && } + + {/* GraphQL ID Checkbox - only shown for scalar types */} + {showGraphqlCheckbox ? ( +
+ + handleGraphqlIdChange(checked)} + data-testid="graphql-id-checkbox" + /> + + ID Type + + Mark this field as a GraphQL ID type + + + +
+ ) : null + } ); }} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx index 016c6c3c25f..e5067b449e4 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ArrayEditor.tsx @@ -16,7 +16,7 @@ * under the License. */ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { Button, Codicon, ThemeColors } from "@wso2/ui-toolkit"; import styled from "@emotion/styled"; @@ -102,18 +102,31 @@ export function ArrayEditor(props: ArrayEditorProps) { const value = watch(`${field.key}-${index}`); let updatedValue = value; + if (updatedValue === undefined) { // Use the initial array value if available updatedValue = Array.isArray(field.value) ? field.value[index] : ""; setValue(`${field.key}-${index}`, updatedValue ?? ""); } + // HACK: When using expression editor and if the user deleted whole text then the value becomes + // an empty value. + if (updatedValue === "") { + setValue(`${field.key}-${index}`, " "); + } return updatedValue; }) - .filter(Boolean); // Update the main field.value array whenever individual fields change + const previousValuesRef = useRef(); useEffect(() => { + const serializedValues = JSON.stringify(values); + if (previousValuesRef.current === serializedValues) { + return; + } + + // Prevent redundant form updates which would otherwise trigger endless rerenders. + previousValuesRef.current = serializedValues; setValue(field.key, values); }, [values, field.key, setValue]); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/AutoCompleteEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/AutoCompleteEditor.tsx new file mode 100644 index 00000000000..7d7238fcad7 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/AutoCompleteEditor.tsx @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect } from "react"; + +import { AutoComplete } from "@wso2/ui-toolkit"; + +import { FormField } from "../Form/types"; +import { capitalize, getValueForDropdown } from "./utils"; +import { useFormContext } from "../../context"; +import { SubPanel, SubPanelView } from "@wso2/ballerina-core"; + +interface AutoCompleteEditorProps { + field: FormField; + openSubPanel?: (subPanel: SubPanel) => void; +} + +export function AutoCompleteEditor(props: AutoCompleteEditorProps) { + const { field, openSubPanel } = props; + const { form } = useFormContext(); + const { register, setValue, watch } = form; + + const value = watch(field.key); + + return ( + { + setValue(field.key, val); + field.onValueChange?.(val); + }} + sx={{ + marginRight: "-4px", + "& [id='dropdown-container']": { + width: "292px", + } + }} + /> + ); +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxConditionalEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxConditionalEditor.tsx new file mode 100644 index 00000000000..e35afc239bf --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxConditionalEditor.tsx @@ -0,0 +1,216 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect, useState } from "react"; +import { FormField } from "../Form/types"; +import { CheckBoxGroup, FormCheckBox } from "@wso2/ui-toolkit"; +import styled from "@emotion/styled"; +import { EditorFactory } from "./EditorFactory"; +import { useFormContext } from "../../context"; +import { PropertyModel } from "@wso2/ballerina-core"; + +const Form = styled.div` + display: grid; + gap: 20px; + width: 100%; +`; + +const FormSection = styled.div` + display: grid; + gap: 20px; + width: 100%; +`; + +const Label = styled.div` + font-family: var(--font-family); + color: var(--vscode-editor-foreground); + text-align: left; + text-transform: capitalize; +`; +const Description = styled.div` + font-family: var(--font-family); + color: var(--vscode-list-deemphasizedForeground); + text-align: left; +`; +const LabelGroup = styled.div` + display: flex; + flex-direction: column; + gap: 2px; +`; +const BoxGroup = styled.div` + display: flex; + flex-direction: row; + width: 100%; + align-items: flex-start; + gap: 10px; +`; + +interface CheckBoxConditionalEditorProps { + field: FormField; +} + +export function CheckBoxConditionalEditor(props: CheckBoxConditionalEditorProps) { + const { field } = props; + const { form } = useFormContext(); + const { register, control, watch } = form; + const [checkedStateFields, setCheckedStateFields] = useState([]); + const [uncheckedStateFields, setUncheckedStateFields] = useState([]); + + const { setValue } = form; + + const checked = watch(field.key, true); + + useEffect(() => { + if (field.choices && field.choices.length > 1) { + // first choice is for checked state, second is for unchecked state + const mappedCheckedStateFields = mapPropertiesToFormFields(field.choices[0].properties || {}); + setCheckedStateFields(mappedCheckedStateFields); + + const mappedUncheckedStateFields = mapPropertiesToFormFields(field.choices[1].properties || {}); + setUncheckedStateFields(mappedUncheckedStateFields); + } + }, [field]); + + // Add useEffect to set initial values + useEffect(() => { + if (checkedStateFields.length > 0) { + Object.entries(checkedStateFields).forEach(([_, propValue]) => { + if (propValue.value !== undefined) { + setValue(propValue.key, propValue.value); + } + }); + } + }, [checkedStateFields]); + + // Add useEffect to set initial values + useEffect(() => { + if (uncheckedStateFields.length > 0) { + Object.entries(uncheckedStateFields).forEach(([_, propValue]) => { + if (propValue.value !== undefined) { + setValue(propValue.key, propValue.value); + } + } + ); + } + }, [uncheckedStateFields]); + + return ( +
+ + + + + + {field.documentation} + + + + + {checked && checkedStateFields.length > 0 && ( + <> + {checkedStateFields.map((dfield, index) => ( + + ))} + + )} + {!checked && uncheckedStateFields.length > 0 && ( + <> + {uncheckedStateFields.map((dfield, index) => ( + + ))} + + )} + +
+ + ); + +} + +function getBooleanValue(field: FormField, value: any) { + if (field.type === "FLAG") { + return value === "true" || value === true; + } + return value; +} + + +/** + * Maps the properties to an array of FormField objects. + * + * @param properties The properties to map. + * @returns An array of FormField objects. + */ +function mapPropertiesToFormFields(properties: { [key: string]: PropertyModel; }): FormField[] { + if (!properties) return []; + + return Object.entries(properties).map(([key, property]) => { + + // Determine value for MULTIPLE_SELECT + let value: any = property.value; + if (property.valueType === "MULTIPLE_SELECT") { + if (property.values && property.values.length > 0) { + value = property.values; + } else if (property.value) { + value = [property.value]; + } else if (property.items && property.items.length > 0) { + value = [property.items[0]]; + } else { + value = []; + } + } + + let items = undefined; + if (property.valueType === "MULTIPLE_SELECT" || property.valueType === "SINGLE_SELECT") { + items = property.items; + } + + return { + key, + label: property?.metadata?.label, + type: property.valueType, + documentation: property?.metadata?.description || "", + valueType: property.valueTypeConstraint, + editable: true, + enabled: property.enabled ?? true, + optional: property.optional, + value, + valueTypeConstraint: property.valueTypeConstraint, + advanced: property.advanced, + diagnostics: [], + items, + choices: property.choices, + placeholder: property.placeholder, + addNewButton: property.addNewButton, + lineRange: property?.codedata?.lineRange, + advanceProps: mapPropertiesToFormFields(property.properties) + } as FormField; + }); +} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxEditor.tsx index 6e8667ab960..d69774536af 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CheckBoxEditor.tsx @@ -53,7 +53,7 @@ interface TextEditorProps { export function CheckBoxEditor(props: TextEditorProps) { const { field } = props; const { form } = useFormContext(); - const { register, control } = form; + const { register, control, setValue } = form; const getBooleanValue = (value: any) => { if (field.type === "FLAG") { @@ -62,13 +62,22 @@ export function CheckBoxEditor(props: TextEditorProps) { return value; }; + const handleChange = (e: any) => { + const checked = e.target.value; + setValue(field.key, checked); + field.onValueChange?.(checked); + }; + return ( - diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ChipExpressionEditor/utils.ts b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ChipExpressionEditor/utils.ts deleted file mode 100644 index 6c83cab5da4..00000000000 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ChipExpressionEditor/utils.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { INPUT_MODE_MAP, InputMode } from "./types"; - -export const getInputModeFromTypes = (valueTypeConstraint: string | string[]): InputMode => { - if (!valueTypeConstraint) return; - let types: string[]; - if (typeof valueTypeConstraint === 'string') { - if (valueTypeConstraint.includes('|')) { - types = valueTypeConstraint.split('|').map(t => t.trim()); - } else { - types = [valueTypeConstraint]; - } - } else { - types = valueTypeConstraint; - } - - for (let i = 0; i < types.length; i++) { - if (INPUT_MODE_MAP[types[i]]) { - return INPUT_MODE_MAP[types[i]]; - } - } - return; -}; - -export const getDefaultExpressionMode = (valueTypeConstraint: string | string[]): InputMode => { - if (!valueTypeConstraint) throw new Error("Value type constraint is undefined"); - return getInputModeFromTypes(valueTypeConstraint); -} diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ChoiceForm.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ChoiceForm.tsx index b4fe58cdc36..5cbe6bfe7a6 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ChoiceForm.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ChoiceForm.tsx @@ -79,6 +79,10 @@ export function ChoiceForm(props: ChoiceFormProps) { const formFields: FormField[] = []; for (const key in model.properties) { const expression = model.properties[key]; + let items = undefined; + if (expression.valueType === "MULTIPLE_SELECT" || expression.valueType === "SINGLE_SELECT") { + items = expression.items; + } const formField: FormField = { key: key, label: expression?.metadata.label || key.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/^./, str => str.toUpperCase()), @@ -92,7 +96,7 @@ export function ChoiceForm(props: ChoiceFormProps) { valueTypeConstraint: expression.valueTypeConstraint, advanced: expression.advanced, diagnostics: [], - items: expression.valueType === "SINGLE_SELECT" ? [""].concat(expression.items) : expression.items, + items, choices: expression.choices, placeholder: expression.placeholder, defaultValue: expression.defaultValue as string @@ -109,7 +113,7 @@ export function ChoiceForm(props: ChoiceFormProps) { ({ id: index.toString(), value: index + 1, content: choice.metadata.label }))} @@ -125,11 +129,12 @@ export function ChoiceForm(props: ChoiceFormProps) { - {dynamicFields.map((dfield) => { + {dynamicFields.map((dfield, index) => { return ( ); diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/CustomDropdownEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CustomDropdownEditor.tsx index 173442a7548..2150283ec37 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/CustomDropdownEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/CustomDropdownEditor.tsx @@ -20,7 +20,7 @@ // so, created new custom dropdown editor for this purpose and keep previous one for other forms. // update the editor factory to use this component for enum and single select fields. -import React, { useEffect, useState } from "react"; +import React from "react"; import styled from "@emotion/styled"; import { Dropdown } from "@wso2/ui-toolkit"; @@ -29,19 +29,10 @@ import { FormField } from "../Form/types"; import { capitalize, getValueForDropdown } from "./utils"; import { useFormContext } from "../../context"; import { SubPanel, SubPanelView } from "@wso2/ballerina-core"; -import { McpToolsSelection } from "./McpToolsSelection"; interface CustomDropdownEditorProps { field: FormField; openSubPanel?: (subPanel: SubPanel) => void; - // Additional props for MCP tools functionality - serviceUrl?: string; - configs?: object; - rpcClient?: any; - onToolsChange?: (selectedTools: string[]) => void; - renderToolsSelection?: () => React.ReactNode; - newServerUrl?: string; - mcpTools?: { name: string; description?: string }[]; } const DropdownStack = styled.div` @@ -55,58 +46,9 @@ const DropdownSpacer = styled.div` `; export function CustomDropdownEditor(props: CustomDropdownEditorProps) { - const { field, openSubPanel, newServerUrl } = props; + const { field, openSubPanel } = props; const { form } = useFormContext(); - const { register, setValue, watch } = form; - const [mcpTools, setMcpTools] = useState<{ name: string; description?: string }[]>(props.mcpTools || []); - - // Sync mcpTools state with props.mcpTools - useEffect(() => { - if (props.mcpTools) { - setMcpTools(props.mcpTools); - } - }, [props.mcpTools]); - const [selectedMcpTools, setSelectedMcpTools] = useState>(new Set()); - const [loadingMcpTools, setLoadingMcpTools] = useState(false); - const [mcpToolsError, setMcpToolsError] = useState(""); - const toolSelection = watch(field.key); - const [localServiceUrl, setLocalServiceUrl] = useState(""); - - useEffect(() => { - if (newServerUrl && newServerUrl !== localServiceUrl) { - setLocalServiceUrl(newServerUrl); - console.log(">>> New server URL set:", newServerUrl); - } - }, [newServerUrl]); - - const handleToolSelectionChange = (toolName: string, isSelected: boolean) => { - const newSelectedTools = new Set(selectedMcpTools); - if (isSelected) { - newSelectedTools.add(toolName); - } else { - newSelectedTools.delete(toolName); - } - setSelectedMcpTools(newSelectedTools); - // Call the callback with the updated selection - props.onToolsChange?.(Array.from(newSelectedTools)); - }; - - const handleSelectAllTools = () => { - let newSelectedTools: Set; - if (selectedMcpTools.size === mcpTools.length) { - newSelectedTools = new Set(); - } else { - newSelectedTools = new Set(mcpTools.map(tool => tool.name)); - } - setSelectedMcpTools(newSelectedTools); - // Call the callback with the updated selection - props.onToolsChange?.(Array.from(newSelectedTools)); - }; - - // Call onToolsChange whenever selectedMcpTools changes - useEffect(() => { - props.onToolsChange?.(Array.from(selectedMcpTools)); - }, [selectedMcpTools]); + const { register, setValue } = form; const showScopeControls = field.key === "toolsToInclude"; @@ -135,17 +77,6 @@ export function CustomDropdownEditor(props: CustomDropdownEditorProps) { addNewBtnClick={field.addNewButton ? () => openSubPanel({ view: SubPanelView.ADD_NEW_FORM }) : undefined} /> - {toolSelection === "Selected" && ( - - )} ); } diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx index 9a64c434a41..351252ce02d 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownChoiceForm.tsx @@ -91,12 +91,13 @@ export function DropdownChoiceForm(props: DropdownChoiceFormProps) { /> - {dynamicFields.map((dfield) => { + {dynamicFields.map((dfield, index) => { if (!dfield.advanced && !dfield.optional) { return ( ); } diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownEditor.tsx index 53141e52b04..f0d82ea0705 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownEditor.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/DropdownEditor.tsx @@ -47,13 +47,29 @@ export function DropdownEditor(props: DropdownEditorProps) { field.items = ["Global", "Local"]; } + // Handle items: string[] or { label, value }[] + let dropdownItems; + if (field.itemOptions) { + dropdownItems = field.itemOptions; + } else if (Array.isArray(field.items) && field.items.length > 0) { + if (typeof field.items[0] === "string") { + dropdownItems = field.items.map((item) => ({ id: item, content: item, value: item })); + } else if (typeof field.items[0] === "object" && field.items[0] !== null && "label" in field.items[0] && "value" in field.items[0]) { + dropdownItems = field.items.map((item: any) => ({ id: item.value, content: item.label, value: item.value })); + } else { + dropdownItems = []; + } + } else { + dropdownItems = []; + } + return ( ({ id: item, content: item, value: item }))} + items={dropdownItems} required={!field.optional} disabled={!field.editable} onChange={(e) => { diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/EditorFactory.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/EditorFactory.tsx index 8cd30a5c81f..b63b7c6101e 100644 --- a/workspaces/ballerina/ballerina-side-panel/src/components/editors/EditorFactory.tsx +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/EditorFactory.tsx @@ -24,7 +24,7 @@ import { FormField } from "../Form/types"; import { MultiSelectEditor } from "./MultiSelectEditor"; import { TextEditor } from "./TextEditor"; import { TypeEditor } from "./TypeEditor"; -import { ContextAwareExpressionEditor } from "./ExpressionEditor"; +import { ContextAwareExpressionEditor, DataMapperJoinClauseRhsEditor } from "./ExpressionEditor"; import { ParamManagerEditor } from "../ParamManager/ParamManager"; import { DropdownEditor } from "./DropdownEditor"; import { FileSelect } from "./FileSelect"; @@ -44,7 +44,9 @@ import { HeaderSetEditor } from "./HeaderSetEditor"; import { CompletionItem } from "@wso2/ui-toolkit"; import { CustomDropdownEditor } from "./CustomDropdownEditor"; import { ActionExpressionEditor } from "./ActionExpressionEditor"; +import { CheckBoxConditionalEditor } from "./CheckBoxConditionalEditor"; import { ActionTypeEditor } from "./ActionTypeEditor"; +import { AutoCompleteEditor } from "./AutoCompleteEditor"; interface FormFieldEditorProps { field: FormField; @@ -53,17 +55,16 @@ interface FormFieldEditorProps { openSubPanel?: (subPanel: SubPanel) => void; subPanelView?: SubPanelView; handleOnFieldFocus?: (key: string) => void; + onBlur?: () => void | Promise; autoFocus?: boolean; handleOnTypeChange?: () => void; recordTypeFields?: RecordTypeField[]; onIdentifierEditingStateChange?: (isEditing: boolean) => void; setSubComponentEnabled?: (isAdding: boolean) => void; handleNewTypeSelected?: (type: string | CompletionItem) => void; - scopeFieldAddon?: React.ReactNode; - newServerUrl?: string; - mcpTools?: { name: string; description?: string }[]; - onToolsChange?: (selectedTools: string[]) => void; + isContextTypeEditorSupported?: boolean; + openFormTypeEditor?: (open: boolean, newType?: string) => void; } export const EditorFactory = (props: FormFieldEditorProps) => { @@ -74,15 +75,18 @@ export const EditorFactory = (props: FormFieldEditorProps) => { openSubPanel, subPanelView, handleOnFieldFocus, + onBlur, autoFocus, handleOnTypeChange, recordTypeFields, onIdentifierEditingStateChange, setSubComponentEnabled, handleNewTypeSelected, - scopeFieldAddon, - newServerUrl + isContextTypeEditorSupported, + openFormTypeEditor, + scopeFieldAddon } = props; + if (!field.enabled || field.hidden) { return <>; } else if (field.type === "MULTIPLE_SELECT") { @@ -114,61 +118,66 @@ export const EditorFactory = (props: FormFieldEditorProps) => { } else if (field.type === "EXPRESSION" && field.key === "resourcePath") { // HACK: this should fixed with the LS API. this is used to avoid the expression editor for resource path field. return ; - } else if (field.type.toUpperCase() === "ENUM" && props.mcpTools) { - // TODO: this is a temporary solution to handle the enum field with MCP tools. - return ; } else if (field.type.toUpperCase() === "ENUM") { // Enum is a dropdown field return ; + } else if (field.type.toUpperCase() === "AUTOCOMPLETE") { + return ; + } else if (field.type === "CUSTOM_DROPDOWN") { + return ; } else if (field.type === "FILE_SELECT" && field.editable) { return ; - } else if (field.type === "SINGLE_SELECT" && field.editable && props.mcpTools) { - // TODO: this is a temporary solution to handle the single select field with MCP tools. - return ; } else if (field.type === "SINGLE_SELECT" && field.editable) { return ; - } else if (!field.items && (field.key === "type" || field.type === "TYPE") && field.editable) { - // Type field is a type editor + } else if (!field.items && (field.type === "ACTION_TYPE") && field.editable) { return ( - ); - } else if (!field.items && (field.type === "ACTION_TYPE") && field.editable) { + } else if (!field.items && (field.key === "type" || field.type === "TYPE") && field.editable) { return ( - ); - } else if (!field.items && (field.type === "EXPRESSION" || field.type === "LV_EXPRESSION" || field.type == "ACTION_OR_EXPRESSION") && field.editable) { - // Expression field is a inline expression editor + } else if (!field.items && (field.type === "RAW_TEMPLATE") && field.editable) { return ( - recordField.key === field.key)} /> ); - } else if (!field.items && field.type === "RAW_TEMPLATE" && field.editable) { + } else if (!field.items && (field.type === "EXPRESSION" || field.type === "LV_EXPRESSION" || field.type == "ACTION_OR_EXPRESSION") && field.editable) { + // Expression field is a inline expression editor return ( - recordField.key === field.key)} /> ); } else if (field.type === "VIEW") { @@ -188,7 +197,7 @@ export const EditorFactory = (props: FormFieldEditorProps) => { } else if (field.type !== "IDENTIFIER" && !field.editable) { return ; } else if (field.type === "IDENTIFIER" && field.editable) { - return ; + return ; } else if (field.type === "SERVICE_PATH" || field.type === "ACTION_PATH") { return ; } else if (!field.items && field.type === "ACTION_EXPRESSION") { @@ -202,6 +211,26 @@ export const EditorFactory = (props: FormFieldEditorProps) => { recordTypeField={recordTypeFields?.find(recordField => recordField.key === field.key)} /> ); + } else if (field.type === "CONDITIONAL_FIELDS" && field.editable) { + // Conditional fields is a group of fields which are conditionally shown based on a checkbox field + return ( + + ); + } else if (field.type === "DM_JOIN_CLAUSE_RHS_EXPRESSION") { + // Expression field for Data Mapper join on condition RHS + return ( + recordField.key === field.key)} + /> + ); } else { // Default to text editor // Readonly fields are also treated as text editor diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/ExpandedEditor.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/ExpandedEditor.tsx new file mode 100644 index 00000000000..aaedb7adf26 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/ExpandedEditor.tsx @@ -0,0 +1,282 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useEffect } from "react"; +import { createPortal } from "react-dom"; +import styled from "@emotion/styled"; +import { ThemeColors, Divider, Typography, CompletionItem, FnSignatureDocumentation, HelperPaneHeight } from "@wso2/ui-toolkit"; +import { FormField, HelperpaneOnChangeOptions } from "../../Form/types"; +import { EditorMode } from "./modes/types"; +import { TextMode } from "./modes/TextMode"; +import { PromptMode } from "./modes/PromptMode"; +import { ExpressionMode } from "./modes/ExpressionMode"; +import { TemplateMode } from "./modes/TemplateMode"; +import { MinimizeIcon } from "../MultiModeExpressionEditor/ChipExpressionEditor/components/FloatingButtonIcons"; +import { LineRange } from "@wso2/ballerina-core/lib/interfaces/common"; +import { DiagnosticMessage } from "@wso2/ballerina-core"; +import { InputMode } from "../MultiModeExpressionEditor/ChipExpressionEditor/types"; +import { FieldError } from "react-hook-form"; + +interface ExpandedPromptEditorProps { + isOpen: boolean; + field: FormField; + value: string; + onClose: () => void; + onSave: (value: string) => void; + onChange: (updatedValue: string, updatedCursorPosition: number) => void; + // Optional mode override (if not provided, will be auto-detected) + mode?: EditorMode; + // Expression mode specific props + completions?: CompletionItem[]; + fileName?: string; + targetLineRange?: LineRange; + sanitizedExpression?: (value: string) => string; + rawExpression?: (value: string) => string; + extractArgsFromFunction?: (value: string, cursorPosition: number) => Promise<{ + label: string; + args: string[]; + currentArgIndex: number; + documentation?: FnSignatureDocumentation; + }>; + getHelperPane?: ( + value: string, + onChange: (value: string, options?: HelperpaneOnChangeOptions) => void, + helperPaneHeight: HelperPaneHeight + ) => React.ReactNode; + // Error diagnostics props + error?: FieldError; + formDiagnostics?: DiagnosticMessage[]; + inputMode?: InputMode; +} + +const ModalContainer = styled.div` + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 2001; + display: flex; + justify-content: center; + align-items: center; + background-color: color-mix(in srgb, ${ThemeColors.SECONDARY_CONTAINER} 70%, transparent); + font-family: GilmerRegular; +`; + +const ModalBox = styled.div` + width: 1000px; + max-width: 95vw; + min-width: 800px; + height: 80vh; + max-height: 90vh; + min-height: 600px; + position: relative; + display: flex; + flex-direction: column; + overflow: auto; + padding: 8px 8px; + border-radius: 3px; + background-color: ${ThemeColors.SURFACE_DIM}; + box-shadow: 0 3px 8px rgb(0 0 0 / 0.2); + z-index: 2001; + resize: both; +`; + +const ModalHeaderSection = styled.header` + display: flex; + align-items: center; + justify-content: space-between; + padding-inline: 16px; + margin-bottom: 4px; +`; + +const ModalContent = styled.div` + flex: 1; + overflow-y: hidden; + padding: 8px 18px 16px; + display: flex; + flex-direction: column; +`; + +const MinimizeButton = styled.div` + cursor: pointer; + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + opacity: 0.7; + transition: opacity 0.2s ease, background-color 0.2s ease; + border-radius: 2px; + + &:hover { + opacity: 1; + background-color: var(--vscode-editor-inactiveSelectionBackground); + } + + svg { + width: 16px; + height: auto; + } +`; + +const TitleWrapper = styled.div` + margin: 12px 0; + + h3 { + margin: 0; + } +`; + +/** + * Map of mode components - add new modes here + */ +const MODE_COMPONENTS: Record> = { + [InputMode.TEXT]: TextMode, + [InputMode.PROMPT]: PromptMode, + [InputMode.EXP]: ExpressionMode, + [InputMode.TEMPLATE]: TemplateMode +}; + +export const ExpandedEditor: React.FC = ({ + isOpen, + field, + value, + onClose, + onChange, + onSave, + mode: propMode, + completions, + fileName, + targetLineRange, + sanitizedExpression, + rawExpression, + extractArgsFromFunction, + getHelperPane, + error, + formDiagnostics, + inputMode +}) => { + const promptFields = ["instructions", "role"]; + + // Determine mode - use prop if provided, otherwise auto-detect + let defaultMode: EditorMode = propMode ?? ( + promptFields.includes(field.key) ? InputMode.PROMPT : InputMode.TEXT + ); + + if (field.key === "query" && propMode === InputMode.TEXT) { + defaultMode = InputMode.PROMPT; + } + + const [mode, setMode] = useState(defaultMode); + const [mouseDownTarget, setMouseDownTarget] = useState(null); + + useEffect(() => { + setMode(defaultMode); + }, [defaultMode]); + + const handleMinimize = () => { + onClose(); + }; + + const handleBackdropMouseDown = (e: React.MouseEvent) => { + setMouseDownTarget(e.target); + }; + + const handleBackdropClick = (e: React.MouseEvent) => { + // Only close if both mousedown and click happened on the backdrop + if (e.target === e.currentTarget && mouseDownTarget === e.currentTarget) { + handleMinimize(); + } + setMouseDownTarget(null); + }; + + if (!isOpen) return null; + + // Get the current mode component + const ModeComponent = MODE_COMPONENTS[mode]; + + // Prepare props for the mode component + const modeProps = { + value: value, + onChange: onChange, + field, + // Props for prompt mode + ...(mode === InputMode.PROMPT && { + completions, + fileName, + targetLineRange, + sanitizedExpression, + rawExpression, + extractArgsFromFunction, + getHelperPane, + error, + formDiagnostics, + inputMode + }), + // Props for expression mode + ...(mode === InputMode.EXP && { + completions, + fileName, + targetLineRange, + sanitizedExpression, + rawExpression, + extractArgsFromFunction, + getHelperPane, + error, + formDiagnostics + }), + // Props for template mode + ...(mode === InputMode.TEMPLATE && { + completions, + fileName, + targetLineRange, + sanitizedExpression, + rawExpression, + extractArgsFromFunction, + getHelperPane, + error, + formDiagnostics, + inputMode + }) + }; + // HACK: Must find a proper central way to manager popups + const targetEl = document.getElementById("visualizer-container"); + + return targetEl ? createPortal( + + e.stopPropagation()}> + + + {field.label} + + + + + +
+ +
+ + + +
+
, + targetEl + ) : null; +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/LinkDialog.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/LinkDialog.tsx new file mode 100644 index 00000000000..ca85542738d --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/LinkDialog.tsx @@ -0,0 +1,175 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useEffect } from "react"; +import styled from "@emotion/styled"; +import { TextField, Button, Codicon, Divider, Typography, ThemeColors } from "@wso2/ui-toolkit"; + +const PopupContainer = styled.div` + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 30000; + display: flex; + justify-content: center; + align-items: center; +`; + +const Overlay = styled.div` + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); + z-index: 29999; +`; + +const PopupBox = styled.div` + width: 400px; + max-width: 90vw; + max-height: 90vh; + position: relative; + display: flex; + flex-direction: column; + overflow: hidden; + padding: 16px; + border-radius: 3px; + background-color: ${ThemeColors.SURFACE_DIM}; + box-shadow: 0 3px 8px rgb(0 0 0 / 0.2); + z-index: 30001; +`; + +const PopupHeader = styled.header` + display: flex; + align-items: center; + justify-content: space-between; + padding-inline: 16px; + margin-bottom: 8px; +`; + +const PopupContent = styled.div` + display: flex; + flex-direction: column; + gap: 16px; + padding: 16px; +`; + +const DialogActions = styled.div` + display: flex; + justify-content: flex-end; + gap: 8px; + margin-top: 8px; + padding: 0 16px 8px; +`; + +interface LinkDialogProps { + isOpen: boolean; + onClose: () => void; + onInsert: (href: string, title?: string) => void; + initialTitle?: string; +} + +export const LinkDialog: React.FC = ({ + isOpen, + onClose, + onInsert, + initialTitle = "" +}) => { + const [url, setUrl] = useState(""); + const [title, setTitle] = useState(initialTitle); + + useEffect(() => { + if (isOpen) { + setUrl(""); + setTitle(initialTitle); + } + }, [isOpen, initialTitle]); + + const handleInsert = () => { + if (!url.trim()) return; + onInsert(url.trim(), title.trim() || undefined); + handleClose(); + }; + + const handleClose = () => { + setUrl(""); + setTitle(""); + onClose(); + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "Enter" && url.trim()) { + e.preventDefault(); + handleInsert(); + } else if (e.key === "Escape") { + e.preventDefault(); + handleClose(); + } + }; + + if (!isOpen) return null; + + return ( + <> + + + + + + Create a link + + + + + + setUrl((e.target as HTMLInputElement).value)} + autoFocus={true} + required={true} + /> + + setTitle((e.target as HTMLInputElement).value)} + /> + + + + + + + + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/RawTemplateMarkdownToolbar.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/RawTemplateMarkdownToolbar.tsx new file mode 100644 index 00000000000..5ffd0d4dc27 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/RawTemplateMarkdownToolbar.tsx @@ -0,0 +1,407 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useRef, useEffect } from "react"; +import styled from "@emotion/styled"; +import { ThemeColors, Icon, Switch } from "@wso2/ui-toolkit"; +import { EditorView } from "@codemirror/view"; +import { + insertMarkdownFormatting, + insertMarkdownHeader, + insertMarkdownLink, + insertMarkdownBlockquote, + insertMarkdownUnorderedList, + insertMarkdownOrderedList, + undoCommand, + redoCommand, + canUndo, + canRedo +} from "../utils/templateUtils"; +import { HelperPaneToggleButton } from "../../MultiModeExpressionEditor/ChipExpressionEditor/components/HelperPaneToggleButton"; + +const ToolbarContainer = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + gap: 4px; + padding: 8px 12px; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + border-radius: 4px 4px 0 0; + flex-wrap: wrap; + font-family: GilmerMedium; +`; + +const ToolbarButtonGroup = styled.div` + display: flex; + align-items: center; + gap: 4px; + flex-wrap: wrap; +`; + +const ToolbarButton = styled.button<{ isActive?: boolean }>` + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + padding: 0; + background-color: ${(props: { isActive?: boolean }) => props.isActive ? ThemeColors.SECONDARY_CONTAINER : 'transparent'}; + color: ${ThemeColors.ON_SURFACE}; + border: 1px solid ${(props: { isActive?: boolean }) => props.isActive ? ThemeColors.OUTLINE : 'transparent'}; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s ease; + + &:hover:not(:disabled) { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + border-color: ${ThemeColors.OUTLINE}; + } + + &:active:not(:disabled) { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &:focus-visible { + outline: 2px solid ${ThemeColors.PRIMARY}; + outline-offset: 2px; + } +`; + +const ToolbarDivider = styled.div` + width: 1px; + height: 24px; + background-color: ${ThemeColors.OUTLINE_VARIANT}; + margin: 0 4px; +`; + +const SplitButtonContainer = styled.div` + position: relative; + display: flex; + align-items: center; +`; + +const SplitButtonMain = styled(ToolbarButton)` + border-radius: 4px 0 0 4px; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + border-right: none; + min-width: 40px; + font-size: 12px; + font-weight: 600; +`; + +const SplitButtonDropdown = styled(ToolbarButton)` + width: 24px; + border-radius: 0 4px 4px 0; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; +`; + +const DropdownMenu = styled.div<{ isOpen: boolean }>` + position: absolute; + top: calc(100% + 4px); + left: 0; + min-width: 120px; + background-color: var(--vscode-dropdown-background); + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + border-radius: 4px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + z-index: 1000; + display: ${(props: { isOpen: boolean }) => props.isOpen ? 'block' : 'none'}; + overflow: hidden; +`; + +const DropdownItem = styled.button<{ size: number }>` + width: 100%; + padding: 8px 12px; + background-color: transparent; + color: ${ThemeColors.ON_SURFACE}; + border: none; + text-align: left; + cursor: pointer; + font-size: ${(props: { size: number }) => { + const sizes: { [key: number]: string } = { + 1: '16px', + 2: '15px', + 3: '14px', + 4: '13px', + 5: '12px', + 6: '11px' + }; + return sizes[props.size] || '14px'; + }}; + font-weight: ${(props: { size: number }) => props.size <= 3 ? '600' : '500'}; + transition: background-color 0.2s ease; + + &:hover { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + } + + &:active { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + } + + &:focus-visible { + outline: 2px solid ${ThemeColors.PRIMARY}; + outline-offset: -2px; + } +`; + +interface RawTemplateMarkdownToolbarProps { + editorView: EditorView | null; + isSourceView?: boolean; + onToggleView?: () => void; + hideHelperPaneToggle?: boolean; + helperPaneToggle?: { + ref: React.RefObject; + isOpen: boolean; + onClick: () => void; + }; +} + +export const RawTemplateMarkdownToolbar = React.forwardRef(({ + editorView, + isSourceView = false, + onToggleView, + hideHelperPaneToggle = false, + helperPaneToggle +}, ref) => { + const [, forceUpdate] = React.useReducer(x => x + 1, 0); + const [currentHeadingLevel, setCurrentHeadingLevel] = useState(1); + const [isHeadingDropdownOpen, setIsHeadingDropdownOpen] = useState(false); + const dropdownRef = useRef(null); + + // Update toolbar state when editor state changes + React.useEffect(() => { + if (!editorView) return; + + const updateListener = () => { + forceUpdate(); + }; + + editorView.dom.addEventListener('input', updateListener); + editorView.dom.addEventListener('click', updateListener); + editorView.dom.addEventListener('keyup', updateListener); + + return () => { + editorView.dom.removeEventListener('input', updateListener); + editorView.dom.removeEventListener('click', updateListener); + editorView.dom.removeEventListener('keyup', updateListener); + }; + }, [editorView]); + + // Close dropdown when clicking outside + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setIsHeadingDropdownOpen(false); + } + }; + + if (isHeadingDropdownOpen) { + document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); + } + }, [isHeadingDropdownOpen]); + + // Prevent buttons from taking focus away from the editor + const handleMouseDown = (e: React.MouseEvent) => { + e.preventDefault(); + }; + + const handleBold = () => insertMarkdownFormatting(editorView, '**'); + const handleItalic = () => insertMarkdownFormatting(editorView, '_'); + // const handleCode = () => insertMarkdownFormatting(editorView, '`'); // Inline code formatting disabled for now + const handleLink = () => insertMarkdownLink(editorView); + const handleQuote = () => insertMarkdownBlockquote(editorView); + const handleUnorderedList = () => insertMarkdownUnorderedList(editorView); + const handleOrderedList = () => insertMarkdownOrderedList(editorView); + + const handleHeader = (level?: number) => { + const headingLevel = level ?? currentHeadingLevel; + insertMarkdownHeader(editorView, headingLevel); + if (level !== undefined) { + setCurrentHeadingLevel(level); + setIsHeadingDropdownOpen(false); + } + }; + + const toggleHeadingDropdown = () => setIsHeadingDropdownOpen(!isHeadingDropdownOpen); + + const isUndoAvailable = editorView ? canUndo(editorView) : false; + const isRedoAvailable = editorView ? canRedo(editorView) : false; + + return ( + + + {!hideHelperPaneToggle && helperPaneToggle && ( + <> + + + + )} + + undoCommand(editorView)} + onMouseDown={handleMouseDown} + > + + + + redoCommand(editorView)} + onMouseDown={handleMouseDown} + > + + + + + + + + + + + + + + {/* + + */} + + + + + + + + + handleHeader()} + onMouseDown={handleMouseDown} + > + H{currentHeadingLevel} + + + + + + {[1, 2, 3, 4, 5, 6].map((level) => ( + handleHeader(level)} + onMouseDown={handleMouseDown} + > + Heading {level} + + ))} + + + + + + + + + + + + + + + + + + + {onToggleView && ( + + )} + + ); +}); + +RawTemplateMarkdownToolbar.displayName = 'RawTemplateMarkdownToolbar'; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/RichTemplateMarkdownToolbar.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/RichTemplateMarkdownToolbar.tsx new file mode 100644 index 00000000000..54b819d7c97 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/controls/RichTemplateMarkdownToolbar.tsx @@ -0,0 +1,469 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useRef, useEffect } from "react"; +import styled from "@emotion/styled"; +import { ThemeColors, Icon, Switch } from "@wso2/ui-toolkit"; +import { EditorView } from "prosemirror-view"; +import { + toggleBold, + toggleItalic, + toggleLink, + toggleHeading, + toggleBlockquote, + toggleBulletList, + toggleOrderedList, + isMarkActive, + isNodeActive, + isListActive, + undoCommand, + redoCommand, + canUndo, + canRedo +} from "../../MultiModeExpressionEditor/RichTextTemplateEditor/plugins/markdownCommands"; +import { HelperPaneToggleButton } from "../../MultiModeExpressionEditor/ChipExpressionEditor/components/HelperPaneToggleButton"; +import { LinkDialog } from "./LinkDialog"; + +const ToolbarContainer = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + gap: 4px; + padding: 8px 12px; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + border-radius: 4px 4px 0 0; + flex-wrap: wrap; + font-family: GilmerMedium; +`; + +const ToolbarButtonGroup = styled.div` + display: flex; + align-items: center; + gap: 4px; + flex-wrap: wrap; +`; + +const ToolbarButton = styled.button<{ isActive?: boolean }>` + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + padding: 0; + background-color: ${(props: { isActive?: boolean }) => props.isActive ? ThemeColors.SECONDARY_CONTAINER : 'transparent'}; + color: ${ThemeColors.ON_SURFACE}; + border: 1px solid ${(props: { isActive?: boolean }) => props.isActive ? ThemeColors.OUTLINE : 'transparent'}; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s ease; + + &:hover:not(:disabled) { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + border-color: ${ThemeColors.OUTLINE}; + } + + &:active:not(:disabled) { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &:focus-visible { + outline: 2px solid ${ThemeColors.PRIMARY}; + outline-offset: 2px; + } +`; + +const ToolbarDivider = styled.div` + width: 1px; + height: 24px; + background-color: ${ThemeColors.OUTLINE_VARIANT}; + margin: 0 4px; +`; + +const SplitButtonContainer = styled.div` + position: relative; + display: flex; + align-items: center; +`; + +const SplitButtonMain = styled(ToolbarButton)` + border-radius: 4px 0 0 4px; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + border-right: none; + min-width: 40px; + font-size: 12px; + font-weight: 600; +`; + +const SplitButtonDropdown = styled(ToolbarButton)` + width: 24px; + border-radius: 0 4px 4px 0; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; +`; + +const DropdownMenu = styled.div<{ isOpen: boolean }>` + position: absolute; + top: calc(100% + 4px); + left: 0; + min-width: 120px; + background-color: var(--vscode-dropdown-background); + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + border-radius: 4px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + z-index: 1000; + display: ${(props: { isOpen: boolean }) => props.isOpen ? 'block' : 'none'}; + overflow: hidden; +`; + +const DropdownItem = styled.button<{ size: number }>` + width: 100%; + padding: 8px 12px; + background-color: transparent; + color: ${ThemeColors.ON_SURFACE}; + border: none; + text-align: left; + cursor: pointer; + font-size: ${(props: { size: number }) => { + const sizes: { [key: number]: string } = { + 1: '16px', + 2: '15px', + 3: '14px', + 4: '13px', + 5: '12px', + 6: '11px' + }; + return sizes[props.size] || '14px'; + }}; + font-weight: ${(props: { size: number }) => props.size <= 3 ? '600' : '500'}; + transition: background-color 0.2s ease; + + &:hover { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + } + + &:active { + background-color: ${ThemeColors.SECONDARY_CONTAINER}; + } + + &:focus-visible { + outline: 2px solid ${ThemeColors.PRIMARY}; + outline-offset: -2px; + } +`; + +interface RichTemplateMarkdownToolbarProps { + editorView: EditorView | null; + isSourceView?: boolean; + onToggleView?: () => void; + hideHelperPaneToggle?: boolean; + helperPaneToggle?: { + ref: React.RefObject; + isOpen: boolean; + onClick: () => void; + }; +} + +export const RichTemplateMarkdownToolbar = React.forwardRef(({ + editorView, + isSourceView = false, + onToggleView, + hideHelperPaneToggle = false, + helperPaneToggle +}, ref) => { + const [, forceUpdate] = React.useReducer(x => x + 1, 0); + const [currentHeadingLevel, setCurrentHeadingLevel] = useState(1); + const [isHeadingDropdownOpen, setIsHeadingDropdownOpen] = useState(false); + const [isLinkDialogOpen, setIsLinkDialogOpen] = useState(false); + const [selectedTextForLink, setSelectedTextForLink] = useState(""); + const dropdownRef = useRef(null); + + // Update toolbar state when editor state changes + React.useEffect(() => { + if (!editorView) return; + + const updateListener = () => { + forceUpdate(); + }; + + editorView.dom.addEventListener('input', updateListener); + editorView.dom.addEventListener('click', updateListener); + editorView.dom.addEventListener('keyup', updateListener); + + return () => { + editorView.dom.removeEventListener('input', updateListener); + editorView.dom.removeEventListener('click', updateListener); + editorView.dom.removeEventListener('keyup', updateListener); + }; + }, [editorView]); + + // Close dropdown when clicking outside + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setIsHeadingDropdownOpen(false); + } + }; + + if (isHeadingDropdownOpen) { + document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); + } + }, [isHeadingDropdownOpen]); + + // Prevent buttons from taking focus away from the editor + const handleMouseDown = (e: React.MouseEvent) => { + e.preventDefault(); + }; + + const executeCommand = (command: (state: any, dispatch?: any, view?: any) => boolean) => { + if (!editorView) return; + const didChange = command(editorView.state, editorView.dispatch, editorView); + if (didChange) { + forceUpdate(); + } + editorView.focus(); + }; + + const handleHeader = (level?: number) => { + const headingLevel = level ?? currentHeadingLevel; + executeCommand(toggleHeading(headingLevel)); + if (level !== undefined) { + setCurrentHeadingLevel(level); + setIsHeadingDropdownOpen(false); + } + }; + + const toggleHeadingDropdown = () => setIsHeadingDropdownOpen(!isHeadingDropdownOpen); + + const handleLinkButtonClick = () => { + if (!editorView) return; + + const schema = editorView.state.schema; + const { from, to } = editorView.state.selection; + + // If already has link, remove it immediately + if (from !== to && editorView.state.doc.rangeHasMark(from, to, schema.marks.link)) { + executeCommand(toggleLink()); + return; + } + + // Get selected text if any to pre-fill title field + const selectedText = editorView.state.doc.textBetween(from, to, ' '); + setSelectedTextForLink(selectedText); + setIsLinkDialogOpen(true); + }; + + const handleInsertLink = (href: string, title?: string) => { + executeCommand(toggleLink(href, title)); + setIsLinkDialogOpen(false); + }; + + const schema = editorView?.state.schema; + + const isBoldActive = editorView && schema ? isMarkActive(editorView.state, schema.marks.strong) : false; + const isItalicActive = editorView && schema ? isMarkActive(editorView.state, schema.marks.em) : false; + // const isCodeActive = editorView && schema ? isMarkActive(editorView.state, schema.marks.code) : false; // Inline code formatting disabled for now + const isLinkActive = editorView && schema ? isMarkActive(editorView.state, schema.marks.link) : false; + + const isCurrentHeadingActive = editorView && schema + ? isNodeActive(editorView.state, schema.nodes.heading, { level: currentHeadingLevel }) + : false; + + const isBlockquoteActive = editorView && schema ? isNodeActive(editorView.state, schema.nodes.blockquote) : false; + const isBulletListActive = editorView && schema ? isListActive(editorView.state, schema.nodes.bullet_list) : false; + const isOrderedListActive = editorView && schema ? isListActive(editorView.state, schema.nodes.ordered_list) : false; + + const isUndoAvailable = editorView ? canUndo(editorView.state) : false; + const isRedoAvailable = editorView ? canRedo(editorView.state) : false; + + return ( + + + {!hideHelperPaneToggle && helperPaneToggle && ( + <> + + + + + )} + + executeCommand(undoCommand)} + onMouseDown={handleMouseDown} + > + + + + executeCommand(redoCommand)} + onMouseDown={handleMouseDown} + > + + + + + + executeCommand(toggleBold)} + onMouseDown={handleMouseDown} + > + + + + executeCommand(toggleItalic)} + onMouseDown={handleMouseDown} + > + + + + {/* executeCommand(toggleCode)} + onMouseDown={handleMouseDown} + > + + */} + + + + + + + + + handleHeader()} + onMouseDown={handleMouseDown} + > + H{currentHeadingLevel} + + + + + + {[1, 2, 3, 4, 5, 6].map((level) => ( + handleHeader(level)} + onMouseDown={handleMouseDown} + > + Heading {level} + + ))} + + + + executeCommand(toggleBlockquote)} + onMouseDown={handleMouseDown} + > + + + + + + executeCommand(toggleBulletList)} + onMouseDown={handleMouseDown} + > + + + + executeCommand(toggleOrderedList)} + onMouseDown={handleMouseDown} + > + + + + + {onToggleView && ( + + )} + + setIsLinkDialogOpen(false)} + onInsert={handleInsertLink} + initialTitle={selectedTextForLink} + /> + + ); +}); + +RichTemplateMarkdownToolbar.displayName = 'RichTemplateMarkdownToolbar'; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/index.ts b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/index.ts new file mode 100644 index 00000000000..12d5a822011 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/index.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { ExpandedEditor } from "./ExpandedEditor"; +export type { EditorMode, EditorModeProps, EditorModeWithPreviewProps, EditorModeExpressionProps } from "./modes/types"; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/ExpressionMode.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/ExpressionMode.tsx new file mode 100644 index 00000000000..388bf5122b7 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/ExpressionMode.tsx @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from "react"; +import styled from "@emotion/styled"; +import { EditorModeExpressionProps } from "./types"; +import { ChipExpressionEditorComponent } from "../../MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor"; +import { ErrorBanner } from "@wso2/ui-toolkit"; + +const ExpressionContainer = styled.div` + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + box-sizing: border-box; +`; + +/** + * Expression mode editor - uses ChipExpressionBaseComponent in expanded mode + */ +export const ExpressionMode: React.FC = ({ + value, + onChange, + completions = [], + fileName, + targetLineRange, + sanitizedExpression, + extractArgsFromFunction, + getHelperPane, + rawExpression, + error, + formDiagnostics +}) => { + // Convert onChange signature from (value: string) => void to (value: string, cursorPosition: number) => void + const handleChange = (updatedValue: string, updatedCursorPosition: number) => { + onChange(updatedValue, updatedCursorPosition); + }; + + return ( + <> + + + + {error ? + : + formDiagnostics && formDiagnostics.length > 0 && + d.message).join(', ')} /> + } + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/PromptMode.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/PromptMode.tsx new file mode 100644 index 00000000000..0a34527402d --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/PromptMode.tsx @@ -0,0 +1,160 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useRef } from "react"; +import styled from "@emotion/styled"; +import { EditorView as CodeMirrorView } from "@codemirror/view"; +import { EditorView as ProseMirrorView } from "prosemirror-view"; +import { EditorModeExpressionProps } from "./types"; +import { ChipExpressionEditorComponent } from "../../MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor"; +import { RichTextTemplateEditor } from "../../MultiModeExpressionEditor/RichTextTemplateEditor/RichTextTemplateEditor"; +import { RichTemplateMarkdownToolbar } from "../controls/RichTemplateMarkdownToolbar"; +import { RawTemplateMarkdownToolbar } from "../controls/RawTemplateMarkdownToolbar"; +import { ErrorBanner } from "@wso2/ui-toolkit"; +import { RawTemplateEditorConfig, StringTemplateEditorConfig } from "../../MultiModeExpressionEditor/Configurations"; + +const ExpressionContainer = styled.div` + width: 100%; + flex: 1; + display: flex; + flex-direction: column; + box-sizing: border-box; + overflow: hidden; +`; + +const SIMPLE_PROMPT_FIELDS = ["query", "instructions", "role"]; + +export const PromptMode: React.FC = ({ + value, + onChange, + field, + completions = [], + fileName, + targetLineRange, + sanitizedExpression, + extractArgsFromFunction, + getHelperPane, + rawExpression, + error, + formDiagnostics, + inputMode +}) => { + // Detect if this is a simple prompt field (text-only, no advanced features) + const isSimpleMode = SIMPLE_PROMPT_FIELDS.includes(field.key) && !getHelperPane; + + const [isSourceView, setIsSourceView] = useState(false); + const [codeMirrorView, setCodeMirrorView] = useState(null); + const [proseMirrorView, setProseMirrorView] = useState(null); + const [helperPaneToggle, setHelperPaneToggle] = useState<{ + ref: React.RefObject; + isOpen: boolean; + onClick: () => void; + } | null>(null); + const richToolbarRef = useRef(null); + const rawToolbarRef = useRef(null); + + // Convert onChange signature from (value: string) => void to (value: string, cursorPosition: number) => void + const handleChange = (updatedValue: string, updatedCursorPosition: number) => { + onChange(updatedValue, updatedCursorPosition); + }; + + const handleHelperPaneStateChange = (state: { + isOpen: boolean; + ref: React.RefObject; + toggle: () => void; + }) => { + setHelperPaneToggle({ + ref: state.ref, + isOpen: state.isOpen, + onClick: state.toggle + }); + }; + + const handleToggleView = () => { + setIsSourceView(!isSourceView); + }; + + return ( + <> + {isSourceView ? ( + + ) : ( + + )} + {isSourceView ? ( + + + + ) : ( + + + + ) + } + {error ? + : + formDiagnostics && formDiagnostics.length > 0 && + d.message).join(', ')} /> + } + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/TemplateMode.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/TemplateMode.tsx new file mode 100644 index 00000000000..1bbda23f839 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/TemplateMode.tsx @@ -0,0 +1,78 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from "react"; +import styled from "@emotion/styled"; +import { EditorModeExpressionProps } from "./types"; +import { ChipExpressionEditorComponent } from "../../MultiModeExpressionEditor/ChipExpressionEditor/components/ChipExpressionEditor"; +import { ErrorBanner } from "@wso2/ui-toolkit"; +import { RawTemplateEditorConfig } from "../../MultiModeExpressionEditor/Configurations"; + +const ExpressionContainer = styled.div` + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + box-sizing: border-box; +`; + +export const TemplateMode: React.FC = ({ + value, + onChange, + completions = [], + fileName, + targetLineRange, + sanitizedExpression, + extractArgsFromFunction, + getHelperPane, + rawExpression, + error, + formDiagnostics, + inputMode +}) => { + // Convert onChange signature from (value: string) => void to (value: string, cursorPosition: number) => void + const handleChange = (updatedValue: string, updatedCursorPosition: number) => { + onChange(updatedValue, updatedCursorPosition); + }; + + return ( + <> + + + + {error ? + : + formDiagnostics && formDiagnostics.length > 0 && + d.message).join(', ')} /> + } + + ); +}; diff --git a/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/TextMode.tsx b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/TextMode.tsx new file mode 100644 index 00000000000..d7287461914 --- /dev/null +++ b/workspaces/ballerina/ballerina-side-panel/src/components/editors/ExpandedEditor/modes/TextMode.tsx @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from "react"; +import styled from "@emotion/styled"; +import { ThemeColors } from "@wso2/ui-toolkit"; +import { EditorModeProps } from "./types"; + +const TextArea = styled.textarea` + width: 100%; + height: 100%; + padding: 12px !important; + fontSize: 13px; + font-family: var(--vscode-editor-font-family); + background: var(--input-background); + color: ${ThemeColors.ON_SURFACE}; + border: 1px solid ${ThemeColors.OUTLINE_VARIANT}; + border-radius: 4px; + resize: none; + outline: none; + box-sizing: border-box; + + &:focus { + border-color: ${ThemeColors.OUTLINE}; + box-shadow: 0 0 0 1px ${ThemeColors.OUTLINE}; + } +`; + +/** + * Text mode editor - simple textarea without any formatting tools + */ +export const TextMode: React.FC = ({ value, onChange, field }) => { + return ( +