diff --git a/.github/workflows/merging-pr.yml b/.github/workflows/merging-pr.yml index 47acd8dc05..ec6bf7ce14 100644 --- a/.github/workflows/merging-pr.yml +++ b/.github/workflows/merging-pr.yml @@ -8,7 +8,8 @@ jobs: merge-submodules: if: | github.event.pull_request.merged == true && - (github.event.pull_request.base.ref == 'main' || github.event.pull_request.base.ref == 'lts-3.16') + (github.event.pull_request.base.ref == 'main' || github.event.pull_request.base.ref == 'lts-3.16') && + !startsWith(github.event.pull_request.head.ref, 'release/') runs-on: ubuntu-latest steps: @@ -46,7 +47,8 @@ jobs: needs: merge-submodules if: | github.event.pull_request.merged == true && - (github.event.pull_request.base.ref == 'main' || github.event.pull_request.base.ref == 'lts-3.16') + (github.event.pull_request.base.ref == 'main' || github.event.pull_request.base.ref == 'lts-3.16') && + !startsWith(github.event.pull_request.head.ref, 'release/') runs-on: ubuntu-latest steps: diff --git a/.github/workflows/release-automation.yml b/.github/workflows/release-automation.yml new file mode 100644 index 0000000000..0006c5d5d3 --- /dev/null +++ b/.github/workflows/release-automation.yml @@ -0,0 +1,395 @@ +name: Release Automation + +on: + pull_request: + types: [closed] + branches: [main] + # Uncomment the line below to also trigger on lts-3.16 branch + # branches: [main, lts-3.16] + +permissions: + contents: write + pull-requests: write + issues: read + +jobs: + release-automation: + if: | + github.event.pull_request.merged == true && + startsWith(github.event.pull_request.head.ref, 'release/') && + contains(github.event.pull_request.title, '|') && + contains(github.event.pull_request.title, '[') && + contains(github.event.pull_request.title, ']') + runs-on: ubuntu-latest + + outputs: + version: ${{ steps.extract-version.outputs.version }} + tag: ${{ steps.create-tag.outputs.tag }} + release_notes: ${{ steps.generate-notes.outputs.release_notes }} + + steps: + - name: Extract Branch Name and Base Branch + run: | + echo "BRANCH_NAME=${{ github.event.pull_request.head.ref }}" >> $GITHUB_ENV + echo "BASE_BRANCH=${{ github.event.pull_request.base.ref }}" >> $GITHUB_ENV + + - name: Merge PR in ee-server (if exists) + run: | + PR=$(gh pr list -R ToolJet/ee-server --head "$BRANCH_NAME" --base "$BASE_BRANCH" --state open --json number -q '.[0].number') + if [ -n "$PR" ]; then + echo "Found ee-server PR: #$PR targeting $BASE_BRANCH" + gh pr merge -R ToolJet/ee-server "$PR" --merge --admin + else + echo "No open ee-server PR for branch $BRANCH_NAME targeting $BASE_BRANCH" + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Merge PR in ee-frontend (if exists) + run: | + PR=$(gh pr list -R ToolJet/ee-frontend --head "$BRANCH_NAME" --base "$BASE_BRANCH" --state open --json number -q '.[0].number') + if [ -n "$PR" ]; then + echo "Found ee-frontend PR: #$PR targeting $BASE_BRANCH" + gh pr merge -R ToolJet/ee-frontend "$PR" --merge --admin + else + echo "No open ee-frontend PR for branch $BRANCH_NAME targeting $BASE_BRANCH" + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Wait for submodule merges to complete + run: | + echo "Waiting for submodule merges to complete..." + sleep 30 + + - name: Extract Version from PR Title + id: extract-version + run: | + TITLE="${{ github.event.pull_request.title }}" + echo "PR Title: $TITLE" + + # Extract the complete tag from text after | character + if [[ "$TITLE" =~ \|.*\[([^]]+)\] ]]; then + TAG="${BASH_REMATCH[1]}" + echo "Extracted tag: $TAG" + echo "version=$TAG" >> $GITHUB_OUTPUT + else + echo "❌ No valid tag format found in PR title" + echo "Expected format: 'some text | [tag]'" + echo "Examples: 'platform release | [v3.16-beta.1]' or 'hotfix | [v3.16.18-lts]'" + exit 1 + fi + + - name: Checkout Repository + if: steps.extract-version.outputs.version != '' + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 + submodules: recursive + + - name: Configure Git + run: | + git config user.name "GitHub Actions Bot" + git config user.email "adish.madhu@gmail.com" + + - name: Create Version Bump Branch + id: create-branch + run: | + TAG="${{ steps.extract-version.outputs.version }}" + # Create branch name using tag without special characters + CLEAN_TAG=$(echo "$TAG" | sed 's/[^a-zA-Z0-9.-]//g') + BRANCH_NAME="version-bump-$CLEAN_TAG-$(date +%s)" + echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT + git checkout -b "$BRANCH_NAME" + + - name: Update Version Files + run: | + TAG="${{ steps.extract-version.outputs.version }}" + # Remove 'v' prefix for .version files if present + VERSION="${TAG#v}" + + # Update all three .version files + echo "$VERSION" > .version + echo "$VERSION" > server/.version + echo "$VERSION" > frontend/.version + + echo "Updated all .version files to: $VERSION (from tag: $TAG)" + echo "Files updated:" + echo " - ./.version" + echo " - ./server/.version" + echo " - ./frontend/.version" + + + - name: Update Submodules to Latest + run: | + echo "Updating submodules to latest commits..." + + # Determine which branch to use for submodules + BASE_BRANCH="${{ github.event.pull_request.base.ref }}" + + # For main branch, use main in submodules + # For lts-3.16 branch, use lts-3.16 in submodules (when enabled) + if [ "$BASE_BRANCH" = "lts-3.16" ]; then + SUBMODULE_BRANCH="lts-3.16" + else + SUBMODULE_BRANCH="main" + fi + + echo "Base branch: $BASE_BRANCH" + echo "Using submodule branch: $SUBMODULE_BRANCH" + + # Get latest commit SHAs from submodule repositories + echo "Fetching latest commit from ToolJet/ee-frontend:$SUBMODULE_BRANCH" + FRONTEND_SHA=$(gh api repos/ToolJet/ee-frontend/branches/$SUBMODULE_BRANCH --jq '.commit.sha' || gh api repos/ToolJet/ee-frontend/branches/main --jq '.commit.sha') + echo "Frontend SHA: $FRONTEND_SHA" + + echo "Fetching latest commit from ToolJet/ee-server:$SUBMODULE_BRANCH" + SERVER_SHA=$(gh api repos/ToolJet/ee-server/branches/$SUBMODULE_BRANCH --jq '.commit.sha' || gh api repos/ToolJet/ee-server/branches/main --jq '.commit.sha') + echo "Server SHA: $SERVER_SHA" + + # Update submodule pointers to specific commit SHAs + cd frontend/ee + git fetch origin + git checkout "$FRONTEND_SHA" + cd ../.. + + cd server/ee + git fetch origin + git checkout "$SERVER_SHA" + cd ../.. + + # Check if there are any changes + if ! git diff --quiet .version server/.version frontend/.version frontend/ee server/ee; then + echo "Changes detected in version files and/or submodules" + else + echo "No changes detected" + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Commit Changes + run: | + TAG="${{ steps.extract-version.outputs.version }}" + VERSION="${TAG#v}" # Remove 'v' prefix for display + git add .version server/.version frontend/.version frontend/ee server/ee + + # Only commit if there are changes + if ! git diff --cached --quiet; then + git commit -m "Version bump to $TAG + + - Update .version files to $VERSION + - Update submodules to latest commit SHA + + else + echo "No changes to commit" + fi + + - name: Create Version Bump PR + id: create-pr + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ steps.create-branch.outputs.branch_name }} + title: "Version bump to ${{ steps.extract-version.outputs.version }}" + body: | + ## Version Bump to ${{ steps.extract-version.outputs.version }} + + This PR updates the version files and submodules for the release version ${{ steps.extract-version.outputs.version }}. + + ### Changes: + - ✅ Updated `.version` files (root, server, frontend) to `${{ steps.extract-version.outputs.version }}` + - ✅ Updated submodules to latest commits + + ### Auto-generated + This PR was automatically created by the release automation workflow. + + base: ${{ github.event.pull_request.base.ref }} + # When lts-3.16 is enabled, this will use the correct base branch + + - name: Auto-merge Version Bump PR + if: steps.create-pr.outputs.pull-request-number != '' + run: | + PR_NUMBER="${{ steps.create-pr.outputs.pull-request-number }}" + echo "Auto-merging version bump PR #$PR_NUMBER" + + # Wait a moment for PR to be fully created + sleep 10 + + # Merge the PR + gh pr merge "$PR_NUMBER" --squash --admin + + # Wait for merge to complete + sleep 10 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Checkout Updated Base Branch + run: | + BASE_BRANCH="${{ github.event.pull_request.base.ref }}" + git fetch origin "$BASE_BRANCH" + git checkout "$BASE_BRANCH" + git pull origin "$BASE_BRANCH" + + - name: Create Git Tag + id: create-tag + run: | + TAG="${{ steps.extract-version.outputs.version }}" + BASE_BRANCH="${{ github.event.pull_request.base.ref }}" + + # Determine correct branch for tag creation based on tag type + if [[ "$TAG" == *"lts"* ]]; then + TARGET_BRANCH="lts-3.16" + echo "LTS tag detected - creating tag from lts-3.16 branch" + elif [[ "$TAG" == *"beta"* ]]; then + TARGET_BRANCH="main" + echo "Beta tag detected - creating tag from main branch" + else + # Default to the base branch of the PR + TARGET_BRANCH="$BASE_BRANCH" + echo "Using PR base branch: $TARGET_BRANCH" + fi + + echo "Creating tag: $TAG from branch: $TARGET_BRANCH in base repo and submodules" + + # Ensure we're on the correct branch and it's up to date + git fetch origin "$TARGET_BRANCH" + git checkout "$TARGET_BRANCH" + git pull origin "$TARGET_BRANCH" + + # Create and push the tag in the base repository + echo "Creating tag in base repository..." + git tag -a "$TAG" -m "Release $TAG" + git push origin "$TAG" + + # Create tags in submodules + echo "Creating tag in ee-frontend submodule..." + cd frontend/ee + git fetch origin + if [[ "$TAG" == *"lts"* ]]; then + git checkout lts-3.16 2>/dev/null || git checkout main + else + git checkout main + fi + git pull origin HEAD + git tag -a "$TAG" -m "Release $TAG" + git push origin "$TAG" + cd ../.. + + echo "Creating tag in ee-server submodule..." + cd server/ee + git fetch origin + if [[ "$TAG" == *"lts"* ]]; then + git checkout lts-3.16 2>/dev/null || git checkout main + else + git checkout main + fi + git pull origin HEAD + git tag -a "$TAG" -m "Release $TAG" + git push origin "$TAG" + cd ../.. + + echo "Tags created successfully in all repositories" + echo "tag=$TAG" >> $GITHUB_OUTPUT + + - name: Generate Release Notes + id: generate-notes + run: | + TAG="${{ steps.extract-version.outputs.version }}" + + # Get the previous tag + PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "") + + echo "Current tag: $TAG" + echo "Previous tag: $PREVIOUS_TAG" + + # Generate release notes using GitHub's auto-generation + BASE_BRANCH="${{ github.event.pull_request.base.ref }}" + if [ -n "$PREVIOUS_TAG" ]; then + NOTES=$(gh api --method POST /repos/ToolJet/ToolJet/releases/generate-notes \ + -f tag_name="$TAG" \ + -f previous_tag_name="$PREVIOUS_TAG" \ + -f target_commitish="$BASE_BRANCH" \ + --jq '.body') + else + NOTES="Initial release version $TAG" + fi + + # Set multiline output + { + echo 'release_notes<> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Send Slack Notification + if: steps.generate-notes.outputs.release_notes != '' + run: | + TAG="${{ steps.extract-version.outputs.version }}" + REPO_URL="https://github.com/ToolJet/ToolJet/releases/tag/$TAG" + + # Create simplified Slack message + SLACK_MESSAGE="🚀 New Release: $TAG + + Tag: $TAG + + A new release has been created and is ready for testing. + + Release: $REPO_URL + + Please test thoroughly before promotion." + + # Send to Slack (using webhook URL from secrets) + if [ -n "${{ secrets.SLACK_WEBHOOK_URL }}" ]; then + curl -X POST -H 'Content-type: application/json' \ + --data "{\"text\":\"$SLACK_MESSAGE\"}" \ + "${{ secrets.SLACK_WEBHOOK_URL }}" + echo "✅ Slack notification sent successfully" + else + echo "⚠️ SLACK_WEBHOOK_URL secret not configured - skipping notification" + fi + + - name: Create GitHub Release + if: steps.create-tag.outputs.tag != '' + run: | + TAG="${{ steps.create-tag.outputs.tag }}" + + # Determine if this is a pre-release based on tag content + if [[ "$TAG" == *"beta"* ]]; then + PRERELEASE_FLAG="--prerelease" + NOTES_PREFIX="Pre-release version $TAG for testing purposes." + elif [[ "$TAG" == *"lts"* ]]; then + PRERELEASE_FLAG="" + NOTES_PREFIX="LTS release version $TAG." + else + PRERELEASE_FLAG="--prerelease" + NOTES_PREFIX="Release version $TAG." + fi + + gh release create "$TAG" \ + --title "Release $TAG" \ + --generate-notes \ + $PRERELEASE_FLAG \ + --notes "$NOTES_PREFIX Please test thoroughly before promotion." + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Summary + run: | + echo "## 🎉 Release Automation Complete!" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### ✅ Completed Tasks:" >> $GITHUB_STEP_SUMMARY + echo "- [x] Extracted version: \`${{ steps.extract-version.outputs.version }}\`" >> $GITHUB_STEP_SUMMARY + echo "- [x] Updated .version file" >> $GITHUB_STEP_SUMMARY + echo "- [x] Updated submodules to latest commits" >> $GITHUB_STEP_SUMMARY + echo "- [x] Created and merged version bump PR" >> $GITHUB_STEP_SUMMARY + echo "- [x] Created git tag: \`${{ steps.create-tag.outputs.tag }}\`" >> $GITHUB_STEP_SUMMARY + echo "- [x] Generated release notes" >> $GITHUB_STEP_SUMMARY + echo "- [x] Sent Slack notification" >> $GITHUB_STEP_SUMMARY + echo "- [x] Created GitHub release" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### 🔗 Links:" >> $GITHUB_STEP_SUMMARY + echo "- [Tag](${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ steps.create-tag.outputs.tag }})" >> $GITHUB_STEP_SUMMARY + echo "- [Release](${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ steps.create-tag.outputs.tag }})" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.version b/.version index d7e293cb37..b8b5ad86ee 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -3.20.119-lts +3.21.5-beta diff --git a/cypress-tests/cypress-lts.Dockerfile b/cypress-tests/cypress-lts.Dockerfile index d4f3800466..5ae5eb8a65 100644 --- a/cypress-tests/cypress-lts.Dockerfile +++ b/cypress-tests/cypress-lts.Dockerfile @@ -24,14 +24,14 @@ RUN git checkout ${BRANCH_NAME} RUN git submodule update --init --recursive -# Checkout the same branch in submodules if it exists, otherwise fallback to lts-3.16 +# Checkout the same branch in submodules if it exists, otherwise fallback to main RUN git submodule foreach " \ if git show-ref --verify --quiet refs/heads/${BRANCH_NAME} || \ git ls-remote --exit-code --heads origin ${BRANCH_NAME}; then \ git checkout ${BRANCH_NAME}; \ else \ - echo 'Branch ${BRANCH_NAME} not found in submodule \$name, falling back to lts-3.16'; \ - git checkout lts-3.16; \ + echo 'Branch ${BRANCH_NAME} not found in submodule \$name, falling back to main'; \ + git checkout main; \ fi" # Scripts for building diff --git a/cypress-tests/cypress/constants/texts/common.js b/cypress-tests/cypress/constants/texts/common.js index f39142b713..ab5c35b533 100644 --- a/cypress-tests/cypress/constants/texts/common.js +++ b/cypress-tests/cypress/constants/texts/common.js @@ -26,12 +26,12 @@ export const commonText = { cancelButton: "Cancel", folderCreatedToast: "Folder created.", createFolder: "Create folder", - AddedToFolderToast: "Added to folder.", + AddedToFolderToast: "Application added to folder successfully!", appCreatedToast: "App created successfully!", appRenamedToast: "App name has been updated!", appRemovedFromFolderMessage: "The app will be removed from this folder, do you want to continue?", - appRemovedFromFolderTaost: "Removed from folder.", + appRemovedFromFolderTaost: "Application removed from folder successfully!", modalYesButton: "Yes", emptyFolderText: "This folder is empty", allApplicationsLink: "All applications", diff --git a/cypress-tests/cypress/constants/texts/workflows.js b/cypress-tests/cypress/constants/texts/workflows.js index 17f8dd2b88..da1c993456 100644 --- a/cypress-tests/cypress/constants/texts/workflows.js +++ b/cypress-tests/cypress/constants/texts/workflows.js @@ -34,7 +34,7 @@ WHERE table_schema = 'public' AND table_type = 'BASE TABLE';`, postgresResponseNodeQuery: "return postgresql1.data", postgresExpectedValue: "server_side_pagination", - + restApiUrl: "http://9.234.17.31:8000/delay/10s", restApiResponseNodeQuery: "return restapi1.data", restApiExpectedValue: "", diff --git a/cypress-tests/cypress/e2e/happyPath/workflows/WorkflowWithDataSource.cy.js b/cypress-tests/cypress/e2e/happyPath/workflows/WorkflowWithDataSource.cy.js new file mode 100644 index 0000000000..2cb3649dd9 --- /dev/null +++ b/cypress-tests/cypress/e2e/happyPath/workflows/WorkflowWithDataSource.cy.js @@ -0,0 +1,284 @@ +import { fake } from "Fixtures/fake"; +import { commonSelectors } from "Selectors/common"; +import { postgreSqlSelector } from "Selectors/postgreSql"; +import { postgreSqlText } from "Texts/postgreSql"; +import { deleteWorkflowAndDS } from "Support/utils/dataSource"; +import { dataSourceSelector } from "Selectors/dataSource"; +import { harperDbText } from "Texts/harperDb"; +import { workflowsText } from "Texts/workflows"; +import { workflowSelector } from "Selectors/workflows"; +import { + fillDataSourceTextField, + selectAndAddDataSource, +} from "Support/utils/postgreSql"; + +import { + dataSourceNode, + verifyTextInResponseOutput, + connectNodeToResponse, + createWorkflowApp, + fillStartNodeInput, + deleteWorkflow, + backToWorkFlows, +} from "Support/utils/workFlows"; + +const data = {}; + +describe("Workflows with Datasource", () => { + beforeEach(() => { + cy.apiLogin(); + cy.visit("/"); + data.wfName = fake.lastName.toLowerCase().replaceAll("[^A-Za-z]", ""); + data.dataSourceName = fake.lastName + .toLowerCase() + .replaceAll("[^A-Za-z]", ""); + }); + + it("Creating workflows with runjs and validating execution", () => { + cy.createWorkflowApp(data.wfName); + cy.fillStartNodeInput(); + cy.dataSourceNode("Run JavaScript code"); + + cy.get(workflowSelector.nodeName(workflowsText.runjs)).click({ + force: true, + }); + + cy.get(workflowSelector.inputField(workflowsText.runjsInputField)) + .click({ force: true }) + .realType("return startTrigger.params", { delay: 50 }); + + cy.get("body").click(50, 50); + cy.wait(500); + + cy.connectNodeToResponse(workflowsText.runjs, "return runjs1.data"); + cy.verifyTextInResponseOutput("your value"); + cy.deleteWorkflow(data.wfName); + }); + + it("Creating workflows with postgres and validating execution", () => { + cy.get(commonSelectors.globalDataSourceIcon).click(); + cy.apiCreateGDS( + `${Cypress.env("server_host")}/api/data-sources`, + `cypress-${data.dataSourceName}-manual-pgsql`, + "postgresql", + [ + { key: "connection_type", value: "manual", encrypted: false }, + { key: "host", value: `${Cypress.env("pg_host")}`, encrypted: false }, + { key: "port", value: 5432, encrypted: false }, + { key: "ssl_enabled", value: false, encrypted: false }, + { key: "database", value: "postgres", encrypted: false }, + { key: "ssl_certificate", value: "none", encrypted: false }, + { + key: "username", + value: `${Cypress.env("pg_user")}`, + encrypted: false, + }, + { + key: "password", + value: `${Cypress.env("pg_password")}`, + encrypted: false, + }, + { key: "ca_cert", value: null, encrypted: true }, + { key: "client_key", value: null, encrypted: true }, + { key: "client_cert", value: null, encrypted: true }, + { key: "root_cert", value: null, encrypted: true }, + { key: "connection_string", value: null, encrypted: true }, + ] + ); + cy.get( + dataSourceSelector.dataSourceNameButton( + `cypress-${data.dataSourceName}-manual-pgsql` + ) + ) + .should("be.visible") + .click(); + cy.get(postgreSqlSelector.buttonTestConnection).click(); + cy.get(postgreSqlSelector.textConnectionVerified, { + timeout: 10000, + }).should("have.text", postgreSqlText.labelConnectionVerified); + cy.reload(); + + cy.createWorkflowApp(data.wfName); + cy.fillStartNodeInput(); + cy.dataSourceNode(`cypress-${data.dataSourceName}-manual-pgsql`); + cy.get(workflowSelector.nodeName(workflowsText.postgresql)).click({ + force: true, + }); + + cy.get(workflowSelector.inputField(workflowsText.pgsqlQueryInputField)) + .click({ force: true }) + .clearAndTypeOnCodeMirror("") + .realType( + `SELECT table_name +FROM information_schema.tables +WHERE table_schema = 'public' +AND table_type = 'BASE TABLE';`, + { delay: 50 } + ); + + cy.get("body").click(50, 50); + cy.wait(500); + + cy.connectNodeToResponse( + workflowsText.postgresql, + "return postgresql1.data" + ); + cy.verifyTextInResponseOutput("employees"); + + deleteWorkflowAndDS( + data.wfName, + `cypress-${data.dataSourceName}-manual-pgsql` + ); + }); + + it("Creating workflows with rest-api and validating execution", () => { + cy.get(commonSelectors.globalDataSourceIcon).click(); + cy.apiCreateGDS( + `${Cypress.env("server_host")}/api/data-sources`, + `cypress-${data.dataSourceName}-restapi`, + "restapi", + [ + { key: "url", value: "https://httpbin.org" }, + { key: "auth_type", value: "basic" }, + { key: "grant_type", value: "authorization_code" }, + { key: "add_token_to", value: "header" }, + { key: "header_prefix", value: "Bearer " }, + { key: "access_token_url", value: "" }, + { key: "client_id", value: "" }, + { + key: "client_secret", + encrypted: true, + credential_id: "b044a293-82b4-4381-84fd-d173c86a6a0c", + }, + { key: "audience", value: "" }, + { key: "scopes", value: "read, write" }, + { key: "username", value: "user", encrypted: false }, + { key: "password", value: "pass", encrypted: true }, + { + key: "bearer_token", + encrypted: true, + credential_id: "21caf3cb-dbde-43c7-9f42-77feffb63062", + }, + { key: "auth_url", value: "" }, + { key: "client_auth", value: "header" }, + { key: "headers", value: [["", ""]] }, + { key: "custom_query_params", value: [["", ""]], encrypted: false }, + { key: "custom_auth_params", value: [["", ""]] }, + { + key: "access_token_custom_headers", + value: [["", ""]], + encrypted: false, + }, + { key: "multiple_auth_enabled", value: false, encrypted: false }, + { key: "ssl_certificate", value: "none", encrypted: false }, + { key: "retry_network_errors", value: true, encrypted: false }, + { key: "url_parameters", value: [["", ""]], encrypted: false }, + { key: "tokenData", encrypted: false }, + ] + ); + + cy.createWorkflowApp(data.wfName); + cy.fillStartNodeInput(); + cy.dataSourceNode(`cypress-${data.dataSourceName}-restapi`); + cy.get(workflowSelector.nodeName(workflowsText.restapi)).click({ + force: true, + }); + + cy.get(workflowSelector.inputField(workflowsText.restapiUrlInputField)) + .eq(0) + .click({ force: true }) + .clearAndTypeOnCodeMirror("") + .realType(`http://9.234.17.31:8000/delay/10s`, { delay: 50 }); + + cy.get("body").click(50, 50); + cy.wait(500); + + cy.connectNodeToResponse(workflowsText.restapi, "return restapi1.data"); + cy.verifyTextInResponseOutput(""); + deleteWorkflowAndDS(data.wfName, `cypress-${data.dataSourceName}-restapi`); + }); + + it("Creating workflows with harperdb and validating execution", () => { + const Host = Cypress.env("harperdb_host"); + const Port = Cypress.env("harperdb_port"); + const Username = Cypress.env("harperdb_username"); + const Password = Cypress.env("harperdb_password"); + + cy.get(commonSelectors.globalDataSourceIcon).click(); + cy.installMarketplacePlugin("HarperDB"); + + selectAndAddDataSource( + "databases", + harperDbText.harperDb, + data.dataSourceName + ); + + fillDataSourceTextField( + harperDbText.hostLabel, + harperDbText.hostInputPlaceholder, + Host + ); + + fillDataSourceTextField( + harperDbText.portLabel, + harperDbText.portPlaceholder, + Port + ); + + fillDataSourceTextField( + harperDbText.userNameLabel, + harperDbText.userNamePlaceholder, + Username + ); + + fillDataSourceTextField( + harperDbText.passwordlabel, + harperDbText.passwordPlaceholder, + Password + ); + + cy.get(postgreSqlSelector.buttonTestConnection).click(); + cy.get(postgreSqlSelector.textConnectionVerified, { + timeout: 10000, + }).should("have.text", postgreSqlText.labelConnectionVerified); + + cy.get(postgreSqlSelector.buttonSave) + .verifyVisibleElement("have.text", postgreSqlText.buttonTextSave) + .click(); + + cy.verifyToastMessage( + commonSelectors.toastMessage, + postgreSqlText.toastDSSaved + ); + + cy.createWorkflowApp(data.wfName); + cy.fillStartNodeInput(); + cy.dataSourceNode(`cypress-${data.dataSourceName}-harperdb`); + cy.get(workflowSelector.nodeName(workflowsText.harperdb)).click({ + force: true, + }); + + cy.get('[data-cy$="-select-dropdown"]').click(); + + cy.get(".react-select__menu") + .should("be.visible") + .within(() => { + cy.contains(/sql/i).click(); + }); + + cy.get(workflowSelector.inputField(workflowsText.harperdbInputField)) + .click({ force: true }) + + .click() + .clearAndTypeOnCodeMirror("") + .realType(`SELECT * FROM tooljet_harper.tooljet_table;`, { delay: 50 }); + + cy.get("body").click(50, 50); + cy.wait(500); + + cy.connectNodeToResponse(workflowsText.harperdb, "return harperdb1.data"); + cy.verifyTextInResponseOutput("Test Record 3"); + + deleteWorkflowAndDS(data.wfName, `cypress-${data.dataSourceName}-harperdb`); + }); +}); diff --git a/cypress-tests/cypress/support/utils/dataSource.js b/cypress-tests/cypress/support/utils/dataSource.js index 521cc1ab7e..5d10fa4a49 100644 --- a/cypress-tests/cypress/support/utils/dataSource.js +++ b/cypress-tests/cypress/support/utils/dataSource.js @@ -77,6 +77,11 @@ export const deleteAppandDatasourceAfterExecution = ( deleteDatasource(datasourceName); }; +export const deleteWorkflowAndDS = (appName, datasourceName) => { + cy.deleteWorkflow(appName); + deleteDatasource(datasourceName); +}; + export const closeDSModal = () => { cy.get("body").then(($body) => { cy.wait(500); diff --git a/cypress-tests/cypress/support/utils/workFlows.js b/cypress-tests/cypress/support/utils/workFlows.js index 711a19da46..897bc5b9c0 100644 --- a/cypress-tests/cypress/support/utils/workFlows.js +++ b/cypress-tests/cypress/support/utils/workFlows.js @@ -137,4 +137,4 @@ export const verifyTextInResponseOutputLimited = (expectedText, limit = 5) => { `Expected some value to include "${expectedText}", but got:\n\n${texts.join("\n")}` ).to.be.true; }); -}; \ No newline at end of file +}; diff --git a/docker/pre-release/ee/ee-preview.Dockerfile b/docker/pre-release/ee/ee-preview.Dockerfile index c2533f2405..cc5d8f1024 100644 --- a/docker/pre-release/ee/ee-preview.Dockerfile +++ b/docker/pre-release/ee/ee-preview.Dockerfile @@ -2,23 +2,71 @@ FROM node:22.15.1 AS builder # Fix for JS heap limit allocation issue ENV NODE_OPTIONS="--max-old-space-size=4096" -RUN mkdir -p /app +# Build nsjail for Python sandboxing +RUN apt-get update && apt-get install -y --no-install-recommends \ + autoconf \ + bison \ + flex \ + gcc \ + g++ \ + libprotobuf-dev \ + libnl-route-3-dev \ + libtool \ + make \ + pkg-config \ + protobuf-compiler \ + && rm -rf /var/lib/apt/lists/* +WORKDIR /build-nsjail +RUN git clone --depth 1 --branch 3.4 https://github.com/google/nsjail.git && \ + cd nsjail && \ + make && \ + strip nsjail + +# Build Python runtime with pre-installed packages +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3 \ + python3-venv \ + python3-pip \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +RUN python3 -m venv /opt/python-runtime + +RUN /opt/python-runtime/bin/pip install --no-cache-dir --upgrade pip setuptools wheel && \ + /opt/python-runtime/bin/pip install --no-cache-dir \ + numpy==1.26.4 \ + pandas==2.2.1 \ + requests==2.31.0 \ + httpx==0.27.0 \ + python-dateutil==2.9.0 \ + pytz==2024.1 \ + pydantic==2.6.4 \ + typing-extensions==4.10.0 + +RUN mkdir -p /app WORKDIR /app -# Set GitHub token and branch as build arguments +# Set GitHub token, branch and repository URL as build arguments ARG CUSTOM_GITHUB_TOKEN ARG BRANCH_NAME +ARG REPO_URL=https://github.com/ToolJet/ToolJet.git # Clone and checkout the frontend repository RUN git config --global url."https://x-access-token:${CUSTOM_GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/" RUN git config --global http.version HTTP/1.1 RUN git config --global http.postBuffer 524288000 -RUN git clone https://github.com/ToolJet/ToolJet.git . +RUN git clone ${REPO_URL} . # The branch name needs to be changed the branch with modularisation in CE repo -RUN git checkout ${BRANCH_NAME} +RUN if git show-ref --verify --quiet refs/heads/${BRANCH_NAME} || \ + git ls-remote --exit-code --heads origin ${BRANCH_NAME}; then \ + git checkout ${BRANCH_NAME}; \ + else \ + echo "Branch ${BRANCH_NAME} not found, falling back to main"; \ + git checkout main; \ + fi # Handle submodules - try normal submodule update first, if it fails clone directly from base repo RUN if git submodule update --init --recursive; then \ @@ -107,7 +155,10 @@ COPY --from=postgrest/postgrest:v12.2.0 /bin/postgrest /bin ENV NODE_ENV=production ENV TOOLJET_EDITION=ee ENV NODE_OPTIONS="--max-old-space-size=4096" -RUN apt-get update && apt-get install -y freetds-dev libaio1 wget supervisor +# Install Redis 7.x from official Redis repository for BullMQ compatibility +RUN curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb bullseye main" | tee /etc/apt/sources.list.d/redis.list \ + && apt-get update && apt-get install -y freetds-dev libaio1 wget supervisor redis-server libprotobuf23 libnl-route-3-200 python3 python3-pip # Install Instantclient Basic Light Oracle and Dependencies WORKDIR /opt/oracle @@ -121,6 +172,15 @@ RUN wget https://tooljet-plugins-production.s3.us-east-2.amazonaws.com/marketpla # Set the Instant Client library paths ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_11_2:/opt/oracle/instantclient_21_10:${LD_LIBRARY_PATH}" +# Copy nsjail and Python runtime from builder +COPY --from=builder /build-nsjail/nsjail/nsjail /usr/local/bin/nsjail +RUN chmod 755 /usr/local/bin/nsjail + +COPY --from=builder /opt/python-runtime /opt/python-runtime + +# Create nsjail config directory and Python execution temp directory +RUN mkdir -p /etc/nsjail /tmp/python-exec && chmod 1777 /tmp/python-exec + WORKDIR / # copy npm scripts @@ -141,6 +201,8 @@ COPY --from=builder /app/server/node_modules ./app/server/node_modules COPY --from=builder /app/server/templates ./app/server/templates COPY --from=builder /app/server/scripts ./app/server/scripts COPY --from=builder /app/server/dist ./app/server/dist +# Copy nsjail configuration for Python sandboxing +COPY --from=builder /app/server/ee/workflows/nsjail/python-execution.cfg /etc/nsjail/python-execution.cfg WORKDIR /app @@ -166,7 +228,18 @@ RUN rm -rf /var/lib/postgresql/13/main && \ # Initialize PostgreSQL RUN su - postgres -c "/usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/13/main" -# Configure Supervisor to manage PostgREST, ToolJet, and Redis +# Configure Redis for BullMQ +RUN mkdir -p /etc/redis /var/lib/redis /var/log/redis && \ + chown -R redis:redis /var/lib/redis /var/log/redis && \ + chmod 755 /var/lib/redis /var/log/redis + +# Copy Redis configuration +COPY ./docker/LTS/ee/redis.conf /etc/redis/redis.conf +RUN chown redis:redis /etc/redis/redis.conf && \ + chmod 644 /etc/redis/redis.conf + +# Configure Supervisor to manage PostgREST and ToolJet +# Note: PostgreSQL and Redis are started directly in preview.sh RUN echo "[supervisord] \n" \ "nodaemon=true \n" \ "user=root \n" \ @@ -175,6 +248,10 @@ RUN echo "[supervisord] \n" \ "command=/bin/postgrest \n" \ "autostart=true \n" \ "autorestart=true \n" \ + "stderr_logfile=/dev/stdout \n" \ + "stderr_logfile_maxbytes=0 \n" \ + "stdout_logfile=/dev/stdout \n" \ + "stdout_logfile_maxbytes=0 \n" \ "\n" \ "[program:tooljet] \n" \ "user=root \n" \ @@ -205,6 +282,10 @@ ENV TOOLJET_HOST=http://localhost \ PGRST_DB_URI=postgres://postgres:postgres@localhost/tooljet_db \ PGRST_JWT_SECRET=r9iMKoe5CRMgvJBBtp4HrqN7QiPpUToj \ PGRST_DB_PRE_CONFIG=postgrest.pre_config \ + REDIS_HOST=localhost \ + REDIS_PORT=6379 \ + REDIS_DB=0 \ + REDIS_TLS_ENABLED=false \ ORM_LOGGING=true \ DEPLOYMENT_PLATFORM=docker:local \ HOME=/home/appuser \ diff --git a/docker/pre-release/ee/ee-production.Dockerfile b/docker/pre-release/ee/ee-production.Dockerfile index fb39eaa921..586a3d19a9 100644 --- a/docker/pre-release/ee/ee-production.Dockerfile +++ b/docker/pre-release/ee/ee-production.Dockerfile @@ -5,6 +5,50 @@ ENV NODE_OPTIONS="--max-old-space-size=4096" RUN npm i -g npm@10.9.2 && npm cache clean --force +# Build nsjail for Python sandboxing +RUN apt-get update && apt-get install -y --no-install-recommends \ + autoconf \ + bison \ + flex \ + gcc \ + g++ \ + libprotobuf-dev \ + libnl-route-3-dev \ + libtool \ + make \ + pkg-config \ + protobuf-compiler \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build-nsjail +RUN git clone --depth 1 --branch 3.4 https://github.com/google/nsjail.git && \ + cd nsjail && \ + make && \ + strip nsjail + +# Build Python runtime with pre-installed packages +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3.11 \ + python3.11-venv \ + python3-pip \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +# Create isolated Python environment +RUN python3.11 -m venv /opt/python-runtime + +# Upgrade pip and install common packages +RUN /opt/python-runtime/bin/pip install --no-cache-dir --upgrade pip setuptools wheel && \ + /opt/python-runtime/bin/pip install --no-cache-dir \ + numpy==1.26.4 \ + pandas==2.2.1 \ + requests==2.31.0 \ + httpx==0.27.0 \ + python-dateutil==2.9.0 \ + pytz==2024.1 \ + pydantic==2.6.4 \ + typing-extensions==4.10.0 + RUN mkdir -p /app WORKDIR /app @@ -39,9 +83,10 @@ COPY ./package.json ./package.json # Build plugins COPY ./plugins/package.json ./plugins/package-lock.json ./plugins/ -RUN npm --prefix plugins ci --omit=dev +RUN npm --prefix plugins install COPY ./plugins/ ./plugins/ -RUN NODE_ENV=production npm --prefix plugins run build && npm --prefix plugins prune --omit=dev +RUN NODE_ENV=production npm --prefix plugins run build +RUN npm --prefix plugins prune --production ENV TOOLJET_EDITION=ee @@ -78,19 +123,25 @@ FROM debian:12-slim RUN apt-get update && \ apt-get install -y --no-install-recommends \ - curl \ - wget \ - gnupg \ - unzip \ - ca-certificates \ - xz-utils \ - tar \ - postgresql-client \ - redis \ - libaio1 \ - git \ - openssh-client \ - freetds-dev \ + curl \ + wget \ + gnupg \ + unzip \ + ca-certificates \ + xz-utils \ + tar \ + postgresql-client \ + redis \ + libaio1 \ + git \ + openssh-client \ + freetds-dev \ + python3.11 \ + python3.11-venv \ + libprotobuf32 \ + libnl-route-3-200 \ + procps \ + libcap2-bin \ && apt-get upgrade -y -o Dpkg::Options::="--force-confold" \ && apt-get autoremove -y \ && apt-get clean && rm -rf /var/lib/apt/lists/* @@ -102,7 +153,7 @@ RUN curl -O https://nodejs.org/dist/v22.15.1/node-v22.15.1-linux-x64.tar.xz \ && echo 'export PATH="/usr/local/lib/nodejs/bin:$PATH"' >> /etc/profile.d/nodejs.sh \ && /bin/bash -c "source /etc/profile.d/nodejs.sh" \ && rm node-v22.15.1-linux-x64.tar.xz -ENV PATH=/usr/local/lib/nodejs/bin:$PATH +ENV PATH=/usr/local/lib/nodejs/bin:/opt/python-runtime/bin:$PATH ENV NODE_ENV=production ENV TOOLJET_EDITION=ee @@ -130,6 +181,24 @@ RUN mkdir -p /app RUN useradd --create-home --home-dir /home/appuser appuser +# Copy nsjail and Python runtime from builder +COPY --from=builder /build-nsjail/nsjail/nsjail /usr/local/bin/nsjail +RUN chmod 4755 /usr/local/bin/nsjail + +# Copy Python runtime with pre-installed packages +COPY --from=builder /opt/python-runtime /opt/python-runtime + +# Copy nsjail configuration file +RUN mkdir -p /etc/nsjail +COPY --from=builder /app/server/ee/workflows/nsjail/python-execution.cfg /etc/nsjail/python-execution.cfg + +# Create Python execution directories +RUN mkdir -p \ + /tmp/python-execution \ + /tmp/python-bundles \ + && chmod 1777 /tmp/python-execution \ + && chmod 1777 /tmp/python-bundles + # Use the PostgREST binary from the builder stage COPY --from=builder --chown=appuser:0 /postgrest /usr/local/bin/postgrest @@ -156,6 +225,8 @@ COPY --from=builder --chown=appuser:0 /app/server/dist ./app/server/dist COPY --from=builder --chown=appuser:0 /app/server/ee/ai/assets ./app/server/ee/ai/assets COPY ./docker/pre-release/ee/ee-entrypoint.sh ./app/server/ee-entrypoint.sh +# Set group write permissions for frontend build files to support RedHat arbitrary user assignment +RUN chmod -R g+w /app/frontend/build # Create directory /home/appuser and set ownership to appuser RUN mkdir -p /home/appuser \ @@ -164,6 +235,11 @@ RUN mkdir -p /home/appuser \ && chmod -R g=u /home/appuser \ && npm cache clean --force +# Create gitsync directory with proper permissions for RedHat/OpenShift arbitrary UID support +RUN mkdir -p /app/server/tooljet/gitsync \ + && chown -R appuser:0 /app/server/tooljet \ + && chmod -R 2770 /app/server/tooljet/gitsync + # Create rsyslog directory for audit logs with proper permissions RUN mkdir -p /home/appuser/rsyslog \ && chown -R appuser:0 /home/appuser/rsyslog \ diff --git a/frontend/.version b/frontend/.version index d7e293cb37..b8b5ad86ee 100644 --- a/frontend/.version +++ b/frontend/.version @@ -1 +1 @@ -3.20.119-lts +3.21.5-beta diff --git a/frontend/ee b/frontend/ee index 3537889338..16fc80f3d2 160000 --- a/frontend/ee +++ b/frontend/ee @@ -1 +1 @@ -Subproject commit 3537889338925f24f704a34d233515abf44fd9bc +Subproject commit 16fc80f3d2e50307cedcf10133d4c7e1a82752f3 diff --git a/frontend/src/AppBuilder/AppCanvas/AppCanvas.jsx b/frontend/src/AppBuilder/AppCanvas/AppCanvas.jsx index df1ab2e924..ff1bd6c2af 100644 --- a/frontend/src/AppBuilder/AppCanvas/AppCanvas.jsx +++ b/frontend/src/AppBuilder/AppCanvas/AppCanvas.jsx @@ -110,8 +110,8 @@ export const AppCanvas = ({ appId, switchDarkMode, darkMode }) => { currentMode === 'view' ? computeViewerBackgroundColor(isAppDarkMode, canvasBgColor) : !isAppDarkMode - ? '#EBEBEF' - : '#2F3C4C'; + ? '#EBEBEF' + : '#2F3C4C'; if (isModuleMode) { return { @@ -274,4 +274,4 @@ export const AppCanvas = ({ appId, switchDarkMode, darkMode }) => { ); -}; +}; \ No newline at end of file diff --git a/frontend/src/AppBuilder/AppCanvas/ConfigHandle/ConfigHandle.jsx b/frontend/src/AppBuilder/AppCanvas/ConfigHandle/ConfigHandle.jsx index 607a6cda07..eced23acd4 100644 --- a/frontend/src/AppBuilder/AppCanvas/ConfigHandle/ConfigHandle.jsx +++ b/frontend/src/AppBuilder/AppCanvas/ConfigHandle/ConfigHandle.jsx @@ -36,9 +36,9 @@ export const ConfigHandle = ({ subContainerIndex, isDynamicHeightEnabled, }) => { - const { moduleId } = useModuleContext(); + const { moduleId, isModuleEditor } = useModuleContext(); const isModulesEnabled = useStore((state) => state.license.featureAccess?.modulesEnabled, shallow); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const componentName = useStore((state) => state.getComponentDefinition(id, moduleId)?.component?.name || '', shallow); const isMultipleComponentsSelected = useStore( (state) => (findHighestLevelofSelection(state?.selectedComponents)?.length > 1 ? true : false), @@ -86,7 +86,7 @@ export const ConfigHandle = ({ const deleteComponents = () => { const selectedComponents = getSelectedComponents(); if (selectedComponents.length > 0) { - setWidgetDeleteConfirmation(true); + setWidgetDeleteConfirmation(true, isModuleEditor); } }; diff --git a/frontend/src/AppBuilder/AppCanvas/DeleteWidgetConfirmation.jsx b/frontend/src/AppBuilder/AppCanvas/DeleteWidgetConfirmation.jsx index c7741ebb89..17aab95ea7 100644 --- a/frontend/src/AppBuilder/AppCanvas/DeleteWidgetConfirmation.jsx +++ b/frontend/src/AppBuilder/AppCanvas/DeleteWidgetConfirmation.jsx @@ -7,9 +7,10 @@ export const DeleteWidgetConfirmation = ({ darkMode }) => { const showWidgetDeleteConfirmation = useStore((state) => state.showWidgetDeleteConfirmation, shallow); const setWidgetDeleteConfirmation = useStore((state) => state.setWidgetDeleteConfirmation, shallow); const deleteComponents = useStore((state) => state.deleteComponents, shallow); + const deleteTargetIsModuleEditor = useStore((state) => state.deleteTargetIsModuleEditor, shallow); const handleConfirmDelete = () => { - deleteComponents(); + deleteComponents(undefined, 'canvas', { isModuleEditor: deleteTargetIsModuleEditor }); }; return ( diff --git a/frontend/src/AppBuilder/AppCanvas/Grid/Grid.jsx b/frontend/src/AppBuilder/AppCanvas/Grid/Grid.jsx index 743b51ff1b..a95d839cc4 100644 --- a/frontend/src/AppBuilder/AppCanvas/Grid/Grid.jsx +++ b/frontend/src/AppBuilder/AppCanvas/Grid/Grid.jsx @@ -176,7 +176,7 @@ export default function Grid({ gridWidth, currentLayout, mainCanvasWidth }) { // eslint-disable-next-line react-hooks/exhaustive-deps }, [noOfBoxs, triggerCanvasUpdater, menuPosition, hideLogo, hideHeader, isPageMenuHidden]); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const handleResizeStop = useCallback( (boxList) => { diff --git a/frontend/src/AppBuilder/AppCanvas/HotkeyProvider.jsx b/frontend/src/AppBuilder/AppCanvas/HotkeyProvider.jsx index fc1930c69a..c70aa0ed6b 100644 --- a/frontend/src/AppBuilder/AppCanvas/HotkeyProvider.jsx +++ b/frontend/src/AppBuilder/AppCanvas/HotkeyProvider.jsx @@ -14,7 +14,7 @@ export const HotkeyProvider = ({ children, mode, currentLayout, canvasMaxWidth, const handleRedo = useStore((state) => state.handleRedo); const setWidgetDeleteConfirmation = useStore((state) => state.setWidgetDeleteConfirmation); const moveComponentPosition = useStore((state) => state.moveComponentPosition, shallow); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const enableReleasedVersionPopupState = useStore((state) => state.enableReleasedVersionPopupState, shallow); const clearSelectedComponents = useStore((state) => state.clearSelectedComponents, shallow); const getSelectedComponents = useStore((state) => state.getSelectedComponents, shallow); @@ -53,7 +53,7 @@ export const HotkeyProvider = ({ children, mode, currentLayout, canvasMaxWidth, const deleteComponents = () => { const selectedComponents = getSelectedComponents(); if (selectedComponents.length > 0) { - setWidgetDeleteConfirmation(true); + setWidgetDeleteConfirmation(true, isModuleEditor); } }; diff --git a/frontend/src/AppBuilder/AppCanvas/NoComponentCanvasContainer.jsx b/frontend/src/AppBuilder/AppCanvas/NoComponentCanvasContainer.jsx index 9da4e300ec..bcec8d6c56 100644 --- a/frontend/src/AppBuilder/AppCanvas/NoComponentCanvasContainer.jsx +++ b/frontend/src/AppBuilder/AppCanvas/NoComponentCanvasContainer.jsx @@ -5,12 +5,14 @@ import BulkIcon from '@/_ui/Icon/BulkIcons'; import { getSubpath } from '@/_helpers/routes'; import useStore from '@/AppBuilder/_stores/store'; import { shallow } from 'zustand/shallow'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; const NoComponentCanvasContainer = () => { + const { isModuleEditor } = useModuleContext(); const sampleDataSource = useStore((state) => state.sampleDataSource, shallow); const createDataQuery = useStore((state) => state.dataQuery.createDataQuery, shallow); const setPreviewData = useStore((state) => state.queryPanel.setPreviewData, shallow); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const expandQueryPaneIfNeeded = useStore((state) => state.queryPanel.expandQueryPaneIfNeeded); const queryBoxText = sampleDataSource diff --git a/frontend/src/AppBuilder/CodeBuilder/Elements/DropdownMenu/AddQueryBtn.jsx b/frontend/src/AppBuilder/CodeBuilder/Elements/DropdownMenu/AddQueryBtn.jsx index 1ea8a4e175..3358445587 100644 --- a/frontend/src/AppBuilder/CodeBuilder/Elements/DropdownMenu/AddQueryBtn.jsx +++ b/frontend/src/AppBuilder/CodeBuilder/Elements/DropdownMenu/AddQueryBtn.jsx @@ -1,13 +1,15 @@ import React, { useRef, useEffect } from 'react'; import useStore from '@/AppBuilder/_stores/store'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; import { OverlayTrigger, Popover } from 'react-bootstrap'; import DataSourceSelect from '@/AppBuilder/QueryManager/Components/DataSourceSelect'; import SolidIcon from '@/_ui/Icon/SolidIcons'; import { FileCode2 } from 'lucide-react'; const AddQueryBtn = ({ darkMode, disabled: _disabled, onQueryCreate, showMenu, setShowMenu }) => { + const { isModuleEditor } = useModuleContext(); const selectRef = useRef(); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const disabled = _disabled || shouldFreeze; useEffect(() => { diff --git a/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx b/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx index de8c14fe00..7432bd2a5c 100644 --- a/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx +++ b/frontend/src/AppBuilder/CodeEditor/SingleLineCodeEditor.jsx @@ -448,7 +448,7 @@ const EditorInput = ({
{/* sticky element to position the preview box correctly on top without flowing out of container */} {usePortalEditor && ( diff --git a/frontend/src/AppBuilder/Header/BranchDropdown.jsx b/frontend/src/AppBuilder/Header/BranchDropdown.jsx new file mode 100644 index 0000000000..6228cfe93a --- /dev/null +++ b/frontend/src/AppBuilder/Header/BranchDropdown.jsx @@ -0,0 +1,717 @@ +import React, { useState, useRef, useEffect } from 'react'; +import cx from 'classnames'; +import { Overlay, Popover } from 'react-bootstrap'; +import useStore from '@/AppBuilder/_stores/store'; +import SolidIcon from '@/_ui/Icon/SolidIcons'; +import '@/_styles/branch-dropdown.scss'; +import { toast } from 'react-hot-toast'; +import { CreateBranchModal } from './CreateBranchModal'; +import { SwitchBranchModal } from './SwitchBranchModal'; +import { Tooltip } from 'react-tooltip'; +import { gitSyncService } from '@/_services'; +import OverflowTooltip from '@/_components/OverflowTooltip'; +import { AlertTriangle } from 'lucide-react'; + +export function BranchDropdown({ appId, organizationId }) { + const [showDropdown, setShowDropdown] = useState(false); + const [expandedBranches, setExpandedBranches] = useState(new Set()); + const [showCreateModal, setShowCreateModal] = useState(false); + const [showSwitchModal, setShowSwitchModal] = useState(false); + const [activeTab, setActiveTab] = useState('open'); // 'open' or 'closed' + const [lastCommit, setLastCommit] = useState(null); + const [isLoadingCommit, setIsLoadingCommit] = useState(false); + const [hasFetchedPRs, setHasFetchedPRs] = useState(false); // Track if PRs have been fetched + const [hasFetchedBranchInfo, setHasFetchedBranchInfo] = useState(false); // Track if branch info has been fetched + const [isLoadingPRs, setIsLoadingPRs] = useState(false); // Track PR loading state + const dropdownRef = useRef(null); + const buttonRef = useRef(null); + const popoverRef = useRef(null); + + // Helper function to get relative time + const getRelativeTime = (dateString) => { + if (!dateString) return null; + const date = new Date(dateString); + const now = new Date(); + const diffMs = now - date; + const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24)); + + if (diffDays === 0) return 'Updated today'; + if (diffDays === 1) return 'Updated yesterday'; + if (diffDays < 7) return `Updated ${diffDays} days ago`; + if (diffDays < 30) return `Updated ${Math.floor(diffDays / 7)} weeks ago`; + return `Updated ${Math.floor(diffDays / 30)} months ago`; + }; + + // Helper function to format commit date (e.g., "25 Sept, 8:45am") + const formatCommitDate = (dateString) => { + if (!dateString) return 'Unknown date'; + const date = new Date(dateString); + const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']; + const day = date.getDate(); + const month = months[date.getMonth()]; + let hours = date.getHours(); + const minutes = date.getMinutes(); + const ampm = hours >= 12 ? 'pm' : 'am'; + hours = hours % 12 || 12; + const minutesStr = minutes < 10 ? `0${minutes}` : minutes; + return `${day} ${month}, ${hours}:${minutesStr}${ampm}`; + }; + + // Helper function to check if branch is locked (will be used for branch switching UI later) + const _isBranchLocked = (branch) => { + return branch.is_merged || branch.isMerged || branch.is_released || branch.isReleased; + }; + + // Helper function to build PR creation URL + const buildPRCreationURL = () => { + const defaultBranchName = orgGit?.git_https?.github_branch || orgGit?.git_ssh?.github_branch || 'main'; + const sourceBranch = currentBranchName; + + // Get repository URL from orgGit (check https_url, ssh_url, or repository fields) + const repoUrl = + orgGit?.git_https?.https_url || + orgGit?.git_https?.repository || + orgGit?.git_ssh?.ssh_url || + orgGit?.git_ssh?.repository; + + if (!repoUrl) { + console.error('No repository URL found in orgGit:', orgGit); + return null; + } + + // Extract owner and repo name from URL + // Handles: https://github.com/owner/repo.git, git@github.com:owner/repo.git, etc. + // Updated regex to handle dots in repo names (e.g., git-sync-2.0-repo.git) + const githubMatch = repoUrl.match(/github\.com[:/]([^/]+)\/(.+?)(\.git)?$/); + const gitlabMatch = repoUrl.match(/gitlab\.com[:/]([^/]+)\/(.+?)(\.git)?$/); + const bitbucketMatch = repoUrl.match(/bitbucket\.org[:/]([^/]+)\/(.+?)(\.git)?$/); + + if (githubMatch) { + const [, owner, repo] = githubMatch; + return `https://github.com/${owner}/${repo}/compare/${defaultBranchName}...${sourceBranch}?expand=1`; + } else if (gitlabMatch) { + const [, owner, repo] = gitlabMatch; + return `https://gitlab.com/${owner}/${repo}/-/merge_requests/new?merge_request[source_branch]=${sourceBranch}&merge_request[target_branch]=${defaultBranchName}`; + } else if (bitbucketMatch) { + const [, owner, repo] = bitbucketMatch; + return `https://bitbucket.org/${owner}/${repo}/pull-requests/new?source=${sourceBranch}&dest=${defaultBranchName}`; + } + + console.error('Could not parse repository URL:', repoUrl); + return null; + }; + + // Handle Create PR action + const _handleCreatePR = () => { + const prUrl = buildPRCreationURL(); + if (prUrl) { + window.open(prUrl, '_blank', 'noopener,noreferrer'); + setShowDropdown(false); + } else { + toast.error('Unable to determine repository URL for PR creation'); + } + }; + + // Zustand state + const { + currentBranch, + allBranches, + pullRequests, + branchingEnabled, + fetchBranches, + fetchPullRequests, + fetchDevelopmentVersions, + switchBranch, + switchToDefaultBranch, + setCurrentBranch, + orgGit, + selectedVersion, + } = useStore((state) => ({ + currentBranch: state.currentBranch, + allBranches: state.allBranches, + pullRequests: state.pullRequests, + branchingEnabled: state.branchingEnabled, + fetchBranches: state.fetchBranches, + fetchPullRequests: state.fetchPullRequests, + fetchDevelopmentVersions: state.fetchDevelopmentVersions, + switchBranch: state.switchBranch, + switchToDefaultBranch: state.switchToDefaultBranch, + setCurrentBranch: state.setCurrentBranch, + orgGit: state.orgGit, + selectedVersion: state.selectedVersion, + })); + + const darkMode = localStorage.getItem('darkMode') === 'true' || false; + + // Handle click outside to close dropdown + useEffect(() => { + const handleClickOutside = (event) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { + setShowDropdown(false); + event.stopPropagation(); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, []); + + // Reset commit state when dropdown closes + useEffect(() => { + if (!showDropdown) { + setLastCommit(null); + setIsLoadingCommit(false); + setHasFetchedPRs(false); // Reset PR fetch state when dropdown closes + setHasFetchedBranchInfo(false); // Reset branch info fetch state when dropdown closes + } + }, [showDropdown]); + + // Fetch branches and PRs on mount and when dropdown opens + useEffect(() => { + if (branchingEnabled && appId && organizationId) { + handleRefresh(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [branchingEnabled, appId, organizationId]); + + // Manual fetch last commit function + const fetchLastCommit = async () => { + const currentBranchName = selectedVersion?.name || currentBranch?.name; + const defaultBranchName = orgGit?.git_https?.github_branch || orgGit?.git_ssh?.github_branch || 'main'; + const isOnDefaultBranch = currentBranchName === defaultBranchName; + + // Only fetch commit if on non-default branch + if (!isOnDefaultBranch && currentBranchName && appId && organizationId) { + setIsLoadingCommit(true); + try { + const data = await gitSyncService.checkForUpdates(appId, currentBranchName); + const latestCommit = data?.meta_data?.latest_commit?.[0]; + + if (latestCommit) { + setLastCommit({ + message: latestCommit.message || latestCommit.commitMessage, + author: latestCommit.author || latestCommit.author_name, + date: latestCommit.date || latestCommit.committed_date, + }); + toast.success('Branch info fetched successfully'); + } else { + setLastCommit(null); + toast.info('No commits found for this branch'); + } + setIsLoadingCommit(false); + setHasFetchedBranchInfo(true); // Mark branch info as fetched + } catch (error) { + console.error('Error fetching last commit:', error); + setLastCommit(null); + setIsLoadingCommit(false); + setHasFetchedBranchInfo(true); // Mark as fetched even on error to hide button + // toast.error('Failed to fetch branch info'); + } + } else { + setLastCommit(null); + setIsLoadingCommit(false); + } + }; + + const handleRefresh = async () => { + if (!appId || !organizationId) return; + + setIsLoadingPRs(true); + try { + await Promise.all([ + fetchBranches(appId, organizationId), + fetchPullRequests(appId, organizationId), + fetchDevelopmentVersions(appId), // Fetch development versions for branch switching + ]); + setHasFetchedPRs(true); // Mark PRs as fetched + } catch (error) { + console.error('Error refreshing branches/PRs:', error); + toast.error('Failed to refresh branches'); + } finally { + setIsLoadingPRs(false); + } + }; + + const _handleBranchClick = async (branch) => { + if (branch.name === currentBranch?.name) { + setShowDropdown(false); + return; + } + + try { + // Check if this is the default branch (main/master/etc from config) + const defaultBranchName = orgGit?.git_https?.github_branch || orgGit?.git_ssh?.github_branch || 'main'; + const isDefaultBranch = branch.name === defaultBranchName; + + if (isDefaultBranch) { + // Switch to default branch (finds active draft or latest version) + const result = await switchToDefaultBranch(appId, branch.name); + if (result.success) { + setCurrentBranch(branch); + if (result.isDraft) { + toast.success(`Switched to ${branch.name} - Working on draft version`); + } else { + toast.success(`Switched to ${branch.name}`); + } + setShowDropdown(false); + } else { + toast.error(`Failed to switch to default branch: ${result.error}`); + } + } else { + // Switch to feature branch + const result = await switchBranch(appId, branch.name); + if (result.success) { + setCurrentBranch(branch); + setShowDropdown(false); + } else { + toast.error(`Failed to switch branch: ${result.error}`); + } + } + } catch (error) { + console.error('Error switching branch:', error); + toast.error(error.message || 'Failed to switch branch'); + } + }; + + const _toggleBranchExpand = (branchName) => { + const newExpanded = new Set(expandedBranches); + if (newExpanded.has(branchName)) { + newExpanded.delete(branchName); + } else { + newExpanded.add(branchName); + } + setExpandedBranches(newExpanded); + }; + + const _getPRForBranch = (branchName) => { + return pullRequests.find((pr) => pr.source_branch === branchName || pr.sourceBranch === branchName); + }; + + // Check if current branch is the default branch + const defaultBranchName = orgGit?.git_https?.github_branch || orgGit?.git_ssh?.github_branch || 'main'; + // Use selectedVersion.name as the current branch (ToolJet's version/branch name) + const currentBranchName = selectedVersion?.name || currentBranch?.name; + + // Determine if on default branch: + // - If versionType is 'version', we're on a regular version (show default branch UI) + // - If versionType is 'branch', we're on a feature branch (show branch commit UI) + const isOnDefaultBranch = selectedVersion?.versionType === 'version' || selectedVersion?.versionType !== 'branch'; + + // Display name: show default branch name when on a version, otherwise show current branch name + const displayBranchName = isOnDefaultBranch ? defaultBranchName : currentBranchName; + + // Filter PRs based on active tab + // Check both 'state' and 'status' fields to support different API responses + const openPRs = pullRequests.filter( + (pr) => pr.state?.toLowerCase() === 'open' || pr.status?.toLowerCase() === 'open' + ); + const closedPRs = pullRequests.filter( + (pr) => + pr.state?.toLowerCase() === 'closed' || + pr.status?.toLowerCase() === 'closed' || + (pr.state?.toLowerCase() !== 'open' && pr.status?.toLowerCase() !== 'open') + ); + const displayPRs = activeTab === 'open' ? openPRs : closedPRs; + + // Format PR date + const formatPRDate = (dateString) => { + if (!dateString) return ''; + const date = new Date(dateString); + return date.toLocaleDateString('en-US', { + day: 'numeric', + month: 'short', + hour: '2-digit', + minute: '2-digit', + hour12: true, + }); + }; + + if (!branchingEnabled) { + return null; + } + + const renderPopover = (overlayProps) => ( + + +
+ {/* Current Branch Header */} +
+ {isOnDefaultBranch ? ( + <> +
+ +
+
+
{displayBranchName || 'No branch selected'}
+
+ Default branch + {(currentBranch?.updatedAt || currentBranch?.updated_at) && ( + <> + + + {getRelativeTime(currentBranch.updatedAt || currentBranch.updated_at)} + + + )} +
+
+ + ) : ( + <> +
+ +
+
+
{displayBranchName || 'No branch selected'}
+
+ + Created by {currentBranch?.created_by || currentBranch?.author || 'Unknown'} + + + + {getRelativeTime( + selectedVersion?.createdAt || + selectedVersion?.created_at || + currentBranch?.createdAt || + currentBranch?.created_at + )} + +
+
+ + )} +
+ + {/* Main Content Area */} + {isOnDefaultBranch ? ( + <> + {/* Fetch PRs Button - Shown at top for default branch, hides after fetching */} + {!hasFetchedPRs && ( +
+ +
+ )} + + {/* PR Tabs and List - Only shown after fetching */} + {hasFetchedPRs && ( + <> + {/* PR Tabs */} +
+ + +
+ + {/* PR List */} +
+ {displayPRs.length === 0 ? ( +
+ +
+
+ {activeTab === 'open' ? 'There are no open PRs' : 'There are no closed PRs'} +
+
+ {activeTab === 'open' + ? 'Create a pull request to contribute your changes' + : 'Merge a pull request to contribute your changes'} +
+
+
+ ) : ( + displayPRs.map((pr) => ( +
+
+ +
+
+ + {pr.title || 'Untitled PR'} + +
+ from {pr.source_branch || pr.sourceBranch} | {formatPRDate(pr.created_at || pr.createdAt)} +
+
+
+ )) + )} +
+ + )} + + ) : ( + <> + {/* Fetch Branch Info Button - Only show when not fetched yet */} + {!hasFetchedBranchInfo && ( +
+ +
+ )} + + {/* Latest Commit Section & Empty State - Only show after fetching */} + {hasFetchedBranchInfo && ( + <> + {/* Latest Commit Section - for non-default branches with commits */} + {lastCommit && !isLoadingCommit && ( +
+ {/*
+ LATEST COMMIT +
*/} +
+
+ +
+
+
{lastCommit.message || 'No message'}
+
+ By {lastCommit.author || 'Unknown'} | {formatCommitDate(lastCommit.date)} +
+
+
+
+ )} + + {/* Empty state - no commits yet */} + {!lastCommit && !isLoadingCommit && ( +
+ +
+
There are no commits yet
+
+ Commit your changes to create a pull request to contribute them +
+
+
+ )} + + {/* Loading state for commit */} + {isLoadingCommit && ( +
+
+ Loading commit info... +
+ )} + + )} + + )} + + {/* Footer actions */} +
+ {/* Default branch footer: Create branch + Switch branch */} + {isOnDefaultBranch ? ( + <> + + {console.log('BranchDropdown - allBranches:', allBranches, 'length:', allBranches.length) || + (true && allBranches.length > 0 && ( + + ))} + + ) : ( + <> + {/* Feature branch footer: Create PR + Switch branch */} + {/* Always show Create PR button when on sub-branch */} + + {allBranches.length > 0 && ( + + )} + + )} +
+
+
+
+ ); + + return ( + <> +
+ +
+ + setShowDropdown(false)} + popperConfig={{ + modifiers: [ + { + name: 'preventOverflow', + options: { + boundary: 'viewport', + padding: 8, + }, + }, + { + name: 'flip', + options: { + fallbackPlacements: ['bottom-start', 'top-end', 'top-start'], + }, + }, + { + name: 'offset', + options: { + offset: [0, 4], + }, + }, + ], + }} + > + {({ placement: _placement, arrowProps: _arrowProps, show: _show, popper: _popper, ...props }) => ( +
+ {renderPopover(props)} +
+ )} +
+ + {/* Create Branch Modal */} + {showCreateModal && ( + setShowCreateModal(false)} + onSuccess={(newBranch) => { + // Optionally switch to the new branch after creation + if (newBranch) { + setCurrentBranch(newBranch); + } + }} + /> + )} + + {/* Switch Branch Modal */} + {showSwitchModal && ( + setShowSwitchModal(false)} + appId={appId} + organizationId={organizationId} + /> + )} + + {/* Tooltip for PR details */} + {/* Tooltip for PR details */} + + + ); +} diff --git a/frontend/src/AppBuilder/Header/CreateBranchModal.jsx b/frontend/src/AppBuilder/Header/CreateBranchModal.jsx new file mode 100644 index 0000000000..21933be537 --- /dev/null +++ b/frontend/src/AppBuilder/Header/CreateBranchModal.jsx @@ -0,0 +1,396 @@ +import React, { useState, useEffect, useRef } from 'react'; +import useStore from '@/AppBuilder/_stores/store'; +import { useVersionManagerStore } from '@/_stores/versionManagerStore'; +import { toast } from 'react-hot-toast'; +import { ButtonSolid } from '@/_ui/AppButton/AppButton'; +import SolidIcon from '@/_ui/Icon/SolidIcons'; +import { DraftVersionWarningModal } from './DraftVersionWarningModal'; +import { Alert } from '@/_ui/Alert'; +import AlertDialog from '@/_ui/AlertDialog'; +import cx from 'classnames'; +import '@/_styles/create-branch-modal.scss'; + +export function CreateBranchModal({ onClose, onSuccess, appId, organizationId }) { + const [branchName, setBranchName] = useState(''); + const [createFrom, setCreateFrom] = useState(''); + const [autoCommit, setAutoCommit] = useState(true); + const [isCreating, setIsCreating] = useState(false); + const [validationError, setValidationError] = useState(''); + const [showDraftWarning, setShowDraftWarning] = useState(false); + const [isDropdownOpen, setIsDropdownOpen] = useState(false); + const dropdownRef = useRef(null); + + const { + allBranches, + isDraftVersionActive, + createBranch, + switchBranch, + fetchBranches, + lazyLoadAppVersions, + fetchDevelopmentVersions, + editingVersion, + currentBranch, + releasedVersionId, + } = useStore((state) => ({ + allBranches: state.allBranches || [], + isDraftVersionActive: state.isDraftVersionActive, + createBranch: state.createBranch, + switchBranch: state.switchBranch, + fetchBranches: state.fetchBranches, + lazyLoadAppVersions: state.lazyLoadAppVersions, + fetchDevelopmentVersions: state.fetchDevelopmentVersions, + editingVersion: state.editingVersion, + currentBranch: state.currentBranch, + releasedVersionId: state.releasedVersionId, + })); + + // Get versions from versionManagerStore + const { versions, fetchVersions } = useVersionManagerStore((state) => ({ + versions: state.versions || [], + fetchVersions: state.fetchVersions, + })); + + // Load versions when modal opens - always refresh to get latest versions + useEffect(() => { + if (appId) { + fetchVersions(appId); + } + }, [appId, fetchVersions]); + + // Close dropdown when clicking outside + useEffect(() => { + const handleClickOutside = (event) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { + setIsDropdownOpen(false); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); + }, []); + + // Get status badge for version + const getVersionStatusBadge = (version) => { + const status = version.status || ''; + // Use releasedVersionId to determine if version is released (same pattern as VersionDropdownItem) + const isReleased = version.id === releasedVersionId; + + if (status === 'DRAFT') { + return { label: 'Draft', className: 'status-badge-draft' }; + } else if (isReleased) { + return { label: 'Released', className: 'status-badge-released' }; + } + return null; + }; + + // Get parent version name for "Created from" text + const getCreatedFromText = (version) => { + if (version.parentVersionId) { + // Look up the parent version to get its name + const parentVersion = versions.find((v) => v.id === version.parentVersionId); + const parentName = parentVersion?.name || `v${version.parentVersionId}`; + return `Created from ${parentName}`; + } + return version.description || ''; + }; + + const selectedVersion = versions.find((v) => v.id === createFrom); + const selectedBadge = selectedVersion ? getVersionStatusBadge(selectedVersion) : null; + + const validateBranchName = (name) => { + if (!name || name.trim().length === 0) { + return 'Branch name is required'; + } + + // No spaces allowed + if (/\s/.test(name)) { + return 'Branch name cannot contain spaces'; + } + + // Only alphanumeric, hyphens, and underscores + if (!/^[a-zA-Z0-9_-]+$/.test(name)) { + return 'Branch name can only contain letters, numbers, hyphens, and underscores'; + } + + // Check for uniqueness + const existingBranch = allBranches.find((b) => b.name?.toLowerCase() === name.toLowerCase()); + if (existingBranch) { + return 'A branch with this name already exists'; + } + + // Reserved names + const reservedNames = ['main', 'master', 'head', 'origin']; + if (reservedNames.includes(name.toLowerCase())) { + return 'This branch name is reserved'; + } + + return ''; + }; + + const handleBranchNameChange = (e) => { + const newName = e.target.value; + setBranchName(newName); + + // Clear validation error when user starts typing + if (validationError) { + setValidationError(''); + } + }; + + const handleCreateBranch = async () => { + // Validate branch name + const error = validateBranchName(branchName); + if (error) { + setValidationError(error); + return; + } + + setIsCreating(true); + + // Determine the base branch - use current branch name or default to 'main' + const baseBranchName = currentBranch?.name || 'main'; + + const branchData = { + branchName: branchName.trim(), + versionFromId: createFrom, + baseBranch: baseBranchName, + autoCommit: autoCommit, + }; + + try { + const result = await createBranch(appId, organizationId, branchData); + + if (result.success) { + toast.success(`Branch "${branchName}" created successfully`); + + // Refresh branches list and versions BEFORE switching + // This ensures the new branch version is available when we call switchBranch + await Promise.all([ + fetchBranches(appId, organizationId), + lazyLoadAppVersions(appId), + // Also fetch development versions since the new branch is in Development environment + fetchDevelopmentVersions(appId), + ]); + + console.log('CreateBranchModal - versions refreshed, now switching to branch:', branchName.trim()); + + // Switch to the newly created branch (similar to version creation) + try { + const switchResult = await switchBranch(appId, branchName.trim()); + console.log('CreateBranchModal - switchBranch result:', switchResult); + } catch (switchError) { + console.error('Error switching to new branch:', switchError); + toast.error('Branch created but failed to switch to it'); + } + + onSuccess?.(result.data); + onClose(); + } else { + // Handle specific errors + if (result.error === 'DRAFT_EXISTS') { + setShowDraftWarning(true); + } else { + setValidationError(result.error || 'Failed to create branch'); + toast.error(result.error || 'Failed to create branch'); + } + } + } catch (error) { + console.error('Error creating branch:', error); + setValidationError('An unexpected error occurred'); + toast.error('Failed to create branch'); + } finally { + setIsCreating(false); + } + }; + + const handleKeyDown = (e) => { + if (e.key === 'Enter' && !isCreating && !isDropdownOpen) { + handleCreateBranch(); + } else if (e.key === 'Escape' && isDropdownOpen) { + setIsDropdownOpen(false); + } + }; + + // Set default "Create from" on mount + useEffect(() => { + if (versions.length > 0 && !createFrom) { + // Filter to only version-type versions (exclude branches) + const versionTypeVersions = versions.filter((v) => { + const versionType = v.versionType || v.version_type; + return versionType === 'version'; + }); + + if (versionTypeVersions.length === 0) { + return; // No valid versions to select from + } + + // If editingVersion is a version-type, use it; otherwise use first valid version + if (editingVersion?.id) { + const editingVersionType = editingVersion.versionType || editingVersion.version_type; + if (editingVersionType === 'version') { + setCreateFrom(editingVersion.id); + } else { + // Current editing version is a branch, use first version-type version + setCreateFrom(versionTypeVersions[0].id); + } + } else { + setCreateFrom(versionTypeVersions[0].id); + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [versions]); + + return ( + <> + +
+ {/* Draft warning message */} + {isDraftVersionActive && ( +
+ + A draft version exists. Commit or discard it before creating a new branch. +
+ )} + + {/* Create from dropdown */} +
+ +
+ + {isDropdownOpen && ( +
+ {versions + .filter((version) => { + // Only show versions with versionType === 'version' (exclude branch-type versions) + const versionType = version.versionType || version.version_type; + return versionType === 'version'; + }) + .map((version) => { + const badge = getVersionStatusBadge(version); + const createdFrom = getCreatedFromText(version); + const isSelected = version.id === createFrom; + + return ( +
{ + setCreateFrom(version.id); + setIsDropdownOpen(false); + }} + > + {isSelected && ( +
+ +
+ )} + {!isSelected &&
} +
+
+ {version.name} + {badge && {badge.label}} +
+ {createdFrom &&
{createdFrom}
} +
+
+ ); + })} +
+ )} +
+
+ + {/* Branch name input */} +
+ + + {validationError &&
{validationError}
} +
Branch name must be unique and max 50 characters
+
+ + {/* Auto-commit checkbox */} +
+ +
+ + {/* Info message about branch creation */} + + Branch can only be created from master + + + {/* Footer buttons */} +
+ + Cancel + + + {'Create branch'} + +
+
+ + + {/* Draft Version Warning Modal */} + {showDraftWarning && setShowDraftWarning(false)} />} + + ); +} diff --git a/frontend/src/AppBuilder/Header/CreateDraftVersionModal.jsx b/frontend/src/AppBuilder/Header/CreateDraftVersionModal.jsx index 50ca833be9..0046f69b94 100644 --- a/frontend/src/AppBuilder/Header/CreateDraftVersionModal.jsx +++ b/frontend/src/AppBuilder/Header/CreateDraftVersionModal.jsx @@ -9,20 +9,14 @@ import useStore from '@/AppBuilder/_stores/store'; import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; import { ButtonSolid } from '@/_ui/AppButton/AppButton'; import '../../_styles/version-modal.scss'; +import { useVersionManagerStore } from '@/_stores/versionManagerStore'; -const CreateDraftVersionModal = ({ - showCreateAppVersion, - setShowCreateAppVersion, - handleCommitEnableChange, - canCommit, - orgGit, - fetchingOrgGit, - handleCommitOnVersionCreation = () => { }, -}) => { +const CreateDraftVersionModal = ({ showCreateAppVersion, setShowCreateAppVersion, fetchingOrgGit }) => { const { moduleId } = useModuleContext(); const [isCreatingVersion, setIsCreatingVersion] = useState(false); const [versionName, setVersionName] = useState(''); const [isGitSyncEnabled, setIsGitSyncEnabled] = useState(false); + const refreshVersions = useVersionManagerStore((state) => state.refreshVersions); const { createNewVersionAction, changeEditorVersionAction, @@ -30,6 +24,9 @@ const CreateDraftVersionModal = ({ developmentVersions, appId, selectedVersion, + selectedEnvironment, + orgGit, + appGit, } = useStore( (state) => ({ createNewVersionAction: state.createNewVersionAction, @@ -42,6 +39,8 @@ const CreateDraftVersionModal = ({ appId: state.appStore.modules[moduleId].app.appId, currentVersionId: state.currentVersionId, selectedVersion: state.selectedVersion, + appGit: state.appGit, + orgGit: state.orgGit, }), shallow ); @@ -50,12 +49,11 @@ const CreateDraftVersionModal = ({ const savedVersions = developmentVersions.filter((version) => version.status !== 'DRAFT'); useEffect(() => { const gitSyncEnabled = - orgGit?.git_ssh?.is_enabled || - orgGit?.git_https?.is_enabled || - orgGit?.git_lab?.is_enabled; + appGit?.org_git?.git_ssh?.is_enabled || + appGit?.org_git?.git_https?.is_enabled || + appGit?.org_git?.git_lab?.is_enabled; setIsGitSyncEnabled(gitSyncEnabled); - }, [orgGit]); - + }, [appGit]); const [selectedVersionForCreation, setSelectedVersionForCreation] = useState(null); useEffect(() => { @@ -112,8 +110,8 @@ const CreateDraftVersionModal = ({ savedVersions.length > 0 ? savedVersions.map((version) => ({ label: version.name, value: version.id })) : selectedVersion && selectedVersion.status !== 'DRAFT' - ? [{ label: selectedVersion.name, value: selectedVersion.id }] - : []; + ? [{ label: selectedVersion.name, value: selectedVersion.id }] + : []; const createVersion = () => { if (versionName.trim().length > 25) { @@ -145,14 +143,13 @@ const CreateDraftVersionModal = ({ setShowCreateAppVersion(false); // Refresh development versions to update the list with the new draft fetchDevelopmentVersions(appId); + refreshVersions(appId, selectedEnvironment?.id); // Use changeEditorVersionAction to properly switch to the new draft version // This will update selectedVersion with all fields including status changeEditorVersionAction( appId, newVersion.id, - (data) => { - handleCommitOnVersionCreation(data); - }, + () => {}, (error) => { console.error('Error switching to new draft version:', error); toast.error('Draft created but failed to switch to it'); @@ -261,28 +258,6 @@ const CreateDraftVersionModal = ({
- - {isGitSyncEnabled && ( -
-
- -
-
-
- Commit changes -
-
- This will commit the creation of the new version to the git repo -
-
-
- )}
diff --git a/frontend/src/AppBuilder/Header/CreateVersionModal.jsx b/frontend/src/AppBuilder/Header/CreateVersionModal.jsx index cd525853a5..16bc266487 100644 --- a/frontend/src/AppBuilder/Header/CreateVersionModal.jsx +++ b/frontend/src/AppBuilder/Header/CreateVersionModal.jsx @@ -18,9 +18,10 @@ const CreateVersionModal = ({ canCommit, orgGit, fetchingOrgGit, - handleCommitOnVersionCreation = () => { }, + handleCommitOnVersionCreation, versionId, onVersionCreated, + isBranchingEnabled, }) => { const { moduleId } = useModuleContext(); const setResolvedGlobals = useStore((state) => state.setResolvedGlobals, shallow); @@ -28,6 +29,8 @@ const CreateVersionModal = ({ const [versionName, setVersionName] = useState(''); const [versionDescription, setVersionDescription] = useState(''); const isGitSyncEnabled = orgGit?.git_ssh?.is_enabled || orgGit?.git_https?.is_enabled || orgGit?.git_lab?.is_enabled; + const { current_organization_id } = authenticationService.currentSessionValue; + const { changeEditorVersionAction, environmentChangedAction, @@ -39,6 +42,7 @@ const CreateVersionModal = ({ currentEnvironment, environments, setIsEditorFreezed, + appGit, } = useStore( (state) => ({ changeEditorVersionAction: state.changeEditorVersionAction, @@ -55,6 +59,7 @@ const CreateVersionModal = ({ currentEnvironment: state.selectedEnvironment, environments: state.environments, setIsEditorFreezed: state.setIsEditorFreezed, + appGit: state.appGit, }), shallow ); @@ -146,12 +151,77 @@ const CreateVersionModal = ({ setIsCreatingVersion(true); try { + if (isGitSyncEnabled && isBranchingEnabled) { + if (!appGit?.git_app_name || !appGit?.id) { + toast.error( + "Empty apps can't be versioned. Build your app first and then save your work through version control." + ); + setIsCreatingVersion(false); + return; + } + + try { + const tagCheck = await gitSyncService.checkTagExists(appId, versionName.trim()); + if (tagCheck.exists) { + toast.error( + `Cannot save: Tag '${tagCheck.tagName}' already exists. ` + + `Please rename your version to a unique name before saving.` + ); + setIsCreatingVersion(false); + return; + } + } catch (error) { + // If check fails, log warning but allow save to proceed + // (tag creation will fail separately if there's an issue) + console.warn('Tag existence check failed, proceeding with save', error); + } + } + + // Only call git-related APIs if git sync is enabled await appVersionService.save(appId, selectedVersionForCreation.id, { name: versionName, - description: versionDescription, + description: versionDescription || undefined, // need to add commit changes logic here status: 'PUBLISHED', }); + // if (isGitSyncEnabled) { + // // The backend's version-rename-commit event is suppressed when the status is + // // also changing to PUBLISHED (save-version flow), so there's no competing push. + // // We always handle the commit here with the correct "Version Created" message. + // const updatedVersionData = { + // ...selectedVersionForCreation, + // name: versionName, + // description: versionDescription, + // }; + // handleCommitOnVersionCreation(updatedVersionData, selectedVersion) + // .then((commitDone) => { + // if (!commitDone) return; + // if (isBranchingEnabled) { + // return gitSyncService.createGitTag( + // appId, + // selectedVersionForCreation.id, + // versionDescription || `Version ${versionName.trim()} created` + // ); + // } + // }) + // .catch((error) => { + // console.error('Commit or tag failed:', error); + // toast.error(error?.data?.message || 'Commit or tag failed'); + // }); + // } + + if (isGitSyncEnabled && isBranchingEnabled) { + gitSyncService + .createGitTag( + appId, + selectedVersionForCreation.id, + versionDescription || `Version ${versionName.trim()} created` + ) + .catch((error) => { + toast.error(error?.data?.message || 'Tag creation failed'); + }); + } + toast.success('Version Created successfully'); setVersionName(''); setVersionDescription(''); @@ -194,10 +264,7 @@ const CreateVersionModal = ({ changeEditorVersionAction( appId, newVersionData.editing_version.id, - () => { - console.log('Successfully switched environment and version'); - handleCommitOnVersionCreation(newVersionData, selectedVersion); - }, + () => {}, (error) => { console.error('Error switching to newly created version:', error); toast.error('Version created but failed to switch to it'); @@ -210,9 +277,7 @@ const CreateVersionModal = ({ await changeEditorVersionAction( appId, newVersionData.editing_version.id, - () => { - handleCommitOnVersionCreation(newVersionData, selectedVersion); - }, + () => {}, (error) => { console.error('Error switching to newly created version:', error); toast.error('Version created but failed to switch to it'); @@ -229,8 +294,7 @@ const CreateVersionModal = ({ toast.error('Version name already exists.'); } else if (error?.error) { toast.error(error?.error); - } - else { + } else { toast.error('Error while creating version. Please try again.'); } } finally { @@ -325,7 +389,8 @@ const CreateVersionModal = ({
*/} - {isGitSyncEnabled && ( + {/* Disabling autoCommit */} + {/* {isGitSyncEnabled && (
@@ -345,7 +411,8 @@ const CreateVersionModal = ({
- )} + )} */} +
{ + if (e.target.classList.contains('draft-warning-modal-overlay')) { + onClose(); + } + }; + + const handleKeyDown = (e) => { + if (e.key === 'Escape') { + onClose(); + } + }; + + React.useEffect(() => { + document.addEventListener('keydown', handleKeyDown); + return () => { + document.removeEventListener('keydown', handleKeyDown); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
+
+
+
+ +
+ +
+ +
+

Draft Version Exists

+

+ You cannot create a new branch while a draft version exists. Please commit or discard the current draft + version before creating a new branch. +

+ +
+ +
+ What's a draft version? +

+ A draft version contains uncommitted changes. Only one draft version can exist at a time to prevent + conflicts. +

+
+
+
+ +
+ + Close + +
+
+
+ ); +} diff --git a/frontend/src/AppBuilder/Header/EditAppName.jsx b/frontend/src/AppBuilder/Header/EditAppName.jsx index 2dad9e6348..acaaa7c0f1 100644 --- a/frontend/src/AppBuilder/Header/EditAppName.jsx +++ b/frontend/src/AppBuilder/Header/EditAppName.jsx @@ -10,16 +10,39 @@ import { PenLine } from 'lucide-react'; function EditAppName() { const { moduleId } = useModuleContext(); - const [appId, appName, setAppName, appCreationMode] = useStore( + const [appId, appName, setAppName, appCreationMode, selectedVersion, orgGit, appGit] = useStore( (state) => [ state.appStore.modules[moduleId].app.appId, state.appStore.modules[moduleId].app.appName, state.setAppName, state.appStore.modules[moduleId].app.creationMode, + state.selectedVersion, + state.orgGit, + state.appGit, ], shallow ); + const isDraftVersion = selectedVersion?.status === 'DRAFT'; + const isGitSyncEnabled = orgGit?.git_ssh?.is_enabled || orgGit?.git_https?.is_enabled || orgGit?.git_lab?.is_enabled; + const isAppCommittedToGit = !!appGit?.id; + const isOnDefaultBranch = selectedVersion?.versionType !== 'branch'; + const isRenameDisabled = !isGitSyncEnabled + ? false + : !isAppCommittedToGit + ? !isDraftVersion + : !isDraftVersion || isOnDefaultBranch; + + const getDisabledTooltipMessage = () => { + if (isGitSyncEnabled && isAppCommittedToGit && isOnDefaultBranch) { + return "Renaming isn't allowed on master. Switch branch to update name."; + } + if (!isDraftVersion && isGitSyncEnabled) { + return 'Renaming of app is only allowed on draft versions'; + } + return appName; + }; + const [showRenameModal, setShowRenameModal] = useState(false); const handleRenameApp = async (newAppName, appId) => { @@ -31,7 +54,7 @@ function EditAppName() { return true; } try { - await appsService.saveApp(appId, { name: sanitizedName }); + await appsService.saveApp(appId, { name: sanitizedName, editingVersionId: selectedVersion?.id }); setAppName(sanitizedName); toast.success('App name has been updated!'); return true; @@ -48,12 +71,21 @@ function EditAppName() { return ( <>
- +
diff --git a/frontend/src/AppBuilder/Header/EditorHeader.jsx b/frontend/src/AppBuilder/Header/EditorHeader.jsx index b6a40dd573..f1feeb9076 100644 --- a/frontend/src/AppBuilder/Header/EditorHeader.jsx +++ b/frontend/src/AppBuilder/Header/EditorHeader.jsx @@ -6,21 +6,24 @@ import LogoNavDropdown from '@/modules/Appbuilder/components/LogoNavDropdown'; import HeaderActions from './HeaderActions'; import { VersionManagerDropdown, VersionManagerErrorBoundary } from './VersionManager'; import useStore from '@/AppBuilder/_stores/store'; -import RightTopHeaderButtons from './RightTopHeaderButtons/RightTopHeaderButtons'; - +import RightTopHeaderButtons, { PreviewAndShareIcons } from './RightTopHeaderButtons/RightTopHeaderButtons'; import { ModuleEditorBanner } from '@/modules/Modules/components'; import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; +import { BranchDropdown } from './BranchDropdown'; import './styles/style.scss'; import SaveIndicator from './SaveIndicator'; export const EditorHeader = ({ darkMode }) => { const { moduleId, isModuleEditor } = useModuleContext(); - const { isSaving, saveError, isVersionReleased } = useStore( + const { isSaving, saveError, isVersionReleased, appId, organizationId, selectedVersion } = useStore( (state) => ({ isSaving: state.appStore.modules[moduleId].app.isSaving, saveError: state.appStore.modules[moduleId].app.saveError, isVersionReleased: state.isVersionReleased, + appId: state.appStore.modules[moduleId].app.appId, + organizationId: state.appStore.modules[moduleId].app.organizationId, + selectedVersion: state.selectedVersion, }), shallow ); @@ -51,7 +54,7 @@ export const EditorHeader = ({ darkMode }) => {
- {isModuleEditor && } + {isModuleEditor && }
@@ -78,9 +81,14 @@ export const EditorHeader = ({ darkMode }) => {
{!isModuleEditor && ( <> - - - + + {} + {/* Hide version dropdown when on a feature branch */} + {selectedVersion?.versionType !== 'branch' && ( + + + + )} )} diff --git a/frontend/src/AppBuilder/Header/FreezeVersionInfo.jsx b/frontend/src/AppBuilder/Header/FreezeVersionInfo.jsx index 92480d19e9..c0f8cea18e 100644 --- a/frontend/src/AppBuilder/Header/FreezeVersionInfo.jsx +++ b/frontend/src/AppBuilder/Header/FreezeVersionInfo.jsx @@ -2,12 +2,14 @@ import React from 'react'; import cx from 'classnames'; import Branch from '@assets/images/icons/branch.svg'; import useStore from '@/AppBuilder/_stores/store'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; const FreezeVersionInfo = ({ info = 'App cannot be edited after promotion. Please create a new version from Development to make any changes.', hide = false, }) => { - const isViewOnly = useStore((state) => state.getShouldFreeze()); + const { isModuleEditor } = useModuleContext(); + const isViewOnly = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const isAiOperationInProgress = useStore((state) => state?.ai?.isLoading); if (!isViewOnly || hide || isAiOperationInProgress) return null; diff --git a/frontend/src/AppBuilder/Header/HeaderActions.jsx b/frontend/src/AppBuilder/Header/HeaderActions.jsx index 5101b3ea4b..1f1a9218fb 100644 --- a/frontend/src/AppBuilder/Header/HeaderActions.jsx +++ b/frontend/src/AppBuilder/Header/HeaderActions.jsx @@ -10,8 +10,10 @@ import { Link } from 'react-router-dom'; import { useAppPreviewLink } from '@/_hooks/useAppPreviewLink'; import { ToggleLayoutButtons } from './ToggleLayoutButtons'; import { Button as ButtonComponent } from '@/components/ui/Button/Button'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; const HeaderActions = function HeaderActions ({ darkMode, showFullWidth, showPreviewBtn = true }) { + const { isModuleEditor } = useModuleContext(); const { currentLayout, canUndo, @@ -25,8 +27,8 @@ const HeaderActions = function HeaderActions ({ darkMode, showFullWidth, showPre } = useStore( (state) => ({ currentLayout: state.currentLayout, - canUndo: state.canUndo && !(state.isEditorFreezed || state.isVersionReleased), - canRedo: state.canRedo && !(state.isEditorFreezed || state.isVersionReleased), + canUndo: state.canUndo && !state.getShouldFreeze(false, isModuleEditor), + canRedo: state.canRedo && !state.getShouldFreeze(false, isModuleEditor), toggleCurrentLayout: state.toggleCurrentLayout, showToggleLayoutBtn: state.showToggleLayoutBtn, showUndoRedoBtn: state.showUndoRedoBtn, diff --git a/frontend/src/AppBuilder/Header/LifecycleCTAButton.jsx b/frontend/src/AppBuilder/Header/LifecycleCTAButton.jsx new file mode 100644 index 0000000000..dde2b6b7f9 --- /dev/null +++ b/frontend/src/AppBuilder/Header/LifecycleCTAButton.jsx @@ -0,0 +1,96 @@ +import React from 'react'; +import useStore from '@/AppBuilder/_stores/store'; +import { Button } from '@/components/ui/Button/Button'; +import SolidIcon from '@/_ui/Icon/SolidIcons'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; +import { shallow } from 'zustand/shallow'; + +/** + * LifecycleCTAButton - Dynamic button that shows git operations based on branch type + * + * States: + * - Default Branch: "Pull commit" - Opens git sync modal with pull/push tabs + * - Feature Branch: "Commit" - Opens git sync modal to commit changes + */ +const LifecycleCTAButton = () => { + const { moduleId } = useModuleContext(); + + const { selectedVersion, toggleGitSyncModal, creationMode, featureAccess, isEditorFreezed, isGitSyncConfigured } = + useStore( + (state) => ({ + selectedVersion: state.selectedVersion, + toggleGitSyncModal: state.toggleGitSyncModal, + creationMode: state.appStore.modules[moduleId]?.app?.creationMode, + featureAccess: state?.license?.featureAccess, + isEditorFreezed: state.isEditorFreezed, + isGitSyncConfigured: state.isGitSyncConfigured, + }), + shallow + ); + + const isGitSyncEnabled = featureAccess?.gitSync; + + // If git sync is not available in the plan or license is expired, hide completely + if (!isGitSyncEnabled) { + return null; + } + + // Determine if we're on default branch or feature branch + // - versionType === 'version' means default branch + // - versionType === 'branch' means feature branch + const isOnDefaultBranch = selectedVersion?.versionType === 'version' || selectedVersion?.versionType !== 'branch'; + + // Determine button state based on git configuration and branch type + const getButtonConfig = () => { + if (!isGitSyncConfigured) { + // Git is in the plan but not configured in the workspace + return { + label: 'Configure Git', + icon: 'commit', + variant: 'secondary', + disabled: false, + }; + } + + if (isOnDefaultBranch) { + // Default branch - show "Pull commit" button + return { + label: 'Pull commit', + icon: 'commit', + variant: 'secondary', + disabled: false, + }; + } else { + // Feature branch - show "Commit" button + return { + label: 'Commit', + icon: 'commit', + variant: 'secondary', + disabled: false, + }; + } + }; + + const config = getButtonConfig(); + const handleClick = () => { + // Open the git sync modal (which has pull/push tabs) + toggleGitSyncModal(creationMode); + }; + + return ( +
+ +
+ ); +}; + +export default LifecycleCTAButton; diff --git a/frontend/src/AppBuilder/Header/LockedBranchBanner.jsx b/frontend/src/AppBuilder/Header/LockedBranchBanner.jsx new file mode 100644 index 0000000000..47d858c35d --- /dev/null +++ b/frontend/src/AppBuilder/Header/LockedBranchBanner.jsx @@ -0,0 +1,53 @@ +import React from 'react'; +import '@/_styles/locked-branch-banner.scss'; + +/** + * LockedBranchBanner - Displays a full-width warning banner when viewing a read-only branch + * Shows below the editor navigation bar when current branch is locked (merged/released) + * + * @param {boolean} isVisible - Whether to show the banner + * @param {string} branchName - Name of the locked branch + * @param {string} reason - Reason why branch is locked (e.g., "merged", "released") + */ +const LockedBranchBanner = ({ isVisible = false, branchName = '', reason = 'merged' }) => { + if (!isVisible) { + return null; + } + + const reasonText = + reason === 'released' + ? 'This branch has been released and is now read-only' + : reason === 'main_config_branch' + ? `${branchName} is locked. Create a branch to make edits.` + : 'This branch has been merged and is now read-only'; + + return ( +
+
+ + + +
+ {reasonText} + {branchName && ( + + Branch: {branchName} + + )} +
+
+
+ ); +}; + +export default LockedBranchBanner; diff --git a/frontend/src/AppBuilder/Header/RightTopHeaderButtons/RightTopHeaderButtons.jsx b/frontend/src/AppBuilder/Header/RightTopHeaderButtons/RightTopHeaderButtons.jsx index 1f277d2d7e..648bc97369 100644 --- a/frontend/src/AppBuilder/Header/RightTopHeaderButtons/RightTopHeaderButtons.jsx +++ b/frontend/src/AppBuilder/Header/RightTopHeaderButtons/RightTopHeaderButtons.jsx @@ -6,24 +6,34 @@ import { shallow } from 'zustand/shallow'; import queryString from 'query-string'; import { isEmpty } from 'lodash'; import GitSyncManager from '../GitSyncManager'; +import LifecycleCTAButton from '../LifecycleCTAButton'; import useStore from '@/AppBuilder/_stores/store'; import PromoteReleaseButton from '@/modules/Appbuilder/components/PromoteReleaseButton'; import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; const RightTopHeaderButtons = ({ isModuleEditor }) => { + const { selectedVersion, selectedEnvironment } = useStore((state) => ({ + selectedVersion: state.selectedVersion, + selectedEnvironment: state.selectedEnvironment, + })); + + const isNotPromotedOrReleased = selectedEnvironment?.name === 'development' && !selectedVersion?.isReleased; + return (
- + {/* */} + {isNotPromotedOrReleased && } + {/* need to review if we need this or not */} {/* {!isModuleEditor && } */}
); }; -const PreviewAndShareIcons = () => { +export const PreviewAndShareIcons = () => { const { moduleId } = useModuleContext(); const { featureAccess, @@ -73,7 +83,7 @@ const PreviewAndShareIcons = () => { return ( <> -
+
{appId && ( ({ + allBranches: state.allBranches, + selectedVersion: state.selectedVersion, + currentBranch: state.currentBranch, + fetchBranches: state.fetchBranches, + switchBranch: state.switchBranch, + switchToDefaultBranch: state.switchToDefaultBranch, + setCurrentBranch: state.setCurrentBranch, + orgGit: state.orgGit, + lazyLoadAppVersions: state.lazyLoadAppVersions, + fetchDevelopmentVersions: state.fetchDevelopmentVersions, + appVersions: state.appVersions, + })); + + const defaultBranchName = orgGit?.git_https?.github_branch || orgGit?.git_ssh?.github_branch || 'main'; + // Determine current branch name: use selectedVersion.name for branches, or default branch name for versions + const currentBranchName = + selectedVersion?.versionType === 'branch' || selectedVersion?.version_type === 'branch' + ? selectedVersion?.name + : selectedVersion?.versionType === 'version' || selectedVersion?.version_type === 'version' + ? defaultBranchName + : currentBranch?.name || defaultBranchName; + + useEffect(() => { + if (show && appId && organizationId) { + setIsLoading(true); + // Fetch branches, versions, and development versions for proper branch switching + Promise.all([ + fetchBranches(appId, organizationId), + lazyLoadAppVersions(appId), + fetchDevelopmentVersions(appId), + ]).finally(() => setIsLoading(false)); + } + }, [show, appId, organizationId, fetchBranches, lazyLoadAppVersions, fetchDevelopmentVersions]); + + // Filter branches: exclude branches that are version names (versionType === 'version') + const filteredBranches = allBranches.filter((branch) => { + // Apply search filter + if (!branch.name.toLowerCase().includes(searchTerm.toLowerCase())) { + return false; + } + + // Check if this branch name corresponds to a version with versionType === 'version' + // If so, exclude it (it's a version name, not an actual branch) + const isVersionName = appVersions?.some( + (v) => v.name === branch.name && (v.versionType === 'version' || v.version_type === 'version') + ); + + // Show the branch only if it's NOT a version name + return !isVersionName; + }); + + const handleBranchClick = async (branch) => { + if (branch.name === currentBranchName) { + onClose(); + return; + } + + try { + // Determine if this is the default branch + const defaultBranchName = orgGit?.git_https?.github_branch || orgGit?.git_ssh?.github_branch || 'main'; + const isDefaultBranch = branch.name === defaultBranchName; + + if (isDefaultBranch) { + // Switch to default branch (finds active draft or latest version) + const result = await switchToDefaultBranch(appId, branch.name); + if (result.success) { + setCurrentBranch(branch); + if (result.isDraft) { + toast.success(`Switched to ${branch.name} - Working on draft version`); + } + onClose(); + } + } else { + // Switch to feature branch + await switchBranch(appId, branch.name); + setCurrentBranch(branch); + onClose(); + } + } catch (error) { + console.error('Error switching branch:', error); + const errorMessage = error?.error || error?.message || 'Failed to switch branch'; + toast.error(errorMessage); + } + }; + + const getRelativeTime = (dateString) => { + if (!dateString) return ''; + const date = new Date(dateString); + const now = new Date(); + const diffMs = now - date; + const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24)); + + if (diffDays === 0) return 'today'; + if (diffDays === 1) return 'yesterday'; + if (diffDays < 7) return `${diffDays} days ago`; + if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`; + return `${Math.floor(diffDays / 30)} months ago`; + }; + + const handleViewInGitRepo = () => { + // Get repository URL from orgGit (check https_url, ssh_url, or repository fields) + const repoUrl = + orgGit?.git_https?.https_url || + orgGit?.git_https?.repository || + orgGit?.git_ssh?.ssh_url || + orgGit?.git_ssh?.repository; + + if (!repoUrl) { + console.error('No repository URL found in orgGit:', orgGit); + toast.error('Git repository URL not available'); + return; + } + + // Extract owner and repo name from URL and construct web URL + // Handles: https://github.com/owner/repo.git, git@github.com:owner/repo.git, etc. + const githubMatch = repoUrl.match(/github\.com[:/]([^/]+)\/(.+?)(\.git)?$/); + const gitlabMatch = repoUrl.match(/gitlab\.com[:/]([^/]+)\/(.+?)(\.git)?$/); + const bitbucketMatch = repoUrl.match(/bitbucket\.org[:/]([^/]+)\/(.+?)(\.git)?$/); + + let webUrl = null; + if (githubMatch) { + const [, owner, repo] = githubMatch; + webUrl = `https://github.com/${owner}/${repo}`; + } else if (gitlabMatch) { + const [, owner, repo] = gitlabMatch; + webUrl = `https://gitlab.com/${owner}/${repo}`; + } else if (bitbucketMatch) { + const [, owner, repo] = bitbucketMatch; + webUrl = `https://bitbucket.org/${owner}/${repo}`; + } else { + // Fallback: try to clean up the URL + webUrl = repoUrl + .replace(/\.git$/, '') + .replace(/^git@/, 'https://') + .replace(/:([^/])/, '/$1'); + } + + if (webUrl) { + window.open(webUrl, '_blank'); + } else { + toast.error('Could not parse repository URL'); + } + }; + + return ( + +
+ {/* Search Section */} +
+ +
+ + setSearchTerm(e.target.value)} + data-cy="branch-search-input" + /> +
+
+ + {/* Branch List */} +
+ {isLoading ? ( +
+
+ Loading branches... +
+ ) : filteredBranches.length === 0 ? ( +
+

No branches found

+
+ ) : ( + filteredBranches.map((branch) => { + const isCurrentBranch = branch.name === currentBranchName; + return ( +
handleBranchClick(branch)} + data-cy={`branch-list-item-${branch.name}`} + > +
+ {isCurrentBranch && } +
+
+
{branch.name}
+
+ Created by {branch.author || branch.created_by || 'default'},{' '} + {getRelativeTime(branch.createdAt || branch.created_at)} +
+
+
+ ); + }) + )} +
+ + {/* Footer Actions */} +
+ + +
+
+ + {/* Create Branch Modal */} + {showCreateModal && ( + setShowCreateModal(false)} + onSuccess={(newBranch) => { + // Optionally switch to the new branch after creation + if (newBranch) { + setCurrentBranch(newBranch); + onClose(); // Close the switch branch modal too + } + }} + /> + )} +
+ ); +} diff --git a/frontend/src/AppBuilder/Header/VersionManager/CreateDraftButton.jsx b/frontend/src/AppBuilder/Header/VersionManager/CreateDraftButton.jsx index 25f8a9e390..54b6f82719 100644 --- a/frontend/src/AppBuilder/Header/VersionManager/CreateDraftButton.jsx +++ b/frontend/src/AppBuilder/Header/VersionManager/CreateDraftButton.jsx @@ -4,11 +4,16 @@ import { ToolTip } from '@/_components/ToolTip'; import { Button } from '@/components/ui/Button/Button'; import './style.scss'; -const CreateDraftButton = ({ onClick, disabled = false, darkMode = false }) => { +const CreateDraftButton = ({ + onClick, + disabled = false, + darkMode = false, + disabledTooltip = 'Draft version can only be created from saved versions.', +}) => { return (
{ developmentVersions, setSelectedVersion, fetchDevelopmentVersions, + orgGit, } = useStore( (state) => ({ appId: state.appId ?? state.appStore.modules[moduleId]?.app?.appId, @@ -48,6 +49,7 @@ const VersionManagerDropdown = ({ darkMode = false, ...props }) => { developmentVersions: state.developmentVersions, fetchDevelopmentVersions: state.fetchDevelopmentVersions, setSelectedVersion: state.setSelectedVersion, + orgGit: state.orgGit, }), shallow ); @@ -122,9 +124,27 @@ const VersionManagerDropdown = ({ darkMode = false, ...props }) => { const hasPublished = versions.some((v) => v.status === 'PUBLISHED'); // Check if there's only one draft and no other saved versions - const draftVersions = developmentVersions.filter((v) => v.status === 'DRAFT'); + // draftVersions are versions of type 'version' (not branches) + const draftVersions = developmentVersions.filter((v) => v.versionType === 'version' && v.status === 'DRAFT'); const savedVersions = developmentVersions.filter((v) => v.status !== 'DRAFT'); - const shouldDisableCreateDraft = draftVersions.length > 0 && savedVersions.length === 0; + const isGitSyncEnabled = orgGit?.git_ssh?.is_enabled || orgGit?.git_https?.is_enabled || orgGit?.git_lab?.is_enabled; + + // Disable create draft logic: + // - Git sync enabled: disable if any draft already exists + // - Git sync disabled: disable if no published versions AND a draft exists (need published version to create from) + const shouldDisableCreateDraft = isGitSyncEnabled + ? draftVersions.length > 0 + : savedVersions.length === 0 && draftVersions.length > 0; + + // Determine tooltip message based on why create draft is disabled + let createDraftDisabledTooltip = ''; + if (shouldDisableCreateDraft) { + if (isGitSyncEnabled) { + createDraftDisabledTooltip = 'Draft version already exists.'; + } else if (savedVersions.length === 0) { + createDraftDisabledTooltip = 'Draft version can only be created from saved versions.'; + } + } // Helper to close dropdown and reset UI state const closeDropdown = () => { @@ -255,6 +275,9 @@ const VersionManagerDropdown = ({ darkMode = false, ...props }) => { ); }; + // Count only actual versions, not sub-branches + const versionOnlyCount = versions.filter((v) => v.versionType === 'version').length; + const renderPopover = (overlayProps) => ( {
{/* Search Field - Only show if more than 5 versions */} - {versions.length > 5 && ( + {versionOnlyCount > 5 && (
@@ -352,7 +375,12 @@ const VersionManagerDropdown = ({ darkMode = false, ...props }) => { {/* Divider */}
- + ); diff --git a/frontend/src/AppBuilder/Header/VersionManager/VersionSearchField.jsx b/frontend/src/AppBuilder/Header/VersionManager/VersionSearchField.jsx index 49f21eb82c..12096e58e2 100644 --- a/frontend/src/AppBuilder/Header/VersionManager/VersionSearchField.jsx +++ b/frontend/src/AppBuilder/Header/VersionManager/VersionSearchField.jsx @@ -7,7 +7,6 @@ const VersionSearchField = ({ value, onChange, placeholder = 'Search versions by
div { + >div { pointer-events: none; } } -.create-draft-button-tooltip{ -display: flex; -.tooltip-inner{ - width: 323px !important; + +.create-draft-button-tooltip { + display: flex; + + .tooltip-inner { + max-width: 323px !important; + width: auto !important; } } \ No newline at end of file diff --git a/frontend/src/AppBuilder/Header/VersionManager/version-switcher-button.scss b/frontend/src/AppBuilder/Header/VersionManager/version-switcher-button.scss index ea194a96e4..55e493f13d 100644 --- a/frontend/src/AppBuilder/Header/VersionManager/version-switcher-button.scss +++ b/frontend/src/AppBuilder/Header/VersionManager/version-switcher-button.scss @@ -82,4 +82,4 @@ text-overflow: ellipsis; white-space: nowrap; } -} +} \ No newline at end of file diff --git a/frontend/src/AppBuilder/LeftSidebar/LeftSidebarInspector/useCallbackActions.js b/frontend/src/AppBuilder/LeftSidebar/LeftSidebarInspector/useCallbackActions.js index cd3d4f655b..442a539e84 100644 --- a/frontend/src/AppBuilder/LeftSidebar/LeftSidebarInspector/useCallbackActions.js +++ b/frontend/src/AppBuilder/LeftSidebar/LeftSidebarInspector/useCallbackActions.js @@ -2,12 +2,14 @@ import { toast } from 'react-hot-toast'; import useStore from '@/AppBuilder/_stores/store'; import { shallow } from 'zustand/shallow'; import { copyToClipboard } from './utils'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; const useCallbackActions = () => { + const { isModuleEditor } = useModuleContext(); const deleteComponents = useStore((state) => state.deleteComponents, shallow); const setSelectedComponents = useStore((state) => state.setSelectedComponents, shallow); const currentPageComponents = useStore((state) => state?.getCurrentPageComponents(), shallow); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const runQuery = useStore((state) => state.queryPanel.runQuery); const getComponentIdToAutoScroll = useStore((state) => state.getComponentIdToAutoScroll); const setSelectedQuery = useStore((state) => state.queryPanel.setSelectedQuery, shallow); diff --git a/frontend/src/AppBuilder/QueryManager/Components/QueryManagerBody.jsx b/frontend/src/AppBuilder/QueryManager/Components/QueryManagerBody.jsx index f5b430e024..88531855aa 100644 --- a/frontend/src/AppBuilder/QueryManager/Components/QueryManagerBody.jsx +++ b/frontend/src/AppBuilder/QueryManager/Components/QueryManagerBody.jsx @@ -22,9 +22,11 @@ import { EventManager } from '@/AppBuilder/RightSideBar/Inspector/EventManager'; import NotificationBanner from '@/_components/NotificationBanner'; import { withEditionSpecificComponent } from '@/modules/common/helpers/withEditionSpecificComponent'; import CodeHinter from '@/AppBuilder/CodeEditor'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; export const BaseQueryManagerBody = ({ darkMode, activeTab, renderCopilot = () => null }) => { const { t } = useTranslation(); + const { isModuleEditor } = useModuleContext(); const dataSources = useStore((state) => state.dataSources); const globalDataSources = useStore((state) => state.globalDataSources); const sampleDataSource = useStore((state) => state.sampleDataSource); @@ -50,7 +52,7 @@ export const BaseQueryManagerBody = ({ darkMode, activeTab, renderCopilot = () = const ElementToRender = selectedDataSource?.plugin_id ? source : allSources[sourcecomponentName]; const defaultOptions = useRef({}); - const isFreezed = useStore((state) => state.getShouldFreeze()); + const isFreezed = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); useEffect(() => { setDataSourceMeta( diff --git a/frontend/src/AppBuilder/QueryManager/Components/QueryManagerHeader.jsx b/frontend/src/AppBuilder/QueryManager/Components/QueryManagerHeader.jsx index 8d018f9eb4..7cb5cc9db8 100644 --- a/frontend/src/AppBuilder/QueryManager/Components/QueryManagerHeader.jsx +++ b/frontend/src/AppBuilder/QueryManager/Components/QueryManagerHeader.jsx @@ -17,7 +17,7 @@ import posthogHelper from '@/modules/common/helpers/posthogHelper'; import { useAppDataStore } from '@/_stores/appDataStore'; export const QueryManagerHeader = forwardRef(({ darkMode, setActiveTab, activeTab }, ref) => { - const { moduleId } = useModuleContext(); + const { moduleId, isModuleEditor } = useModuleContext(); const updateQuerySuggestions = useStore((state) => state.queryPanel.updateQuerySuggestions); const previewQuery = useStore((state) => state.queryPanel.previewQuery); const renameQuery = useStore((state) => state.dataQuery.renameQuery); @@ -27,7 +27,7 @@ export const QueryManagerHeader = forwardRef(({ darkMode, setActiveTab, activeTa const showCreateQuery = useStore((state) => state.queryPanel.showCreateQuery); const setShowCreateQuery = useStore((state) => state.queryPanel.setShowCreateQuery); const queryName = selectedQuery?.name ?? ''; - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); useEffect(() => { if (selectedQuery?.name) { @@ -154,7 +154,8 @@ export const QueryManagerHeader = forwardRef(({ darkMode, setActiveTab, activeTa }); const NameInput = ({ onInput, value, darkMode, isDiabled, selectedQuery }) => { - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const { isModuleEditor } = useModuleContext(); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const isFocused = useStore((state) => state.queryPanel.nameInputFocused, shallow); const setIsFocused = useStore((state) => state.queryPanel.setNameInputFocused, shallow); const [name, setName] = useState(value); diff --git a/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx b/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx index 36d83ff913..242da1a4ed 100644 --- a/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx +++ b/frontend/src/AppBuilder/QueryPanel/QueryCard.jsx @@ -8,6 +8,7 @@ import DataSourceIcon from '../QueryManager/Components/DataSourceIcon'; import { isQueryRunnable, decodeEntities } from '@/_helpers/utils'; import { canDeleteDataSource, canReadDataSource, canUpdateDataSource } from '@/_helpers'; import useStore from '@/AppBuilder/_stores/store'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; //TODO: Remove this import { Confirm } from '@/AppBuilder/Viewer/Confirm'; // TODO: enable delete query confirmation popup @@ -16,6 +17,7 @@ import SolidIcon from '@/_ui/Icon/SolidIcons'; import { QueryRenameInput } from './QueryRenameInput'; export const QueryCard = ({ dataQuery, darkMode = false, localDs }) => { + const { isModuleEditor } = useModuleContext(); const queryNameEleRef = useRef(null); const isQuerySelected = useStore((state) => state.queryPanel.isQuerySelected(dataQuery.id), shallow); @@ -26,7 +28,7 @@ export const QueryCard = ({ dataQuery, darkMode = false, localDs }) => { const renameQuery = useStore((state) => state.dataQuery.renameQuery); const deleteDataQueries = useStore((state) => state.dataQuery.deleteDataQueries); const setPreviewData = useStore((state) => state.queryPanel.setPreviewData); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const renamingQueryId = useStore((state) => state.queryPanel.renamingQueryId); const deletingQueryId = useStore((state) => state.queryPanel.deletingQueryId); diff --git a/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx b/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx index 1854779627..09a0b75db6 100644 --- a/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx +++ b/frontend/src/AppBuilder/QueryPanel/QueryDataPane.jsx @@ -17,6 +17,7 @@ import DataSourceSelect from '../QueryManager/Components/DataSourceSelect'; import { OverlayTrigger, Popover } from 'react-bootstrap'; import FolderEmpty from '@/_ui/Icon/solidIcons/FolderEmpty'; import useStore from '@/AppBuilder/_stores/store'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; import AppPermissionsModal from '@/modules/Appbuilder/components/AppPermissionsModal'; import { shallow } from 'zustand/shallow'; import { appPermissionService } from '@/_services'; @@ -45,7 +46,8 @@ export const QueryDataPane = ({ darkMode }) => { const showQueryPermissionModal = useStore((state) => state.queryPanel.showQueryPermissionModal); const toggleQueryPermissionModal = useStore((state) => state.queryPanel.toggleQueryPermissionModal); const setQueries = useStore((state) => state.dataQuery.setQueries); - const isFreezed = useStore((state) => state.getShouldFreeze()); + const { isModuleEditor } = useModuleContext(); + const isFreezed = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); useEffect(() => { setQueryPanelSearchTerm(searchTermForFilters); @@ -241,9 +243,10 @@ const EmptyDataSource = () => ( ); const AddDataSourceButton = ({ darkMode, disabled: _disabled }) => { + const { isModuleEditor } = useModuleContext(); const [showMenu, setShowMenu] = useShowPopover(false, '#query-add-ds-popover', '#query-add-ds-popover-btn'); const selectRef = useRef(); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); // const { isVersionReleased, isEditorFreezed } = useStore( // (state) => ({ // isVersionReleased: state.isVersionReleased, diff --git a/frontend/src/AppBuilder/RightSideBar/ComponentManagerTab/ComponentsManagerTab.jsx b/frontend/src/AppBuilder/RightSideBar/ComponentManagerTab/ComponentsManagerTab.jsx index 12207aa80c..ddeb3e035e 100644 --- a/frontend/src/AppBuilder/RightSideBar/ComponentManagerTab/ComponentsManagerTab.jsx +++ b/frontend/src/AppBuilder/RightSideBar/ComponentManagerTab/ComponentsManagerTab.jsx @@ -66,7 +66,7 @@ export const ComponentsManagerTab = ({ darkMode, isModuleEditor }) => { const [searchQuery, setSearchQuery] = useState(''); const [moduleError, setModuleError] = useState(false); const [activeTab, setActiveTab] = useState('components'); - const _shouldFreeze = useStore((state) => state.getShouldFreeze()); + const _shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const isAutoMobileLayout = useStore((state) => state.currentLayout === 'mobile' && state.getIsAutoMobileLayout()); const shouldFreeze = _shouldFreeze || isAutoMobileLayout; const edition = fetchEdition(); diff --git a/frontend/src/AppBuilder/RightSideBar/Inspector/Inspector.jsx b/frontend/src/AppBuilder/RightSideBar/Inspector/Inspector.jsx index d0021ecd8e..cb25f681ce 100644 --- a/frontend/src/AppBuilder/RightSideBar/Inspector/Inspector.jsx +++ b/frontend/src/AppBuilder/RightSideBar/Inspector/Inspector.jsx @@ -56,6 +56,7 @@ import { Navigation } from './Components/Navigation'; import { v4 as uuidv4 } from 'uuid'; import { Button } from '@/components/ui/Button/Button'; import { TreeSelect } from './Components/TreeSelect/TreeSelect.jsx'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; import '../ComponentManagerTab/styles.scss'; const INSPECTOR_HEADER_OPTIONS = [ @@ -157,10 +158,11 @@ export const Inspector = ({ selectedComponentId, handleRightSidebarToggle, }) => { + const { isModuleEditor } = useModuleContext(); const allComponents = useStore((state) => state.getCurrentPageComponents()); const setComponentProperty = useStore((state) => state.setComponentProperty, shallow); const setComponentName = useStore((state) => state.setComponentName, shallow); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const clearSelectedComponents = useStore((state) => state.clearSelectedComponents, shallow); const isVersionReleased = useStore((state) => state.isVersionReleased); const setWidgetDeleteConfirmation = useStore((state) => state.setWidgetDeleteConfirmation); @@ -448,7 +450,7 @@ export const Inspector = ({ setTimeout(() => setInputFocus(), 0); } if (value === 'delete') { - setWidgetDeleteConfirmation(true); + setWidgetDeleteConfirmation(true, isModuleEditor); } if (value === 'permission') { if (!hasAppPermissionComponent) return; diff --git a/frontend/src/AppBuilder/RightSideBar/RightSideBar.jsx b/frontend/src/AppBuilder/RightSideBar/RightSideBar.jsx index 631a49844e..060f6f8df3 100644 --- a/frontend/src/AppBuilder/RightSideBar/RightSideBar.jsx +++ b/frontend/src/AppBuilder/RightSideBar/RightSideBar.jsx @@ -9,7 +9,7 @@ import { RIGHT_SIDE_BAR_TAB } from './rightSidebarConstants'; export const RightSideBar = ({ darkMode }) => { const { isModuleEditor } = useModuleContext(); - const shouldFreeze = useStore((state) => state.getShouldFreeze()); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const activeTab = useStore((state) => state.activeRightSideBarTab); const isRightSidebarOpen = useStore((state) => state.isRightSidebarOpen); diff --git a/frontend/src/AppBuilder/_stores/slices/appVersionSlice.js b/frontend/src/AppBuilder/_stores/slices/appVersionSlice.js index 003eee0fb1..7e040f260f 100644 --- a/frontend/src/AppBuilder/_stores/slices/appVersionSlice.js +++ b/frontend/src/AppBuilder/_stores/slices/appVersionSlice.js @@ -60,7 +60,8 @@ export const createAppVersionSlice = (set, get) => ({ setAppVersionPromoted: (value) => set(() => ({ isAppVersionPromoted: value }), false, 'setAppVersionPromoted'), - getShouldFreeze: (skipIsEditorFreezedCheck = false) => { + getShouldFreeze: (skipIsEditorFreezedCheck = false, isModuleEditor = false) => { + if (isModuleEditor) return false; return ( get().isVersionReleased || (!skipIsEditorFreezedCheck && get().isEditorFreezed) || diff --git a/frontend/src/AppBuilder/_stores/slices/branchSlice.js b/frontend/src/AppBuilder/_stores/slices/branchSlice.js new file mode 100644 index 0000000000..21b16dca0d --- /dev/null +++ b/frontend/src/AppBuilder/_stores/slices/branchSlice.js @@ -0,0 +1,565 @@ +import { gitSyncService } from '@/_services'; +import useStore from '@/AppBuilder/_stores/store'; + +const initialState = { + currentBranch: null, + allBranches: [], + pullRequests: [], + branchingEnabled: false, + isDraftVersionActive: false, + isLoadingBranches: false, + isLoadingPRs: false, + branchError: null, +}; + +export const createBranchSlice = (set, get) => ({ + ...initialState, + + /** + * Fetch all branches for the current app + * @param {string} appId - Application ID + * @param {string} organizationId - Organization ID + */ + fetchBranches: async (appId, organizationId) => { + set(() => ({ isLoadingBranches: true, branchError: null }), false, 'fetchBranches:start'); + + try { + const response = await gitSyncService.getAllBranches(appId, organizationId); + const branches = response?.branches || []; + + // Only set default branch if current version is a branch type + // If selectedVersion is a regular version (not a branch), keep currentBranch as null + const selectedVersion = useStore.getState().selectedVersion; + const isOnBranch = selectedVersion?.versionType === 'branch' || selectedVersion?.version_type === 'branch'; + + let defaultBranch = get().currentBranch; + if (isOnBranch) { + const matchingBranch = branches.find((b) => b.name === selectedVersion.name); + if (matchingBranch) { + defaultBranch = matchingBranch; + } else if (!defaultBranch && branches.length) { + defaultBranch = + branches.find((b) => b.name === 'main') || branches.find((b) => b.name === 'master') || branches[0]; + } + } + + set( + () => ({ + allBranches: branches, + isLoadingBranches: false, + currentBranch: isOnBranch ? defaultBranch || null : null, + }), + false, + 'fetchBranches:success' + ); + + return { success: true, branches }; + } catch (error) { + console.error('Error fetching branches:', error); + set( + () => ({ + isLoadingBranches: false, + branchError: error.message || 'Failed to fetch branches', + }), + false, + 'fetchBranches:error' + ); + + return { success: false, error: error.message }; + } + }, + + /** + * Create a new branch + * @param {string} appId - Application ID + * @param {string} organizationId - Organization ID + * @param {object} branchData - { branchName, versionFromId, baseBranch, autoCommit } + */ + createBranch: async (appId, organizationId, branchData) => { + set(() => ({ branchError: null }), false, 'createBranch:start'); + + // Check for draft version before creating + const isDraft = get().checkDraftStatus(); + if (isDraft && !branchData.force) { + return { + success: false, + error: 'DRAFT_EXISTS', + message: 'You can only have one draft version at a time. Please save or release your current draft first.', + }; + } + + try { + const response = await gitSyncService.createBranch(appId, organizationId, { + branchName: branchData.branchName, + versionFromId: branchData.versionFromId, + baseBranch: branchData.baseBranch || 'main', // Default to 'main' if not provided + autoCommit: branchData.autoCommit || false, + }); + + // Refresh branches list after creation + await get().fetchBranches(appId, organizationId); + + // Update current branch if successful + if (response?.branch) { + set( + () => ({ + currentBranch: response.branch, + }), + false, + 'createBranch:success' + ); + } + + return { success: true, branch: response?.branch }; + } catch (error) { + const apiErrorMessage = error?.data?.message || error?.error || error?.message || 'Failed to create branch'; + + set( + () => ({ + branchError: apiErrorMessage, + }), + false, + 'createBranch:error' + ); + + return { success: false, error: apiErrorMessage }; + } + }, + + /** + * Switch to a different branch (changes the editing version to the branch version) + * Branches are represented as versions with versionType === 'branch' + * IMPORTANT: Branches always work in Development environment, so we switch to Development first + * @param {string} appId - Application ID + * @param {string} branchName - Target branch name + */ + switchBranch: async (appId, branchName) => { + set(() => ({ branchError: null }), false, 'switchBranch:start'); + + try { + const state = get(); + + // Get Development environment - branches ALWAYS work in Development + const developmentEnv = state.environments?.find((env) => env.name === 'Development' || env.priority === 1); + if (!developmentEnv) { + throw new Error('Development environment not found'); + } + + // Get development versions to find the branch version + const developmentVersions = state.developmentVersions || []; + const branchVersion = developmentVersions.find( + (version) => + (version.versionType === 'branch' || version.version_type === 'branch') && version.name === branchName + ); + + if (!branchVersion) { + // Check if branch exists in allBranches but not as a version + const branchExists = state.allBranches.find((b) => b.name === branchName); + if (branchExists) { + throw new Error( + `Branch "${branchName}" exists in Git but has no corresponding version. You may need to create this branch in ToolJet first.` + ); + } + + const availableBranches = developmentVersions + .filter((v) => v.versionType === 'branch' || v.version_type === 'branch') + .map((v) => v.name) + .join(', '); + throw new Error( + `Branch version not found: ${branchName}. Available branch versions: ${availableBranches || 'none'}` + ); + } + + // Check if already on this branch version AND in Development environment + const alreadyOnVersion = state.selectedVersion?.id === branchVersion.id; + const alreadyInDevelopment = state.selectedEnvironment?.id === developmentEnv.id; + + if (alreadyOnVersion && alreadyInDevelopment) { + return { success: true, data: state.selectedVersion }; + } + + // Update current branch first + const targetBranch = state.allBranches.find((b) => b.name === branchName) || { name: branchName }; + set( + (state) => ({ + ...state, + currentBranch: targetBranch, + }), + false, + 'switchBranch:updating-branch' + ); + + // Switch to branch version (and Development environment if needed) + return new Promise((resolve, reject) => { + // If not in Development environment, switch to it first + if (!alreadyInDevelopment) { + state.environmentChangedAction(developmentEnv, () => { + // After environment switch, change to the branch version + state.changeEditorVersionAction( + appId, + branchVersion.id, + (data) => { + state.setCurrentVersionId(branchVersion.id); + state.setSelectedVersion(branchVersion); + resolve({ success: true, data }); + }, + (error) => { + console.error('switchBranch - error after environment change:', error); + set( + () => ({ branchError: error.message || 'Failed to switch to branch' }), + false, + 'switchBranch:error' + ); + reject({ success: false, error: error.message }); + } + ); + }); + } else { + // Already in Development, just switch to branch version + state.changeEditorVersionAction( + appId, + branchVersion.id, + (data) => { + state.setCurrentVersionId(branchVersion.id); + state.setSelectedVersion(branchVersion); + resolve({ success: true, data }); + }, + (error) => { + console.error('switchBranch - error switching version:', error); + set(() => ({ branchError: error.message || 'Failed to switch to branch' }), false, 'switchBranch:error'); + reject({ success: false, error: error.message }); + } + ); + } + }); + } catch (error) { + console.error('Error switching branch:', error); + set( + () => ({ + branchError: error.message || 'Failed to switch branch', + }), + false, + 'switchBranch:error' + ); + + throw error; // Re-throw to be caught by the modal + } + }, + + /** + * Switch to the default branch (main/master/configured branch) + * + * This function mimics the behavior of the version dropdown's handleVersionSelect (line 144): + * 1. Switch to Development environment first (if not already there) + * 2. Determine which version to switch to based on PRD scenarios + * 3. Call changeEditorVersionAction to load version data + * 4. Update currentBranch and selectedVersion + * + * Version Selection Logic (Based on PRD Scenarios): + * PRIORITY 1: DRAFT version (latest draft if multiple exist - v3 draft > v2.1 draft) + * PRIORITY 2: RELEASED version (latest released - v2 > v1) + * PRIORITY 3: PUBLISHED/Saved version (latest published) + * + * @param {string} appId - Application ID + * @param {string} defaultBranchName - Name of the default branch (from git config) + */ + switchToDefaultBranch: async (appId, defaultBranchName) => { + set(() => ({ branchError: null }), false, 'switchToDefaultBranch:start'); + + try { + const state = get(); + + // Get feature branch names (exclude default branch) to help with filtering + const featureBranchNames = state.allBranches.filter((b) => b.name !== defaultBranchName).map((b) => b.name); + + // Branches always work in Development environment - ALWAYS use developmentVersions + // This matches the PRD scenarios where all branch work happens in Development + const developmentVersions = state.developmentVersions || []; + + // Filter to get ONLY default branch versions (exclude branch-type versions) + // A version is a default branch version if it does NOT have versionType === 'branch' + // We rely on versionType field to distinguish branch versions from regular versions + const defaultBranchVersions = developmentVersions.filter((v) => { + const hasBranchType = v.versionType === 'branch' || v.version_type === 'branch'; + + // Only exclude if it has branch type - keep all versions with versionType === 'version' + return !hasBranchType; + }); + + // Version selection priority (PRD Scenarios 1-4) + let targetVersion = null; + + // PRIORITY 1: DRAFT version (Scenarios 1, 2, 3, 4) + // Get LATEST draft (most recently created) if multiple exist + const draftVersions = defaultBranchVersions + .filter((v) => v.status === 'DRAFT' || v.isDraft || v.is_draft) + .sort((a, b) => { + const dateA = new Date(a.createdAt || a.created_at || 0); + const dateB = new Date(b.createdAt || b.created_at || 0); + return dateB - dateA; // Descending - latest first + }); + + targetVersion = draftVersions[0]; + + // PRIORITY 2: RELEASED version (Scenario 2 - when no draft exists after v1 released) + if (!targetVersion) { + const releasedVersions = defaultBranchVersions + .filter((v) => v.status === 'RELEASED' || v.isReleased || v.is_released) + .sort((a, b) => { + const dateA = new Date(a.createdAt || a.created_at || 0); + const dateB = new Date(b.createdAt || b.created_at || 0); + return dateB - dateA; // Latest released + }); + + targetVersion = releasedVersions[0]; + } + + // PRIORITY 3: PUBLISHED version (fallback) + if (!targetVersion) { + const publishedVersions = defaultBranchVersions + .filter((v) => v.status === 'PUBLISHED' || v.isPublished || v.is_published) + .sort((a, b) => { + const dateA = new Date(a.createdAt || a.created_at || 0); + const dateB = new Date(b.createdAt || b.created_at || 0); + return dateB - dateA; + }); + + targetVersion = publishedVersions[0]; + } + + // If no version found, error + if (!targetVersion) { + console.error('switchToDefaultBranch - no versions found!'); + console.error('switchToDefaultBranch - developmentVersions:', developmentVersions); + console.error('switchToDefaultBranch - defaultBranchVersions:', defaultBranchVersions); + throw new Error('No versions found for the default branch. Please create a version first.'); + } + + // Get Development environment + const developmentEnv = state.environments?.find((env) => env.name === 'Development' || env.priority === 1); + if (!developmentEnv) { + throw new Error('Development environment not found'); + } + + // Check if already on this version AND in Development environment + const alreadyOnVersion = state.selectedVersion?.id === targetVersion.id; + const alreadyInDevelopment = state.selectedEnvironment?.id === developmentEnv.id; + + if (alreadyOnVersion && alreadyInDevelopment) { + const defaultBranch = state.allBranches.find((b) => b.name === defaultBranchName) || { + name: defaultBranchName, + }; + + set( + (state) => ({ + ...state, + currentBranch: defaultBranch, + }), + false, + 'switchToDefaultBranch:already-on-version' + ); + + return { success: true, data: state.selectedVersion, version: targetVersion }; + } + + // Update current branch first + const defaultBranch = state.allBranches.find((b) => b.name === defaultBranchName) || { + name: defaultBranchName, + }; + + set( + (state) => ({ + ...state, + currentBranch: defaultBranch, + }), + false, + 'switchToDefaultBranch:updating-branch' + ); + + // EXACTLY MATCH handleVersionSelect behavior (line 144 in VersionManagerDropdown.jsx) + return new Promise((resolve, reject) => { + // If not in Development environment, switch to it first (like handleVersionSelect does) + if (!alreadyInDevelopment) { + state.environmentChangedAction(developmentEnv, () => { + // After environment switch, change the version + state.changeEditorVersionAction( + appId, + targetVersion.id, + (data) => { + state.setCurrentVersionId(targetVersion.id); + resolve({ success: true, data, version: targetVersion }); + }, + (error) => { + console.error('switchToDefaultBranch - error after environment change:', error); + set( + () => ({ branchError: error.message || 'Failed to switch version' }), + false, + 'switchToDefaultBranch:error' + ); + reject({ success: false, error: error.message }); + } + ); + }); + } else { + // Already in Development, just switch version (like handleVersionSelect does) + state.changeEditorVersionAction( + appId, + targetVersion.id, + (data) => { + state.setCurrentVersionId(targetVersion.id); + state.setSelectedVersion(targetVersion); + resolve({ success: true, data, version: targetVersion }); + }, + (error) => { + console.error('switchToDefaultBranch - error switching version:', error); + set( + () => ({ branchError: error.message || 'Failed to switch version' }), + false, + 'switchToDefaultBranch:error' + ); + reject({ success: false, error: error.message }); + } + ); + } + }); + } catch (error) { + console.error('Error switching to default branch:', error); + set( + () => ({ + branchError: error.message || 'Failed to switch to default branch', + }), + false, + 'switchToDefaultBranch:error' + ); + + throw error; + } + }, + + /** + * Fetch pull requests for the current app + * @param {string} appId - Application ID + */ + fetchPullRequests: async (appId, organizationId) => { + set(() => ({ isLoadingPRs: true, branchError: null }), false, 'fetchPullRequests:start'); + + try { + const response = await gitSyncService.getPullRequests(appId, organizationId); + const pullRequests = response?.pull_requests || []; + + set( + () => ({ + pullRequests, + isLoadingPRs: false, + }), + false, + 'fetchPullRequests:success' + ); + + return { success: true, pullRequests }; + } catch (error) { + console.error('Error fetching pull requests:', error); + set( + () => ({ + isLoadingPRs: false, + branchError: error.message || 'Failed to fetch pull requests', + }), + false, + 'fetchPullRequests:error' + ); + + return { success: false, error: error.message }; + } + }, + + /** + * Check if a draft version is currently active + * @returns {boolean} True if draft version exists + */ + checkDraftStatus: () => { + const appVersions = get().appVersions || []; + const hasDraft = appVersions.some((version) => version.isDraft || version.is_draft); + + set( + () => ({ + isDraftVersionActive: hasDraft, + }), + false, + 'checkDraftStatus' + ); + + return hasDraft; + }, + + /** + * Update branching enabled status + * @param {boolean} enabled - Whether branching is enabled + */ + updateBranchingEnabled: (enabled) => + set( + () => ({ + branchingEnabled: enabled, + }), + false, + 'updateBranchingEnabled' + ), + + /** + * Set current branch + * @param {object} branch - Branch object + */ + setCurrentBranch: (branch) => + set( + () => ({ + currentBranch: branch, + }), + false, + 'setCurrentBranch' + ), + + /** + * Clear branch error + */ + clearBranchError: () => + set( + () => ({ + branchError: null, + }), + false, + 'clearBranchError' + ), + + /** + * Reset branch slice to initial state + */ + resetBranchSlice: () => + set( + () => ({ + ...initialState, + }), + false, + 'resetBranchSlice' + ), + + /** + * Get PR status for a specific branch + * @param {string} branchName - Branch name + * @returns {object|null} PR object or null + */ + getPRForBranch: (branchName) => { + const pullRequests = get().pullRequests; + return pullRequests.find((pr) => pr.source_branch === branchName || pr.sourceBranch === branchName) || null; + }, + + /** + * Check if branch is readonly (merged or released) + * @param {string} branchName - Branch name + * @returns {boolean} True if branch is readonly + */ + isBranchReadonly: (branchName) => { + const branch = get().allBranches.find((b) => b.name === branchName); + if (!branch) return false; + + return branch.is_merged || branch.isMerged || branch.is_released || branch.isReleased || false; + }, +}); diff --git a/frontend/src/AppBuilder/_stores/slices/componentsSlice.js b/frontend/src/AppBuilder/_stores/slices/componentsSlice.js index 618282157b..f63c3eeaeb 100644 --- a/frontend/src/AppBuilder/_stores/slices/componentsSlice.js +++ b/frontend/src/AppBuilder/_stores/slices/componentsSlice.js @@ -43,6 +43,7 @@ const initialState = { }, selectedComponents: [], showWidgetDeleteConfirmation: false, + deleteTargetIsModuleEditor: false, focusedParentId: null, modalsOpenOnCanvas: [], showComponentPermissionModal: false, @@ -1203,7 +1204,7 @@ export const createComponentsSlice = (set, get) => ({ deleteComponents: ( selected, moduleId = 'canvas', - { skipUndoRedo = false, saveAfterAction = true, isCut = false, skipFormUpdate = false } = {} + { skipUndoRedo = false, saveAfterAction = true, isCut = false, skipFormUpdate = false, isModuleEditor = false } = {} ) => { const { saveComponentChanges, @@ -1222,7 +1223,7 @@ export const createComponentsSlice = (set, get) => ({ getCurrentPageIndex, } = get(); const isAppBeingEditedByAI = get().ai?.isLoading ?? false; - const shouldFreeze = getShouldFreeze(isAppBeingEditedByAI); + const shouldFreeze = getShouldFreeze(isAppBeingEditedByAI, isModuleEditor); const currentPageId = getCurrentPageId(moduleId); const appEvents = get().eventsSlice.getModuleEvents(moduleId); const componentNames = []; @@ -2015,9 +2016,10 @@ export const createComponentsSlice = (set, get) => ({ await savePageChanges(app.appId, currentVersionId, currentPageId, { autoComputeLayout: false }); }, - setWidgetDeleteConfirmation: (value) => { + setWidgetDeleteConfirmation: (value, isModuleEditor = false) => { set((state) => { state.showWidgetDeleteConfirmation = value; + if (value) state.deleteTargetIsModuleEditor = isModuleEditor; }); }, diff --git a/frontend/src/AppBuilder/_stores/slices/environmentsAndVersionsSlice.js b/frontend/src/AppBuilder/_stores/slices/environmentsAndVersionsSlice.js index 61466d7d5f..e8c56e8ecf 100644 --- a/frontend/src/AppBuilder/_stores/slices/environmentsAndVersionsSlice.js +++ b/frontend/src/AppBuilder/_stores/slices/environmentsAndVersionsSlice.js @@ -22,6 +22,8 @@ const initialState = { developmentVersions: [], draftVersions: [], publishedVersions: [], + draftVersions: [], + publishedVersions: [], environmentLoadingState: 'completed', isPublicAccess: false, }; @@ -134,16 +136,25 @@ export const createEnvironmentsAndVersionsSlice = (set, get) => ({ ); } - set((state) => ({ - ...state, - selectedEnvironment, - selectedVersion: response.editorVersion, - appVersionEnvironment: response.appVersionEnvironment, - shouldRenderPromoteButton: response.shouldRenderPromoteButton, - shouldRenderReleaseButton: response.shouldRenderReleaseButton, - environments: response.environments, - versionsPromotedToEnvironment: [response.editorVersion], - })); + set((state) => { + const stateUpdate = { + ...state, + selectedEnvironment, + selectedVersion: response.editorVersion, + appVersionEnvironment: response.appVersionEnvironment, + shouldRenderPromoteButton: response.shouldRenderPromoteButton, + shouldRenderReleaseButton: response.shouldRenderReleaseButton, + environments: response.environments, + versionsPromotedToEnvironment: [response.editorVersion], + }; + + // Clear currentBranch if initial version is not a branch + const versionType = response.editorVersion?.versionType || response.editorVersion?.version_type; + if (versionType !== 'branch') { + stateUpdate.currentBranch = null; + } + return stateUpdate; + }); } catch (error) { console.error('❌ DEBUG - Error while initializing the environment dropdown', error); } @@ -223,7 +234,8 @@ export const createEnvironmentsAndVersionsSlice = (set, get) => ({ selectedVersionId, versionDescription = '', onSuccess, - onFailure + onFailure, + versionType = 'version' ) => { try { const editorEnvironment = get().selectedEnvironment.id; @@ -232,7 +244,8 @@ export const createEnvironmentsAndVersionsSlice = (set, get) => ({ versionName, versionDescription, selectedVersionId, - editorEnvironment + editorEnvironment, + versionType ); const editorVersion = { id: newVersion.id, @@ -336,6 +349,8 @@ export const createEnvironmentsAndVersionsSlice = (set, get) => ({ name: data.editing_version.name, current_environment_id: data.editing_version.currentEnvironmentId, status: data.editing_version.status, + // Preserve versionType from API response to distinguish between regular versions and branch versions + versionType: data.editing_version.versionType || data.editing_version.version_type || 'version', }; const appVersionEnvironment = get().environments.find( (environment) => environment.id === selectedVersion.current_environment_id @@ -356,6 +371,12 @@ export const createEnvironmentsAndVersionsSlice = (set, get) => ({ useStore.getState()?.license?.featureAccess ), }; + + // Clear currentBranch if switching to a regular version (not a branch) + if (selectedVersion.versionType !== 'branch') { + optionsToUpdate.currentBranch = null; + } + set((state) => ({ ...state, ...optionsToUpdate })); onSuccess(data); } catch (error) { diff --git a/frontend/src/AppBuilder/_stores/slices/gitSyncSlice.js b/frontend/src/AppBuilder/_stores/slices/gitSyncSlice.js index 1e597d0f0e..05f5630649 100644 --- a/frontend/src/AppBuilder/_stores/slices/gitSyncSlice.js +++ b/frontend/src/AppBuilder/_stores/slices/gitSyncSlice.js @@ -16,9 +16,9 @@ export const createGitSyncSlice = (set, get) => ({ const selectedEnvironment = useStore.getState()?.selectedEnvironment; const isEditorFreezed = useStore.getState()?.isEditorFreezed; - return featureAccess?.gitSync && selectedEnvironment?.priority === 1 && (creationMode === 'GIT' || !isEditorFreezed) + return featureAccess?.gitSync && selectedEnvironment?.priority === 1 ? set((state) => ({ showGitSyncModal: !state.showGitSyncModal }), false, 'toggleGitSyncModal') - : () => { }; + : () => {}; }, fetchAppGit: async (currentOrganizationId, currentAppVersionId) => { set((state) => ({ appLoading: true }), false, 'setAppLoading'); @@ -26,18 +26,23 @@ export const createGitSyncSlice = (set, get) => ({ const data = await gitSyncService.getAppGitConfigs(currentOrganizationId, currentAppVersionId); const allowEditing = data?.app_git?.allow_editing ?? false; const orgGit = data?.app_git?.org_git; + const isBranchingEnabled = orgGit?.is_branching_enabled ?? false; const appGit = data?.app_git; - const isGitSyncConfigured = data?.app_git?.is_git_sync_configured - set((state) => ({ isGitSyncConfigured }), false, 'isGitSyncConfigured') + set((state) => ({ appGit }), false, 'setAppGit'); + const isGitSyncConfigured = data?.app_git?.is_git_sync_configured; + // Update branchingEnabled in branchSlice + get().updateBranchingEnabled?.(isBranchingEnabled); + set((state) => ({ isGitSyncConfigured }), false, 'isGitSyncConfigured'); set((state) => ({ orgGit }), false, 'setOrgGit'); set((state) => ({ appGit }), false, 'setAppGit'); set((state) => ({ allowEditing }), false, 'setAllowEditing'); - console.log('app git', appGit); return allowEditing; } catch (error) { console.error('Failed to fetch app git configs:', error); // Set allowEditing to false on error set((state) => ({ allowEditing: false }), false, 'setAllowEditing'); + // Also reset branching on error + get().updateBranchingEnabled?.(false); return false; } finally { set((state) => ({ appLoading: false }), false, 'setAppLoading'); @@ -45,5 +50,5 @@ export const createGitSyncSlice = (set, get) => ({ }, setAppGit(appGit) { set((state) => ({ appGit: appGit }), false, 'setAppGit'); - } + }, }); diff --git a/frontend/src/AppBuilder/_stores/store.js b/frontend/src/AppBuilder/_stores/store.js index a6d9890717..ea0fbd4278 100644 --- a/frontend/src/AppBuilder/_stores/store.js +++ b/frontend/src/AppBuilder/_stores/store.js @@ -33,6 +33,7 @@ import { createFormComponentSlice } from './slices/componentSlices/formComponent import { createInspectorSlice } from './slices/inspectorSlice'; import { createModuleSlice } from './slices/moduleSlice'; import { listViewComponentSlice } from './slices/componentSlices/listViewComponentSlice'; +import { createBranchSlice } from './slices/branchSlice'; enableMapSet(); export default create( @@ -71,6 +72,7 @@ export default create( // component slices ...createFormComponentSlice(...state), ...listViewComponentSlice(...state), + ...createBranchSlice(...state), })), { name: 'App Builder Store', anonymousActionType: 'unknown' } ) diff --git a/frontend/src/HomePage/HomePage.jsx b/frontend/src/HomePage/HomePage.jsx index 968f94ae88..a7777448be 100644 --- a/frontend/src/HomePage/HomePage.jsx +++ b/frontend/src/HomePage/HomePage.jsx @@ -108,6 +108,10 @@ class HomePageComponent extends React.Component { selectedAppRepo: null, importingApp: false, importingGitAppOperations: {}, + latestCommitData: null, + tags: [], + fetchingLatestCommitData: false, + selectedVersionOption: null, featuresLoaded: false, showCreateAppModal: false, showCreateAppFromTemplateModal: false, @@ -841,24 +845,55 @@ class HomePageComponent extends React.Component { }; importGitApp = () => { - const { appsFromRepos, selectedAppRepo, orgGit, importedAppName } = this.state; + const { appsFromRepos, selectedAppRepo, orgGit, importedAppName, selectedVersionOption, tags } = this.state; const appToImport = appsFromRepos[selectedAppRepo]; - const { git_app_name, git_version_id, git_version_name, last_commit_message, last_commit_user, lastpush_date } = - appToImport; + const { + git_app_name, + git_version_id, + git_version_name, + last_commit_message, + last_commit_user, + lastpush_date, + app_co_relation_id, + } = appToImport; + + let commitHash = null; + let commitMessage = last_commit_message; + let commitUser = last_commit_user; + let commitDate = lastpush_date; + let gitVersionNameToUse = git_version_name; + + // If a tag is selected (not latest), use tag's commit info + if (selectedVersionOption && selectedVersionOption !== 'latest') { + const selectedTag = tags.find((t) => t.name === selectedVersionOption); + if (selectedTag) { + commitHash = selectedTag.commit?.sha; + commitMessage = selectedTag.message; + commitUser = selectedTag.tagger?.name; + commitDate = selectedTag.tagger?.date; + gitVersionNameToUse = selectedTag.name.split('/').pop(); + } else { + commitMessage = last_commit_message; + commitUser = last_commit_user; + commitDate = lastpush_date; + } + } this.setState({ importingApp: true }); const body = { gitAppId: selectedAppRepo, gitAppName: git_app_name, - gitVersionName: git_version_name, + gitVersionName: gitVersionNameToUse, gitVersionId: git_version_id, - lastCommitMessage: last_commit_message, - lastCommitUser: last_commit_user, - lastPushDate: new Date(lastpush_date), organizationGitId: orgGit?.id, appName: importedAppName?.trim().replace(/\s+/g, ' '), allowEditing: this.state.isAppImportEditable, + ...(commitHash && { commitHash, appCoRelationId: app_co_relation_id }), + ...(commitMessage && { lastCommitMessage: commitMessage }), + ...(commitUser && { lastCommitUser: commitUser }), + ...(commitDate && { lastPushDate: new Date(commitDate) }), }; + gitSyncService .importGitApp(body) .then((data) => { @@ -883,7 +918,7 @@ class HomePageComponent extends React.Component { folderService .addToFolder(appOperations.selectedApp.id, appOperations.selectedFolder) .then(() => { - toast.success('Added to folder.'); + toast.success('Application added to folder successfully!'); this.foldersChanged(); this.setState({ appOperations: {}, showAddToFolderModal: false }); posthogHelper.captureEvent('click_add_to_folder_button', { @@ -910,7 +945,7 @@ class HomePageComponent extends React.Component { folderService .removeAppFromFolder(appOperations.selectedApp.id, appOperations.selectedFolder.id) .then(() => { - toast.success('Removed from folder.'); + toast.success('Application removed from folder successfully!'); this.fetchApps(1, appOperations.selectedFolder.id); this.fetchFolders(); @@ -1008,7 +1043,13 @@ class HomePageComponent extends React.Component { generateOptionsForRepository = () => { const { appsFromRepos } = this.state; - return Object.keys(appsFromRepos).map((gitAppId) => ({ + + // Filter out non-app keys like 'has_latest_changes' and 'tags' + const appIds = Object.keys(appsFromRepos).filter( + (key) => key !== 'has_latest_changes' && key !== 'tags' && appsFromRepos[key]?.git_app_name + ); + + return appIds.map((gitAppId) => ({ name: appsFromRepos[gitAppId].git_app_name, value: gitAppId, })); @@ -1154,7 +1195,7 @@ class HomePageComponent extends React.Component { this.setState({ importingGitAppOperations: validationMessage, }); - return; + return; } this.setState({ importedAppName: newAppName, @@ -1162,6 +1203,44 @@ class HomePageComponent extends React.Component { }); }; + handleAppRepoChange = async (newVal) => { + const { appsFromRepos, orgGit } = this.state; + const selectedApp = appsFromRepos[newVal]; + this.setState({ + selectedAppRepo: newVal, + importedAppName: selectedApp?.git_app_name, + }); + if (selectedApp?.app_name_exist === 'EXIST') { + this.setState({ + importingGitAppOperations: { message: 'App name already exists' }, + fetchingLatestCommitData: true, + latestCommitData: null, + }); + } else { + this.setState({ + importingGitAppOperations: {}, + fetchingLatestCommitData: true, + latestCommitData: null, + selectedVersionOption: null, + }); + } + const selectedBranch = orgGit?.git_https?.github_branch || orgGit?.git_ssh?.git_branch || orgGit?.git_lab_branch; + + try { + const data = await gitSyncService.checkForUpdatesByAppName(selectedApp?.git_app_name, selectedBranch); + this.setState({ + latestCommitData: data?.metaData, + tags: data?.metaData.tags, + fetchingLatestCommitData: false, + selectedVersionOption: 'latest', + }); + // TODO: Handle the response data + } catch (error) { + console.error('Failed to check for updates:', error); + this.setState({ fetchingLatestCommitData: false }); + } + }; + // Helper functions for workflow limit checks hasWorkflowLimitReached = () => { const { workflowInstanceLevelLimit, workflowWorkspaceLevelLimit } = this.state; @@ -1213,6 +1292,70 @@ class HomePageComponent extends React.Component { this.eraseAIOnboardingRelatedCookies(); }; + generateVersionOptions = () => { + const { latestCommitData, tags } = this.state; + const options = []; + + if (latestCommitData?.latestCommit?.[0]) { + options.push({ + label: 'Latest commit', + value: 'latest', + isLatest: true, + isDraft: true, + sha: latestCommitData?.latestCommit?.[0]?.commitId, + }); + } + + // Add tags - filter out tags that have the same SHA as the latest commit + if (tags && tags.length > 0) { + tags.forEach((tag) => { + const [, version] = tag.name.split('/'); + options.push({ + label: version, + value: tag.name, + isLatest: false, + isDraft: false, + }); + }); + } + + return options; + }; + + getSelectedVersionCommitInfo = () => { + const { selectedVersionOption, latestCommitData, tags } = this.state; + const isLatest = !selectedVersionOption || selectedVersionOption === 'latest'; + + if (isLatest) { + return { + message: latestCommitData?.latestCommit[0]?.message, + author: latestCommitData?.latestCommit[0]?.author, + date: latestCommitData?.latestCommit[0]?.date, + versionName: latestCommitData?.gitVersionName, + }; + } + + const selectedTag = tags?.find((t) => t.name === selectedVersionOption); + return { + message: selectedTag?.message, + author: selectedTag?.tagger?.name, + date: selectedTag?.tagger?.date, + versionName: selectedVersionOption?.split('/')?.pop(), + }; + }; + + renderVersionOption = (option) => { + return ( +
+ {option.label} +
+ ); + }; + + handleVersionOptionChange = (newVal) => { + this.setState({ selectedVersionOption: newVal }); + }; + render() { const { apps, @@ -1242,7 +1385,10 @@ class HomePageComponent extends React.Component { fetchingAppsFromRepos, selectedAppRepo, appsFromRepos, + latestCommitData, + fetchingLatestCommitData, importingApp, + selectedVersionOption, importingGitAppOperations, featuresLoaded, showCreateAppModal, @@ -1351,7 +1497,6 @@ class HomePageComponent extends React.Component { const threshold = 3; const isLong = missingGroups.length > threshold; const displayedGroups = missingGroupsExpanded ? missingGroups : missingGroups.slice(0, threshold); - return (
@@ -1536,18 +1681,7 @@ class HomePageComponent extends React.Component {
+ + {/* VERSION/TAG SELECT */} +
+ +
+ -
-
-
- Commit changes + {/* Disabling autoCommit */} + {/* {orgGit?.is_enabled && + modalType !== 'create' && + appType != APP_TYPE.WORKFLOW && + appType != APP_TYPE.MODULE && ( +
+
+
-
- This action commits the app's creation to the git repository +
+
+ Commit changes +
+
+ This action commits the app's creation to the git repository +
-
- )} + )} */}
{dependentPlugins && dependentPlugins.length >= 1 && (
e.stopPropagation()}> diff --git a/frontend/src/_components/SortableList/SortableList.jsx b/frontend/src/_components/SortableList/SortableList.jsx index 3a6631a5a9..91f0aa2805 100644 --- a/frontend/src/_components/SortableList/SortableList.jsx +++ b/frontend/src/_components/SortableList/SortableList.jsx @@ -3,8 +3,10 @@ import { DndContext, PointerSensor, useSensor, useSensors } from '@dnd-kit/core' import { SortableContext, arrayMove } from '@dnd-kit/sortable'; import { SortableItem } from './components'; import useStore from '@/AppBuilder/_stores/store'; +import { useModuleContext } from '@/AppBuilder/_contexts/ModuleContext'; export function SortableList({ items, onChange, renderItem }) { + const { isModuleEditor } = useModuleContext(); const sensors = useSensors( useSensor(PointerSensor, { activationConstraint: { @@ -17,7 +19,7 @@ export function SortableList({ items, onChange, renderItem }) { // }) ); - const shouldFreeze = useStore((state) => state.isVersionReleased || state.isEditorFreezed); + const shouldFreeze = useStore((state) => state.getShouldFreeze(false, isModuleEditor)); const enableReleasedVersionPopupState = useStore((state) => state.enableReleasedVersionPopupState); return ( diff --git a/frontend/src/_services/appVersion.service.js b/frontend/src/_services/appVersion.service.js index c6e38b105a..b7b3879c29 100644 --- a/frontend/src/_services/appVersion.service.js +++ b/frontend/src/_services/appVersion.service.js @@ -46,12 +46,13 @@ function getAppVersionData(appId, versionId, mode) { ); } -function create(appId, versionName, versionDescription, versionFromId, currentEnvironmentId) { +function create(appId, versionName, versionDescription, versionFromId, currentEnvironmentId, versionType = 'version') { const body = { versionName, versionDescription, versionFromId, environmentId: currentEnvironmentId, + versionType, }; const requestOptions = { @@ -150,10 +151,10 @@ function autoSaveApp( const body = !type ? { ...diff } : bodyMappings[type]?.[operation] || { - is_user_switched_version: isUserSwitchedVersion, - pageId, - diff, - }; + is_user_switched_version: isUserSwitchedVersion, + pageId, + diff, + }; if (type === 'components' && operation === 'delete' && isComponentCutProcess) { body['is_component_cut'] = true; diff --git a/frontend/src/_services/git_sync.service.js b/frontend/src/_services/git_sync.service.js index 25df504e10..d518f3a028 100644 --- a/frontend/src/_services/git_sync.service.js +++ b/frontend/src/_services/git_sync.service.js @@ -13,12 +13,22 @@ export const gitSyncService = { gitPull, importGitApp, checkForUpdates, + checkForUpdatesByAppName, confirmPullChanges, updateStatus, getGitStatus, saveProviderConfigs, updateAppEditState, getAppGitConfigs, + // New branch management methods + getAllBranches, + createBranch, + getPullRequests, + switchBranch, + updateGitConfigs, + getGitConfigs, + createGitTag, + checkTagExists, }; function create(organizationId, gitUrl, gitType) { @@ -38,11 +48,12 @@ function create(organizationId, gitUrl, gitType) { } function updateConfig(organizationGitId, updateParam, gitType = '') { - const { gitUrl, autoCommit, keyType } = updateParam; + const { gitUrl, autoCommit, keyType, branchingEnabled } = updateParam; const body = { ...(gitUrl && { gitUrl }), ...(autoCommit != null && { autoCommit }), ...(keyType && { keyType }), + ...(branchingEnabled && { branchingEnabled }), }; const requestOptions = { method: 'PUT', @@ -108,6 +119,7 @@ function deleteConfig(organizationGitId, gitType) { } function gitPush(body, appGitId, versionId) { + // body can now include { commitMessage, sourceBranch } when branching is enabled const requestOptions = { method: 'POST', headers: authHeader(), @@ -134,13 +146,27 @@ function getAppConfig(organizationId, versionId) { return response; } -function checkForUpdates(appId) { +function checkForUpdates(appId, branchName = '') { const requestOptions = { method: 'GET', headers: authHeader(), credentials: 'include', }; - return fetch(`${config.apiUrl}/app-git/gitpull/app/${appId}`, requestOptions).then(handleResponse); + return fetch(`${config.apiUrl}/app-git/gitpull/app/${appId}?branch=${branchName}`, requestOptions).then( + handleResponse + ); +} + +function checkForUpdatesByAppName(appName, branchName = '') { + const requestOptions = { + method: 'GET', + headers: authHeader(), + credentials: 'include', + }; + const params = new URLSearchParams(); + if (appName) params.append('appName', appName); + if (branchName) params.append('branch', branchName); + return fetch(`${config.apiUrl}/app-git/gitpull/app?${params.toString()}`, requestOptions).then(handleResponse); } function gitPull() { @@ -221,4 +247,135 @@ function getAppGitConfigs(workspaceId, versionId) { return fetch(`${config.apiUrl}/app-git/${workspaceId}/app/${versionId}/configs`, requestOptions).then(handleResponse); } + +// Branch Management API Methods + +/** + * Get all branches for an app + * @param {string} appId - Application ID + * @param {string} organizationId - Organization ID + * @returns {Promise} Promise resolving to branches array + */ +function getAllBranches(appId, organizationId) { + const requestOptions = { + method: 'GET', + headers: authHeader(), + credentials: 'include', + }; + return fetch(`${config.apiUrl}/app-git/${organizationId}/app/${appId}/branches`, requestOptions).then((response) => + handleResponse(response, false, null, true) + ); +} + +/** + * Create a new branch + * @param {string} appId - Application ID + * @param {string} organizationId - Organization ID + * @param {object} branchData - { branch_name, version_from_id, auto_commit } + * @returns {Promise} Promise resolving to created branch + */ +function createBranch(appId, organizationId, branchData) { + const requestOptions = { + method: 'POST', + headers: authHeader(), + credentials: 'include', + body: JSON.stringify(branchData), + }; + return fetch(`${config.apiUrl}/app-git/${organizationId}/app/${appId}/branches`, requestOptions).then(handleResponse); +} + +/** + * Get pull requests for an app + * @param {string} appId - Application ID + * @returns {Promise} Promise resolving to pull requests array + */ +function getPullRequests(appId, organizationId) { + const requestOptions = { + method: 'GET', + headers: authHeader(), + credentials: 'include', + }; + return fetch(`${config.apiUrl}/app-git/${organizationId}/app/${appId}/pull-requests`, requestOptions).then( + (response) => handleResponse(response, false, null, true) + ); +} + +/** + * Switch to a different branch (pull commits from branch) + * @param {string} appId - Application ID + * @param {string} branchName - Target branch name + * @returns {Promise} Promise resolving to pull result + */ +function switchBranch(appId, branchName) { + const requestOptions = { + method: 'GET', + headers: authHeader(), + credentials: 'include', + }; + return fetch(`${config.apiUrl}/app-git/gitpull/app/${appId}?branch=${branchName}`, requestOptions).then( + handleResponse + ); +} + +/** + * Update git configurations (including branching enabled status) + * @param {string} appId - Application ID + * @param {object} configs - Configuration object { branching_enabled, ...otherConfigs } + * @returns {Promise} Promise resolving to updated configs + */ +function updateGitConfigs(appId, configs) { + const requestOptions = { + method: 'PUT', + headers: authHeader(), + credentials: 'include', + body: JSON.stringify(configs), + }; + return fetch(`${config.apiUrl}/app-git/${appId}/configs`, requestOptions).then(handleResponse); +} + +/** + * Get git configurations for an app version + * @param {string} organizationId - Organization ID + * @param {string} versionId - Version ID + * @returns {Promise} Promise resolving to git configs + */ +function getGitConfigs(organizationId, versionId) { + const requestOptions = { + method: 'GET', + headers: authHeader(), + credentials: 'include', + }; + return fetch(`${config.apiUrl}/app-git/${organizationId}/app/${versionId}/configs`, requestOptions).then( + handleResponse + ); +} + +function createGitTag(appId, versionId, versionDescription) { + const requestOptions = { + method: 'POST', + headers: authHeader(), + credentials: 'include', + body: JSON.stringify({ message: versionDescription }), + }; + return fetch(`${config.apiUrl}/app-git/${appId}/versions/${versionId}/tag`, requestOptions).then(handleResponse); +} + +/** + * Check if a git tag already exists for the given app and version name. + * This should be called BEFORE saving the version locally to ensure + * local save and tag creation stay in sync. + * @param {string} appId - Application ID + * @param {string} versionName - Version name to check + * @returns {Promise<{ exists: boolean, tag_name: string }>} Promise resolving to tag existence check + */ +function checkTagExists(appId, versionName) { + const requestOptions = { + method: 'GET', + headers: authHeader(), + credentials: 'include', + }; + return fetch(`${config.apiUrl}/app-git/${appId}/check-tag/${encodeURIComponent(versionName)}`, requestOptions).then( + handleResponse + ); +} // Remove all app-git api's to separate service from here. diff --git a/frontend/src/_stores/environmentsAndVersionsStore.js b/frontend/src/_stores/environmentsAndVersionsStore.js index 40a5f3712d..5f2c9bdb4d 100644 --- a/frontend/src/_stores/environmentsAndVersionsStore.js +++ b/frontend/src/_stores/environmentsAndVersionsStore.js @@ -81,10 +81,24 @@ export const useEnvironmentsAndVersionsStore = create( }, setSelectedVersion: (selectedVersion) => set({ selectedVersion }), setEnvironmentAndVersionsInitStatus: (state) => set({ completedEnvironmentAndVersionsInit: state }), - createNewVersionAction: async (appId, versionName, selectedVersionId, onSuccess, onFailure) => { + createNewVersionAction: async ( + appId, + versionName, + selectedVersionId, + onSuccess, + onFailure, + versionType = 'version' + ) => { try { const editorEnvironment = get().selectedEnvironment.id; - const newVersion = await appVersionService.create(appId, versionName, selectedVersionId, editorEnvironment); + const newVersion = await appVersionService.create( + appId, + versionName, + '', + selectedVersionId, + editorEnvironment, + versionType + ); const editorVersion = { id: newVersion.id, name: newVersion.name, diff --git a/frontend/src/_stores/versionManagerStore.js b/frontend/src/_stores/versionManagerStore.js index 96ed87f4fd..d782011072 100644 --- a/frontend/src/_stores/versionManagerStore.js +++ b/frontend/src/_stores/versionManagerStore.js @@ -39,6 +39,10 @@ export const useVersionManagerStore = create( const { versions, searchQuery } = get(); let filtered = versions; + filtered = filtered.filter((v) => { + const versionType = v.versionType || v.version_type; + return versionType !== 'branch'; + }); // Filter by search query only if (searchQuery) { diff --git a/frontend/src/_styles/branch-dropdown.scss b/frontend/src/_styles/branch-dropdown.scss new file mode 100644 index 0000000000..ad0b2860ec --- /dev/null +++ b/frontend/src/_styles/branch-dropdown.scss @@ -0,0 +1,1153 @@ +// Branch Dropdown Styles +.branch-dropdown-container { + position: relative; + display: inline-flex; + align-items: center; + margin-left: 8px; + user-select: none; + margin-right: 8px; + border-radius: 8px; + + &.selected { + .branch-dropdown-button { + background-color: var(--slate3); + } + } + + &.dark-theme { + .branch-dropdown-button { + border-color: var(--slate7); + background-color: var(--slate2); + } + } +} + +.branch-dropdown-button { + display: flex; + align-items: center; + gap: 6px; + padding: 7px 12px; + border-radius: 6px; + border: 1px solid var(--slate6); + background-color: var(--slate1); + cursor: pointer; + transition: all 0.2s ease; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + outline: none; + outline: 0px !important; + + &:hover { + background-color: var(--slate3); + border-color: var(--slate7); + } + + svg { + flex-shrink: 0; + } + + .branch-name { + color: var(--text-default); + font-weight: 500; + font-size: 12px; + line-height: 18px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +// Old styles - keeping for backward compatibility +.branch-dropdown-header { + display: flex; + align-items: center; + gap: 6px; + padding: 6px 12px; + border-radius: 6px; + border: 1px solid var(--slate6); + background-color: var(--slate2); + cursor: pointer; + transition: all 0.2s ease; + min-width: 160px; + + &:hover { + background-color: var(--slate3); + border-color: var(--slate7); + } + + svg { + flex-shrink: 0; + } + + .branch-label { + color: var(--slate11); + font-weight: 500; + white-space: nowrap; + } + + .current-branch-name { + color: var(--slate12); + font-weight: 500; + font-size: 13px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; + } + + .branch-arrow { + display: flex; + align-items: center; + transition: transform 0.2s ease; + + &.branch-arrow-rotate { + transform: rotate(90deg); + } + } +} + +.branch-dropdown-popover { + position: absolute; + top: calc(100% + 4px); + left: 0; + width: 320px; + max-height: 450px; + background-color: var(--slate1); + border: 1px solid var(--slate6); + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + z-index: 1000; + overflow: hidden; + display: flex; + flex-direction: column; + + &.theme-dark { + background-color: var(--slate2); + border-color: var(--slate7); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + } +} + +// Current Branch Header (with lock icon) +.branch-dropdown-current-branch { + display: flex; + align-items: center; + gap: 8px; + padding: 14px 16px 8px 16px; + + &.with-border { + border-bottom: 1px solid var(--slate6); + } + + .branch-icon-container { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 100px; + background-color: var(--indigo3); + flex-shrink: 0; + } + + // Feature branch icon (gitsync) + .branch-icon-container-feature { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 100px; + background-color: var(--indigo3); + flex-shrink: 0; + } + + .branch-info { + display: flex; + flex-direction: column; + gap: 2px; + flex: 1; + min-width: 0; + + .branch-name-title { + font-family: 'Inter', sans-serif; + font-weight: 500; + font-size: 14px; + line-height: 20px; + color: var(--text-default); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .branch-metadata, + .branch-metadata-feature { + display: flex; + align-items: center; + gap: 4px; + font-family: 'Inter', sans-serif; + font-weight: 400; + font-size: 12px; + line-height: 18px; + + .metadata-text { + color: var(--slate11); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .metadata-dot { + color: var(--slate11); + width: 2px; + height: 2px; + flex-shrink: 0; + } + } + } +} + +// Main Content Area +.branch-dropdown-content { + display: flex; + flex-direction: column; + padding: 10px 0; + border-bottom: 1px solid var(--slate6); + + .fetch-prs-section { + display: flex; + align-items: center; + justify-content: center; + padding: 0 16px; + min-height: 94px; + + .fetch-prs-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + padding: 5px 10px; + height: 28px; + background-color: var(--slate1); + border: 1px solid var(--slate6); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-weight: 500; + font-size: 12px; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.2s ease; + outline: none; + + &:hover:not(:disabled) { + background-color: var(--slate3); + border-color: var(--slate7); + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } + + &.loading { + opacity: 0.8; + } + + svg { + flex-shrink: 0; + } + } + } +} + +.branches-list { + flex: 1; + overflow-y: auto; + padding: 8px 0; + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background-color: var(--slate7); + border-radius: 3px; + } + + &::-webkit-scrollbar-track { + background-color: var(--slate3); + } +} + +.branch-section { + margin-bottom: 16px; + + &:last-child { + margin-bottom: 0; + } + + .section-label { + font-size: 11px; + font-weight: 600; + color: var(--slate11); + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 8px 16px 4px; + } +} + +.branch-group { + margin-bottom: 2px; +} + +.branch-item { + padding: 0 8px; + cursor: pointer; + transition: background-color 0.15s ease; + + &:hover { + background-color: var(--slate3); + } + + &.active { + background-color: var(--indigo3); + + .branch-name span { + color: var(--indigo11); + font-weight: 600; + } + + svg { + fill: var(--indigo11); + } + } +} + +.branch-item-content { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 8px; + border-radius: 6px; + + .branch-name { + display: flex; + align-items: center; + gap: 8px; + flex: 1; + min-width: 0; + + span { + font-size: 13px; + color: var(--slate12); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .expand-icon { + display: flex; + align-items: center; + justify-content: center; + background: none; + border: none; + padding: 2px; + cursor: pointer; + border-radius: 4px; + transition: all 0.2s ease; + + &:hover { + background-color: var(--slate5); + } + + svg { + transition: transform 0.2s ease; + + &.expanded { + transform: rotate(180deg); + } + } + } + } +} + +.pr-badge { + display: inline-flex; + align-items: center; + padding: 2px 8px; + border-radius: 12px; + font-size: 11px; + font-weight: 600; + white-space: nowrap; + + &.pr-badge-open { + background-color: var(--green3); + color: var(--green11); + } + + &.pr-badge-merged { + background-color: var(--purple3); + color: var(--purple11); + } + + &.pr-badge-closed { + background-color: var(--red3); + color: var(--red11); + } +} + +.nested-versions { + padding-left: 32px; + margin-top: 4px; +} + +.version-item { + padding: 8px 16px; + cursor: pointer; + transition: background-color 0.15s ease; + + &:hover { + background-color: var(--slate3); + } + + .version-name { + display: flex; + align-items: center; + gap: 8px; + + .version-label { + font-size: 12px; + color: var(--slate11); + } + + .draft-badge { + display: inline-flex; + align-items: center; + padding: 2px 6px; + border-radius: 10px; + font-size: 10px; + font-weight: 600; + background-color: var(--amber3); + color: var(--amber11); + } + } +} + +.empty-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 40px 16px; + text-align: center; + min-height: 200px; + + .empty-state-icon { + margin-bottom: 16px; + opacity: 0.4; + + svg { + display: block; + } + } + + .empty-state-text { + font-family: 'Inter', sans-serif; + font-size: 14px; + font-weight: 600; + color: var(--slate12); + margin: 0 0 4px 0; + } + + .empty-state-subtext { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 400; + color: var(--slate11); + margin: 0; + } +} + +.loading-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 32px 16px; + gap: 12px; + + .spinner { + width: 20px; + height: 20px; + border: 2px solid var(--slate6); + border-top-color: var(--indigo9); + border-radius: 50%; + animation: spin 0.6s linear infinite; + } + + span { + font-size: 13px; + color: var(--slate11); + } +} + +// Small spinner for buttons +.spinner-small { + width: 14px; + height: 14px; + border: 2px solid var(--slate6); + border-top-color: var(--indigo9); + border-radius: 50%; + animation: spin 0.6s linear infinite; + flex-shrink: 0; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.branch-dropdown-footer { + display: flex; + flex-direction: column; + gap: 8px; + padding: 16px; + border-top: 1px solid var(--slate6); + + .create-branch-btn, + .switch-branch-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + width: 100%; + padding: 5px 10px; + background-color: var(--slate1); + border: 1px solid var(--slate6); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-weight: 500; + font-size: 12px; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.2s ease; + outline: none; + + &:hover { + background-color: var(--slate3); + border-color: var(--slate7); + } + + &:active { + transform: scale(0.98); + } + + svg { + flex-shrink: 0; + } + } + + .create-branch-btn.accent { + border-color: var(--indigo6); + + &:hover { + border-color: var(--indigo7); + background-color: var(--indigo2); + } + + svg { + fill: var(--indigo9); + } + } +} + +// Branch metadata styles +.branch-metadata { + display: flex; + align-items: center; + gap: 8px; +} + +.branch-updated { + font-size: 11px; + color: var(--slate9); + white-space: nowrap; +} + +.branch-lock-icon { + flex-shrink: 0; +} + +.rotating { + animation: rotate 1s linear infinite; +} + +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +// Fetch PRs Section (only shown on default branch at top) +.fetch-prs-section { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + justify-content: center; + padding: 16px 0; + min-height: 94px; + border-bottom: 1px solid var(--slate6); + + .fetch-prs-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 10px; + background: var(--slate1); + border: 1px solid var(--slate7); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.15s ease; + height: 28px; + + &:hover { + background: var(--slate3); + border-color: var(--slate8); + } + + svg { + flex-shrink: 0; + } + } +} + +// Fetch Branch Info Section (only shown on feature branch at top) +.fetch-branch-info-section { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + justify-content: center; + padding: 16px 0; + min-height: 120px; + + .fetch-branch-info-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 10px; + background: var(--slate1); + border: 1px solid var(--slate7); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.15s ease; + height: 28px; + + &:hover:not(:disabled) { + background: var(--slate3); + border-color: var(--slate8); + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } + + svg { + flex-shrink: 0; + } + } +} + +// PR Tabs Section (only shown on default branch) +.pr-tabs { + display: flex; + gap: 4px; + padding: 0 16px; + border-bottom: 1px solid var(--slate6); + + .pr-tab { + position: relative; + padding: 6px 7px 8px 7px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate11); + background: none; + border: none; + border-bottom: 2px solid transparent; + cursor: pointer; + transition: all 0.2s ease; + outline: none; + + &:hover { + color: var(--slate12); + } + + &.active { + color: var(--slate12); + border-bottom-color: var(--indigo9); + border-radius: 0; + } + } +} + +// PR List Container +.pr-list-container { + padding: 0 16px; + overflow-y: auto; + max-height: 280px; + + .pr-item { + display: flex; + gap: 6px; + padding: 8px; + align-items: flex-start; + cursor: pointer; + transition: background-color 0.15s ease; + border-radius: 6px; + + &:hover { + background-color: var(--slate3); + } + + .pr-icon { + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + margin-top: 2px; + } + + .pr-content { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 2px; + + .pr-title { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .pr-metadata { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 18px; + color: var(--slate11); + white-space: normal; + word-break: break-word; + } + } + } +} + +// Empty PR State (old simple version) +.empty-pr-state { + display: flex; + align-items: center; + justify-content: center; + padding: 32px 16px; + + .empty-pr-text { + font-family: 'Inter', sans-serif; + font-size: 13px; + font-weight: 400; + color: var(--slate11); + margin: 0; + text-align: center; + } +} + +// Empty PR State Box (new Figma design with warning icon) +.empty-pr-state-box { + display: flex; + gap: 6px; + align-items: flex-start; + padding: 8px 12px; + margin: 16px 0px; + height: 70px; + border: 1px dashed var(--slate8); + border-radius: 6px; + background: transparent; + + svg { + color: var(--icon-warning, #BF4F03); + flex-shrink: 0; + } + + .empty-pr-icon { + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + } + + .empty-pr-content { + display: flex; + flex-direction: column; + gap: 4px; + flex: 1; + + .empty-pr-title { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + } + + .empty-pr-description { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 18px; + color: var(--slate11); + } + } +} + +// Fetch Branch Section (for non-default branches) +.fetch-branch-section { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 16px 0; + height: 120px; + + .fetch-branch-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 10px; + height: 28px; + background: var(--slate1); + border: 1px solid var(--slate6); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.15s ease; + + &:hover:not(:disabled) { + background: var(--slate3); + border-color: var(--slate7); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + svg { + flex-shrink: 0; + + &.rotating { + animation: spin 1s linear infinite; + } + } + } +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +// Latest Commit Section +.latest-commit-section { + display: flex; + flex-direction: column; + gap: 12px; + padding: 12px 16px 12px 16px; + width: 100%; + + .latest-commit-header { + .section-label { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 20px; + color: var(--slate11); + text-transform: uppercase; + } + } + + .commit-info { + display: flex; + gap: 6px; + align-items: flex-start; + + .commit-icon { + display: flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + flex-shrink: 0; + } + + .commit-content { + display: flex; + flex-direction: column; + gap: 4px; + flex: 1; + min-width: 0; + + .commit-title { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + } + + .commit-metadata { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 18px; + color: var(--slate11); + } + } + } +} + +// No Commits Empty State +.no-commits-empty-state { + display: flex; + gap: 6px; + align-items: flex-start; + padding: 8px 12px; + margin: 16px; + border: 1px dashed var(--border-default, #CCD1D5); + border-radius: 6px; + background: transparent; + + svg { + color: var(--icon-warning, #BF4F03); + flex-shrink: 0; + } + + .empty-state-icon-warning { + display: flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + flex-shrink: 0; + margin-top: 2px; + } + + .empty-state-content { + display: flex; + flex-direction: column; + flex: 1; + + .empty-state-title { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + } + + .empty-state-description { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 18px; + color: var(--slate11); + } + } +} + +// Loading Commit State +.loading-commit-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 24px 16px; + gap: 12px; + + .spinner { + width: 24px; + height: 24px; + border: 2px solid var(--slate6); + border-top-color: var(--indigo9); + border-radius: 50%; + animation: spin 0.8s linear infinite; + } + + span { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 400; + color: var(--slate11); + } +} + +// Update footer button styles for Create PR +.branch-dropdown-footer { + display: flex; + flex-direction: column; + gap: 8px; + padding: 16px; + width: 100%; + + .create-branch-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 10px; + background: var(--slate1); + border: 1px solid var(--indigo7); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.15s ease; + flex: 1; + + &:hover { + background: var(--indigo2); + } + + svg { + flex-shrink: 0; + } + } + + .fetch-branch-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 10px; + background: var(--slate1); + border: 1px solid var(--slate7); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.15s ease; + flex: 1; + + &:hover:not(:disabled) { + background: var(--slate3); + border-color: var(--slate8); + } + + &:disabled { + opacity: 0.6; + cursor: not-allowed; + } + + svg { + flex-shrink: 0; + } + } + + .create-pr-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + width: 100%; + padding: 5px 10px; + background: var(--slate1); + border: 1px solid var(--indigo7); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.15s ease; + + &:hover { + background: var(--indigo2); + border-color: var(--indigo8); + } + + svg { + flex-shrink: 0; + } + } + + .switch-branch-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + width: 100%; + padding: 5px 10px; + background: var(--slate1); + border: 1px solid var(--slate7); + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + cursor: pointer; + transition: all 0.15s ease; + + &:hover { + background: var(--slate3); + border-color: var(--slate8); + } + + svg { + flex-shrink: 0; + } + } +} diff --git a/frontend/src/_styles/create-branch-modal.scss b/frontend/src/_styles/create-branch-modal.scss new file mode 100644 index 0000000000..f2531b7f3d --- /dev/null +++ b/frontend/src/_styles/create-branch-modal.scss @@ -0,0 +1,574 @@ +// Create Branch Modal Styles +.create-branch-modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; +} + +.create-branch-modal { + width: 404px; + min-height: auto; + background-color: var(--slate1); + border: 1px solid var(--slate6); + border-radius: 6px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); + display: flex; + flex-direction: column; + animation: modalFadeIn 0.2s ease; + + &.theme-dark { + background-color: var(--slate2); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); + } +} + +@keyframes modalFadeIn { + from { + opacity: 0; + transform: scale(0.95); + } + + to { + opacity: 1; + transform: scale(1); + } +} + +.create-branch-modal-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 16px 24px; + border-bottom: 1px solid var(--slate6); + + .modal-title { + font-size: 16px; + font-weight: 500; + line-height: 24px; + color: var(--slate12); + margin: 0; + } + + .close-button { + display: flex; + align-items: center; + justify-content: center; + background: none; + border: none; + padding: 4px; + cursor: pointer; + border-radius: 4px; + transition: background-color 0.15s ease; + color: var(--slate11); + + &:hover { + background-color: var(--slate4); + color: var(--slate12); + } + + &:active { + transform: scale(0.95); + } + } +} + +.create-branch-modal-body { + flex: 1; + max-height: calc(80vh - 140px); + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background-color: var(--slate7); + border-radius: 3px; + } + + &::-webkit-scrollbar-track { + background-color: var(--slate3); + } +} + +.form-group { + margin-bottom: 16px; + + &:last-child { + margin-bottom: 0; + } +} + +.form-label { + display: block; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + margin-bottom: 2px; + padding-left: 2px; +} + +.form-select { + width: 100%; + height: 52px; + padding: 12px 16px; + font-size: 14px; + color: var(--slate12); + background-color: var(--slate2); + border: 1px solid var(--slate6); + border-radius: 6px; + outline: none; + transition: all 0.15s ease; + cursor: pointer; + + &:hover:not(:disabled) { + border-color: var(--slate7); + } + + &:focus { + border-color: var(--indigo9); + box-shadow: 0 0 0 3px var(--indigo3); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +} + +.branch-modal-form-input { + width: 100%; + height: 32px; + padding: 6px 10px; + font-size: 12px; + color: var(--slate12); + background-color: var(--slate1); + border: 1px solid var(--slate7); + border-radius: 6px; + outline: none; + transition: all 0.15s ease; + line-height: 20px; + + &::placeholder { + color: var(--slate9); + } + + &:hover:not(:disabled) { + border-color: var(--slate8); + } + + &:focus { + border-color: var(--indigo9); + box-shadow: 0 0 0 3px var(--indigo3); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &.form-input-error { + border-color: var(--red9); + + &:focus { + box-shadow: 0 0 0 3px var(--red3); + } + } +} + +.form-error-message { + margin-top: 8px; + font-size: 12px; + color: var(--red11); + display: flex; + align-items: center; + gap: 4px; +} + +.form-helper-text { + margin-top: 2px; + padding-left: 2px; + font-size: 10px; + line-height: 16px; + color: var(--slate10); +} + +.checkbox-label { + display: flex; + align-items: flex-start; + gap: 8px; + cursor: pointer; + user-select: none; + padding: 4px 0; + + &:hover { + .form-checkbox:not(:disabled) { + border-color: var(--slate8); + } + } +} + +.form-checkbox { + width: 16px; + height: 16px; + min-width: 16px; + border: 1px solid var(--slate7); + border-radius: 4px; + background-color: var(--slate3); + cursor: pointer; + transition: all 0.15s ease; + margin-top: 0; + + &:hover:not(:disabled) { + border-color: var(--slate8); + } + + &:checked { + background-color: var(--indigo9); + border-color: var(--indigo9); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +} + +.checkbox-text { + display: flex; + flex-direction: column; + gap: 0; + font-size: 12px; + line-height: 20px; + color: var(--slate12); + + .checkbox-helper { + font-size: 10px; + line-height: 16px; + color: var(--slate11); + font-weight: normal; + } +} + +.draft-warning-message { + display: flex; + align-items: flex-start; + gap: 12px; + padding: 12px 16px; + background-color: var(--amber2); + border: 1px solid var(--amber6); + border-radius: 6px; + margin-bottom: 20px; + + svg { + flex-shrink: 0; + color: var(--amber11); + margin-top: 2px; + } + + span { + font-size: 12px; + color: var(--amber12); + line-height: 1.5; + } +} + +.info-message { + display: flex; + align-items: flex-start; + gap: 12px; + padding: 12px 16px; + background-color: var(--blue2); + border: 1px solid var(--blue6); + border-radius: 6px; + + svg { + flex-shrink: 0; + color: var(--blue11); + margin-top: 2px; + } + + span { + font-size: 12px; + color: var(--blue12); + line-height: 1.5; + } +} + +.create-branch-info { + background-color: var(--background-accent-weak); + border: none; + border-radius: 6px; + padding: 12px; + font-size: 12px; + line-height: 18px; + color: var(--slate12); + + img { + width: 18px; + height: 18px; + } +} + +.create-branch-modal-footer { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 8px; + padding: 20px 24px; + border-top: 1px solid var(--slate6); + + .col { + display: flex; + align-items: center; + gap: 8px; + } + + .cancel-button, + button[variant='tertiary'] { + min-width: auto; + height: 32px; + padding: 6px 16px; + font-size: 14px; + line-height: 20px; + } + + .create-button, + button[variant='primary'] { + min-width: auto; + height: 32px; + padding: 6px 16px; + font-size: 14px; + line-height: 20px; + } +} + +// Custom Dropdown Styles (matching Figma design) +.custom-dropdown { + position: relative; + width: 100%; +} + +.custom-dropdown-trigger { + width: 100%; + height: 32px; + padding: 7px 10px; + display: flex; + align-items: center; + justify-content: space-between; + background-color: var(--slate1); + border: 1px solid var(--slate7); + border-radius: 6px; + cursor: pointer; + transition: all 0.15s ease; + font-size: 12px; + color: var(--slate12); + + &:hover:not(:disabled) { + border-color: var(--slate8); + } + + &.is-open { + border-color: var(--indigo9); + border-width: 1.5px; + padding: 6.5px 9.5px; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + svg { + color: var(--slate11); + transition: transform 0.2s ease; + flex-shrink: 0; + } + + &.is-open svg { + transform: rotate(180deg); + } +} + +.custom-dropdown-value { + display: flex; + align-items: center; + gap: 8px; + flex: 1; + overflow: hidden; + + .version-name { + font-size: 12px; + font-weight: 400; + color: var(--slate12); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} + +.custom-dropdown-menu { + position: absolute; + top: calc(100% + 4px); + left: 0; + right: 0; + background-color: var(--slate1); + border: 1px solid var(--slate6); + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + max-height: 280px; + overflow-y: auto; + z-index: 1000; + padding: 8px; + animation: dropdownFadeIn 0.15s ease; + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background-color: var(--slate7); + border-radius: 3px; + } + + &::-webkit-scrollbar-track { + background-color: var(--slate3); + } +} + +@keyframes dropdownFadeIn { + from { + opacity: 0; + transform: translateY(-4px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +.dropdown-item { + display: flex; + align-items: flex-start; + gap: 8px; + padding: 6px 8px; + border-radius: 6px; + cursor: pointer; + transition: background-color 0.15s ease; + + &:hover { + background-color: var(--slate3); + } + + &.is-selected { + background-color: var(--slate2); + } +} + +.check-icon { + flex-shrink: 0; + width: 16px; + height: 16px; + display: flex; + align-items: center; + justify-content: center; + color: var(--indigo9); + margin-top: 1px; +} + +.check-icon-placeholder { + flex-shrink: 0; + width: 16px; + height: 16px; +} + +.item-content { + flex: 1; + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; +} + +.item-header { + display: flex; + align-items: center; + gap: 8px; + width: 100%; +} + +.item-name { + font-size: 12px; + font-weight: 500; + color: var(--slate12); + line-height: 18px; + flex-shrink: 0; +} + +.item-description { + font-size: 11px; + font-weight: 400; + color: var(--slate10); + line-height: 16px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.status-badge { + display: inline-flex; + align-items: center; + justify-content: center; + height: 18px; + padding: 0 8px; + border-radius: 4px; + font-size: 11px; + font-weight: 500; + line-height: 16px; + flex-shrink: 0; +} + +.status-badge-draft { + background-color: var(--amber3); + color: var(--amber11); +} + +.status-badge-released { + background-color: var(--green3); + color: var(--green11); +} + +.status-badge-published { + background-color: var(--blue3); + color: var(--blue11); +} + +// Dark mode adjustments +.theme-dark { + .custom-dropdown-trigger { + background-color: var(--slate2); + } + + .custom-dropdown-menu { + background-color: var(--slate2); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); + } + + .dropdown-item { + &:hover { + background-color: var(--slate4); + } + + &.is-selected { + background-color: var(--slate3); + } + } +} \ No newline at end of file diff --git a/frontend/src/_styles/draft-version-warning-modal.scss b/frontend/src/_styles/draft-version-warning-modal.scss new file mode 100644 index 0000000000..3c66452476 --- /dev/null +++ b/frontend/src/_styles/draft-version-warning-modal.scss @@ -0,0 +1,158 @@ +// Draft Version Warning Modal Styles +.draft-warning-modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + backdrop-filter: blur(2px); +} + +.draft-warning-modal { + width: 360px; + min-height: 198px; + background-color: var(--slate1); + border-radius: 8px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); + display: flex; + flex-direction: column; + animation: modalFadeIn 0.2s ease; + + &.theme-dark { + background-color: var(--slate2); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); + } +} + +@keyframes modalFadeIn { + from { + opacity: 0; + transform: scale(0.95); + } + to { + opacity: 1; + transform: scale(1); + } +} + +.draft-warning-modal-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px 24px 0; + + .warning-icon-container { + display: flex; + align-items: center; + justify-content: center; + width: 48px; + height: 48px; + border-radius: 50%; + background-color: var(--amber3); + + svg { + color: var(--amber11); + } + } + + .close-button { + display: flex; + align-items: center; + justify-content: center; + background: none; + border: none; + padding: 4px; + cursor: pointer; + border-radius: 4px; + transition: background-color 0.15s ease; + color: var(--slate11); + align-self: flex-start; + + &:hover { + background-color: var(--slate4); + color: var(--slate12); + } + + &:active { + transform: scale(0.95); + } + } +} + +.draft-warning-modal-body { + flex: 1; + padding: 16px 24px 20px; + display: flex; + flex-direction: column; + gap: 16px; + + .warning-title { + font-size: 18px; + font-weight: 600; + color: var(--slate12); + margin: 0; + line-height: 1.4; + } + + .warning-message { + font-size: 14px; + color: var(--slate11); + line-height: 1.6; + margin: 0; + } + + .warning-info-box { + display: flex; + align-items: flex-start; + gap: 12px; + padding: 12px 16px; + background-color: var(--blue2); + border: 1px solid var(--blue6); + border-radius: 6px; + + svg { + flex-shrink: 0; + color: var(--blue11); + margin-top: 2px; + } + + .info-text { + display: flex; + flex-direction: column; + gap: 4px; + + strong { + font-size: 13px; + font-weight: 600; + color: var(--blue12); + } + + p { + font-size: 12px; + color: var(--blue11); + line-height: 1.5; + margin: 0; + } + } + } +} + +.draft-warning-modal-footer { + display: flex; + align-items: center; + justify-content: flex-end; + padding: 16px 24px; + border-top: 1px solid var(--slate6); + + .close-action-button { + min-width: 80px; + height: 32px; + padding: 8px 16px; + font-size: 13px; + } +} diff --git a/frontend/src/_styles/locked-branch-banner.scss b/frontend/src/_styles/locked-branch-banner.scss new file mode 100644 index 0000000000..ddd38b3409 --- /dev/null +++ b/frontend/src/_styles/locked-branch-banner.scss @@ -0,0 +1,78 @@ +// LockedBranchBanner - Full-width warning banner for read-only branches +// Displays below the editor navigation when branch is locked + +.locked-branch-banner { + width: 100%; + height: 40px; + background: linear-gradient(90deg, #fef3c7 0%, #fde68a 100%); + border-bottom: 1px solid #fbbf24; + display: flex; + align-items: center; + justify-content: center; + z-index: 100; + position: relative; + + &-content { + display: flex; + align-items: center; + gap: 12px; + max-width: 1200px; + padding: 0 20px; + } + + &-icon { + flex-shrink: 0; + color: #92400e; + width: 16px; + height: 16px; + } + + &-text { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; + } + + &-message { + font-size: 14px; + font-weight: 500; + color: #92400e; + line-height: 20px; + } + + &-branch { + font-size: 13px; + color: #78350f; + line-height: 20px; + + strong { + font-weight: 600; + color: #451a03; + } + } +} + +// Dark mode support +.dark-theme { + .locked-branch-banner { + background: linear-gradient(90deg, #451a03 0%, #78350f 100%); + border-bottom-color: #92400e; + + &-icon { + color: #fbbf24; + } + + &-message { + color: #fde68a; + } + + &-branch { + color: #fef3c7; + + strong { + color: #fef3c7; + } + } + } +} diff --git a/frontend/src/_styles/pages-sidebar.scss b/frontend/src/_styles/pages-sidebar.scss index 81ce7290fe..09500eaf16 100644 --- a/frontend/src/_styles/pages-sidebar.scss +++ b/frontend/src/_styles/pages-sidebar.scss @@ -225,7 +225,7 @@ display: flex; flex-direction: column; box-sizing: content-box; - + &.no-preview-settings { height: 100% !important; } @@ -348,6 +348,7 @@ align-items: center; justify-content: start; gap: 10px; + .page-name { font-family: 'IBM Plex Sans'; font-weight: 500; @@ -604,56 +605,21 @@ height: 61px !important; //1px to account for the border at navbar bottom header { - height: 100% !important; - background-color: var(--nav-menu-bg) !important; - border-bottom-color: var(--nav-menu-border); - max-height: none; - position: static; + height: 100% !important; + background-color: var(--nav-menu-bg) !important; + border-bottom-color: var(--nav-menu-border); + max-height: none; + position: static; - .header-container { - background-color: transparent; - padding: 12px 8px !important; - flex-wrap: nowrap !important; - - .icon-btn { - height: 36px !important; - width: 36px !important; - padding: 10px !important; - } - - .navbar-brand { - height: auto !important; - width: auto !important; - } - - .app-title { - font-size: 16px; - line-height: 24px; - min-width: 0; - } - } - } - } - - .mobile-page-menu-popup { - .mobile-header { - height: 61px !important; //1px to account for the border bottom - - header { - height: 100% !important; - max-height: none; - background-color: var(--nav-menu-bg) !important; - border-bottom-color: var(--nav-menu-border); - position: static; - - .header-container { + .header-container { + background-color: transparent; padding: 12px 8px !important; flex-wrap: nowrap !important; .icon-btn { - height: 36px !important; - width: 36px !important; - padding: 10px !important; + height: 36px !important; + width: 36px !important; + padding: 10px !important; } .navbar-brand { @@ -662,15 +628,50 @@ } .app-title { - font-size: 16px; - line-height: 24px; - min-width: 0; + font-size: 16px; + line-height: 24px; + min-width: 0; } - } } - } + } + } - .mobile-navigation-area { + .mobile-page-menu-popup { + .mobile-header { + height: 61px !important; //1px to account for the border bottom + + header { + height: 100% !important; + max-height: none; + background-color: var(--nav-menu-bg) !important; + border-bottom-color: var(--nav-menu-border); + position: static; + + .header-container { + padding: 12px 8px !important; + flex-wrap: nowrap !important; + + .icon-btn { + height: 36px !important; + width: 36px !important; + padding: 10px !important; + } + + .navbar-brand { + height: auto !important; + width: auto !important; + } + + .app-title { + font-size: 16px; + line-height: 24px; + min-width: 0; + } + } + } + } + + .mobile-navigation-area { width: 100%; z-index: 1; background-color: var(--nav-menu-bg); @@ -678,137 +679,137 @@ flex-direction: column; box-sizing: content-box; padding: 8px 0; - - .pages-wrapper { - width: 100%; - padding: 0 8px; - display: flex; - align-items: center; - flex-direction: column; - gap: 6px; - } - - .tj-list-item { - height: 36px; - justify-content: start; - padding: 8px 12px; - gap: 10px; - margin: 0px !important; - color: var(--nav-item-label-color); - border-radius: var(--nav-item-pill-radius); - - &:hover { - background-color: var(--hovered-nav-item-pill-bg); - } - - &.tj-list-item-selected { - color: var(--selected-nav-item-label-color); - background-color: var(--selected-nav-item-pill-bg); - } - - .page-name { - font-size: 14px; - font-weight: 500; - line-height: 20px; - } - } - - .custom-icon { - line-height: 10px !important; - } - - .accordion-item { - width: 100%; - margin: 0 !important; - border-radius: 0 !important; - border: none; - - .accordion-body{ - padding: 0 0 0 32px !important; - border-bottom: 0px !important; - - .tj-list-item { - margin-top: 6px !important; - } - &.collapsed { - display: none; - } - } - } - - .page-group-wrapper { - height: 36px; - width: 100%; - padding: 8px 12px; - display: flex; - justify-content: space-between; - align-items: center; - gap: 4px; - border: none; - background-color: transparent; - border-radius: var(--nav-item-pill-radius); - color: var(--nav-item-label-color); - text-align: left; - - .group-info { + .pages-wrapper { width: 100%; + padding: 0 8px; display: flex; align-items: center; - justify-content: start; - gap: 10px; - - .page-name { - font-family: 'IBM Plex Sans'; - font-weight: 500; - font-size: 14px; - line-height: 20px; - } - } - - &:hover { - background-color: var(--hovered-nav-item-pill-bg); - } - - &.page-group-selected[data-state="closed"] { - color: var(--selected-nav-item-label-color); - background-color: var(--selected-nav-item-pill-bg); - } - - .tj-list-item { - padding-right: 0px !important; - } + flex-direction: column; + gap: 6px; } - - a.page-link { - border-radius: 0; - border: 0; - } - - a.page-link:hover { - color: white; - background-color: #4D72FA; - } - - a.page-link.active { - color: white; - background-color: #4D72FA; - } - } - .page-dark-mode-btn-wrapper { + .tj-list-item { + height: 36px; + justify-content: start; + padding: 8px 12px; + gap: 10px; + margin: 0px !important; + color: var(--nav-item-label-color); + border-radius: var(--nav-item-pill-radius); + + &:hover { + background-color: var(--hovered-nav-item-pill-bg); + } + + &.tj-list-item-selected { + color: var(--selected-nav-item-label-color); + background-color: var(--selected-nav-item-pill-bg); + } + + .page-name { + font-size: 14px; + font-weight: 500; + line-height: 20px; + } + } + + .custom-icon { + line-height: 10px !important; + } + + .accordion-item { + width: 100%; + margin: 0 !important; + border-radius: 0 !important; + border: none; + + .accordion-body { + padding: 0 0 0 32px !important; + border-bottom: 0px !important; + + .tj-list-item { + margin-top: 6px !important; + } + + &.collapsed { + display: none; + } + } + } + + .page-group-wrapper { + height: 36px; + width: 100%; + padding: 8px 12px; + display: flex; + justify-content: space-between; + align-items: center; + gap: 4px; + border: none; + background-color: transparent; + border-radius: var(--nav-item-pill-radius); + color: var(--nav-item-label-color); + text-align: left; + + .group-info { + width: 100%; + display: flex; + align-items: center; + justify-content: start; + gap: 10px; + + .page-name { + font-family: 'IBM Plex Sans'; + font-weight: 500; + font-size: 14px; + line-height: 20px; + } + } + + &:hover { + background-color: var(--hovered-nav-item-pill-bg); + } + + &.page-group-selected[data-state="closed"] { + color: var(--selected-nav-item-label-color); + background-color: var(--selected-nav-item-pill-bg); + } + + .tj-list-item { + padding-right: 0px !important; + } + } + + a.page-link { + border-radius: 0; + border: 0; + } + + a.page-link:hover { + color: white; + background-color: #4D72FA; + } + + a.page-link.active { + color: white; + background-color: #4D72FA; + } + } + + .page-dark-mode-btn-wrapper { background-color: var(--nav-menu-bg); display: flex; border-top: 1px solid var(--nav-menu-border); height: 57px; padding: 10px; justify-content: center; - } + } - .page-menu-scroll { + .page-menu-scroll { scrollbar-color: var(--interactive-hover) transparent !important; scrollbar-width: thin !important; - + &::-webkit-scrollbar-track { background: transparent !important; } @@ -816,8 +817,8 @@ &::-webkit-scrollbar-thumb { background: var(--interactive-hover) !important; } - } - } + } + } } .viewer { @@ -841,6 +842,7 @@ } } } + &.offset-top-bar-navigation { #sidebar-page-navigation { .navigation-area { @@ -954,10 +956,12 @@ height: 100%; z-index: 1000; - &:hover, &.active { + &:hover, + &.active { .navigation-area.navigation-hover-trigger { box-shadow: 0 0 0 1px #4af !important; } + .mobile-nav-container.navigation-hover-trigger { border: 1px solid #4af; } diff --git a/frontend/src/_styles/switch-branch-modal.scss b/frontend/src/_styles/switch-branch-modal.scss new file mode 100644 index 0000000000..8a5f786551 --- /dev/null +++ b/frontend/src/_styles/switch-branch-modal.scss @@ -0,0 +1,225 @@ +// Switch Branch Modal Styles +.switch-branch-modal { + .modal-dialog { + max-width: 424px; + width: 100%; + } + + .modal-content { + border-radius: 6px; + background: var(--slate1); + box-shadow: 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24, 40, 0.03); + } + + .modal-header { + border-bottom: 1px solid var(--slate6); + padding: 16px 24px 8px; + + .modal-title { + font-family: 'Inter', sans-serif; + font-size: 16px; + font-weight: 500; + line-height: 24px; + color: #11181c; + } + } + + .modal-body { + padding: 16px 12px; + } +} + +.switch-branch-modal-content { + display: flex; + flex-direction: column; + gap: 12px; + + // Search Section + .search-section { + display: flex; + flex-direction: column; + gap: 8px; + padding: 0 4px; + + .section-label { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate11); + text-transform: uppercase; + letter-spacing: -0.24px; + } + + .search-input-wrapper { + position: relative; + display: flex; + align-items: center; + gap: 12px; + padding: 7px 12px; + background: var(--slate1); + border: 1px solid var(--slate7); + border-radius: 6px; + height: 32px; + + svg { + flex-shrink: 0; + } + + .search-input { + flex: 1; + border: none; + background: none; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + line-height: 18px; + color: var(--slate12); + outline: none; + + &::placeholder { + color: var(--slate11); + } + } + } + } + + // Branch List + .branch-list-section { + display: flex; + flex-direction: column; + gap: 4px; + max-height: 300px; + overflow-y: auto; + + .branch-list-item { + display: flex; + gap: 8px; + padding: 6px 4px; + border-radius: 6px; + cursor: pointer; + transition: background-color 0.15s ease; + + &:hover { + background-color: var(--slate3); + } + + &.active { + .branch-list-name { + font-weight: 500; + } + } + + .branch-checkbox { + width: 16px; + height: 16px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .branch-list-content { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 2px; + + .branch-list-name { + font-family: 'Inter', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: var(--slate12); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .branch-list-meta { + font-family: 'IBM Plex Sans', sans-serif; + font-size: 11px; + font-weight: 400; + line-height: 16px; + color: var(--slate11); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + } + + .loading-state, + .empty-state { + display: flex; + align-items: center; + justify-content: center; + padding: 32px 16px; + color: var(--slate11); + font-size: 13px; + + .spinner { + width: 20px; + height: 20px; + border: 2px solid var(--slate6); + border-top-color: var(--indigo9); + border-radius: 50%; + animation: spin 0.6s linear infinite; + margin-right: 8px; + } + } + } + + // Modal Footer + .modal-footer-actions { + border-top: 1px solid var(--slate6); + display: flex; + gap: 8px; + padding: 16px 0 0; + + .footer-btn { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + gap: 6px; + padding: 5px 10px; + border-radius: 6px; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 12px; + font-weight: 500; + line-height: 18px; + cursor: pointer; + transition: all 0.15s ease; + border: 1px solid var(--slate6); + background: var(--slate1); + color: var(--slate12); + + &:hover { + background: var(--slate3); + } + + &.accent { + border-color: var(--indigo7); + + &:hover { + background: var(--indigo2); + } + + svg { + fill: var(--indigo9); + } + } + + svg { + flex-shrink: 0; + } + } + } +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/frontend/src/_styles/theme.scss b/frontend/src/_styles/theme.scss index 663aff7f85..73154805f8 100644 --- a/frontend/src/_styles/theme.scss +++ b/frontend/src/_styles/theme.scss @@ -14494,131 +14494,6 @@ tbody { } } -.git-sync-modal, -.modal-base { - - .create-commit-container, - .commit-info, - .pull-container, - .pushpull-container { - height: 260px !important; - - .form-control { - font-weight: 400; - font-size: 12px; - line-height: 20px; - color: var(--slate12); - } - - .form-group { - .tj-input-error-state { - border: 1px solid var(--tomato9) !important; - } - - .tj-input-error { - color: var(--tomato10) !important; - } - } - - .info-text { - color: var(--slate10); - } - - .tj-input-error { - color: var(--tomato10); - } - - .form-control.disabled { - background-color: var(--slate3) !important; - color: var(--slate9) !important; - } - - .last-commit-info { - background: var(--slate3); - - .message-info { - display: flex; - justify-content: space-between; - } - - .author-info { - font-size: 10px; - color: var(--slate11); - } - } - - .check-for-updates { - display: flex; - align-items: center; - color: var(--indigo9); - - svg { - path { - fill: var(--indigo9); - } - - rect { - fill: none; - } - } - - .loader-container { - height: unset !important; - - .primary-spin-loader { - width: 18px; - height: 18px; - margin-right: 5px; - } - } - } - } - - .modal-footer { - border-top: 1px solid var(--slate5); - padding: 1rem; - - .tj-btn-left-icon { - svg { - width: 20px; - height: 20px; - - path { - fill: var(--indigo1); - } - } - } - - .tj-large-btn { - font-weight: 500; - font-size: 14px; - } - } - - .modal-body { - .loader-container { - display: flex; - justify-content: center; - align-items: center; - height: 180px; - } - } - - .modal-base { - .tj-text-xxsm { - color: var(--slate11); - } - } - - .modal-header { - border-bottom: 1px solid var(--slate5) !important; - - .modal-title { - color: var(--slate12); - } - } -} - .custom-gap-7 { gap: 7px; } @@ -17891,22 +17766,6 @@ section.ai-message-prompt-input-wrapper { } } -.git-sync-modal { - width: 400px !important; - height: 484px !important; -} - -.dark-theme.git-sync-modal { - .modal-header { - border-bottom: 1px solid var(--slate5) !important; - } -} - -.git-sync-modal .modal-header .modal-title .push-pull-tabs .tab-push.active, -.git-sync-modal .modal-header .modal-title .push-pull-tabs .tab-pull.active { - border-bottom: 2px solid var(--indigo9) !important; -} - .custom_fc_frame { left: 40px !important; } diff --git a/frontend/src/_styles/versions.scss b/frontend/src/_styles/versions.scss index fbb7deedcc..f4dcc38488 100644 --- a/frontend/src/_styles/versions.scss +++ b/frontend/src/_styles/versions.scss @@ -18,7 +18,7 @@ background-color: #ffffff; color: var(--text-default); cursor: pointer; - box-shadow: var(--elevation-100-box-shadow); + box-shadow: var(--elevation-100-box-shadow); transition: box-shadow 0.12s ease, transform 0.08s ease; border-radius: 4px !important; outline: none; @@ -293,7 +293,7 @@ border-radius: 8px !important; padding: 0 !important; max-width: 300px !important; - box-shadow: var(--elevation-400-box-shadow) !important; + box-shadow: var(--elevation-400-box-shadow) !important; text-align: left !important; } @@ -309,14 +309,17 @@ .tooltip.version-tooltip.bs-tooltip-start .tooltip-arrow::after { border-left-color: #ffffff !important; } + .tooltip.version-tooltip.bs-tooltip-right .tooltip-arrow::before, .tooltip.version-tooltip.bs-tooltip-right .tooltip-arrow::after { border-right-color: #ffffff !important; } + .tooltip.version-tooltip.bs-tooltip-top .tooltip-arrow::before, .tooltip.version-tooltip.bs-tooltip-top .tooltip-arrow::after { border-top-color: #ffffff !important; } + .tooltip.version-tooltip.bs-tooltip-bottom .tooltip-arrow::before, .tooltip.version-tooltip.bs-tooltip-bottom .tooltip-arrow::after { border-bottom-color: #ffffff !important; diff --git a/frontend/src/_ui/Icon/solidIcons/Check2.jsx b/frontend/src/_ui/Icon/solidIcons/Check2.jsx new file mode 100644 index 0000000000..0596d2b887 --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/Check2.jsx @@ -0,0 +1,23 @@ +import React from 'react'; + +const Check2 = ({ fill = '#3E63DD', width = '16', className = '', viewBox = '0 0 16 16', height }) => { + return ( + + + + ); +}; + +export default Check2; diff --git a/frontend/src/_ui/Icon/solidIcons/ChevronDownSmall.jsx b/frontend/src/_ui/Icon/solidIcons/ChevronDownSmall.jsx new file mode 100644 index 0000000000..0878293daa --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/ChevronDownSmall.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +const ChevronDownSmall = ({ fill = '#C1C8CD', width = '12', className = '', viewBox = '0 0 12 12' }) => ( + + + +); + +export default ChevronDownSmall; diff --git a/frontend/src/_ui/Icon/solidIcons/CircleDot.jsx b/frontend/src/_ui/Icon/solidIcons/CircleDot.jsx new file mode 100644 index 0000000000..677103a680 --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/CircleDot.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +const CircleDot = ({ fill = '#C1C8CD', width = '14', className = '', viewBox = '0 0 16 16' }) => ( + + + +); + +export default CircleDot; diff --git a/frontend/src/_ui/Icon/solidIcons/Commit.jsx b/frontend/src/_ui/Icon/solidIcons/Commit.jsx new file mode 100644 index 0000000000..86e9f4f03a --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/Commit.jsx @@ -0,0 +1,22 @@ +import React from 'react'; + +const Commit = ({ fill = 'var(--icon-default)', width = '25', className = '', viewBox = '0 0 25 25' }) => ( + + + +); + +export default Commit; diff --git a/frontend/src/_ui/Icon/solidIcons/ExternalLinkIcon.jsx b/frontend/src/_ui/Icon/solidIcons/ExternalLinkIcon.jsx new file mode 100644 index 0000000000..d55c7474b8 --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/ExternalLinkIcon.jsx @@ -0,0 +1,28 @@ +import React from 'react'; + +const ExternalLinkIcon = ({ fill = '#C1C8CD', width = '16', className = '', viewBox = '0 0 16 16' }) => ( + + + + +); + +export default ExternalLinkIcon; diff --git a/frontend/src/_ui/Icon/solidIcons/GitBranch.jsx b/frontend/src/_ui/Icon/solidIcons/GitBranch.jsx new file mode 100644 index 0000000000..693d6ebe27 --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/GitBranch.jsx @@ -0,0 +1,19 @@ +import React from 'react'; + +const GitBranch = ({ fill = '#C1C8CD', width = '16', className = '', viewBox = '0 0 16 16' }) => ( + + + +); + +export default GitBranch; diff --git a/frontend/src/_ui/Icon/solidIcons/GitMergeIcon.jsx b/frontend/src/_ui/Icon/solidIcons/GitMergeIcon.jsx new file mode 100644 index 0000000000..a5741a36c1 --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/GitMergeIcon.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +const GitMergeIcon = ({ fill = '#C1C8CD', width = '16', className = '', viewBox = '0 0 16 16' }) => ( + + + +); + +export default GitMergeIcon; diff --git a/frontend/src/_ui/Icon/solidIcons/LockClosed.jsx b/frontend/src/_ui/Icon/solidIcons/LockClosed.jsx new file mode 100644 index 0000000000..32414b9c6d --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/LockClosed.jsx @@ -0,0 +1,19 @@ +import React from 'react'; + +const LockClosed = ({ fill = '#C1C8CD', width = '16', className = '', viewBox = '0 0 16 16' }) => ( + + + +); + +export default LockClosed; diff --git a/frontend/src/_ui/Icon/solidIcons/PlusIcon.jsx b/frontend/src/_ui/Icon/solidIcons/PlusIcon.jsx new file mode 100644 index 0000000000..5860b5d67e --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/PlusIcon.jsx @@ -0,0 +1,19 @@ +import React from 'react'; + +const PlusIcon = ({ fill = '#C1C8CD', width = '14', className = '', viewBox = '0 0 14 14' }) => ( + + + +); + +export default PlusIcon; diff --git a/frontend/src/_ui/Icon/solidIcons/Refresh.jsx b/frontend/src/_ui/Icon/solidIcons/Refresh.jsx new file mode 100644 index 0000000000..b2bf9ead1f --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/Refresh.jsx @@ -0,0 +1,21 @@ +import React from 'react'; + +const Refresh = ({ fill = 'var(--icon-default)', width = '14', className = '', viewBox = '0 0 14 14' }) => ( + + + +); + +export default Refresh; diff --git a/frontend/src/_ui/Icon/solidIcons/RocketIcon.jsx b/frontend/src/_ui/Icon/solidIcons/RocketIcon.jsx new file mode 100644 index 0000000000..d14fba96e1 --- /dev/null +++ b/frontend/src/_ui/Icon/solidIcons/RocketIcon.jsx @@ -0,0 +1,33 @@ +import React from 'react'; + +const RocketIcon = ({ fill = '#C1C8CD', width = '16', className = '', viewBox = '0 0 16 16' }) => ( + + + + + + +); + +export default RocketIcon; diff --git a/frontend/src/_ui/Icon/solidIcons/index.js b/frontend/src/_ui/Icon/solidIcons/index.js index 8bec9cdeab..b9f32c579a 100644 --- a/frontend/src/_ui/Icon/solidIcons/index.js +++ b/frontend/src/_ui/Icon/solidIcons/index.js @@ -27,12 +27,15 @@ import CheveronDown from './CheveronDown.jsx'; import CheveronLeft from './CheveronLeft.jsx'; import CheveronRight from './CheveronRight.jsx'; import CheveronUp from './CheveronUp.jsx'; +import ChevronDownSmall from './ChevronDownSmall.jsx'; +import CircleDot from './CircleDot.jsx'; import ClearRectangle from './ClearRectangle.jsx'; import CaretDown from './CaretDown.jsx'; import CaretUp from './CaretUp.jsx'; import Clock from './Clock.jsx'; import CursorClick from './CursorClick.jsx'; import LockGradient from './LockGradient.jsx'; +import LockClosed from './LockClosed.jsx'; import DatasourceGradient from './DatasourceGradient.jsx'; import CoinIcon from './CoinIcon.jsx'; import Column from './Column.jsx'; @@ -52,6 +55,7 @@ import EnterpriseSmall from './EnterpriseSmall.jsx'; import Eye from './Eye.jsx'; import Eye1 from './Eye1.jsx'; import EyeDisable from './EyeDisable.jsx'; +import ExternalLinkIcon from './ExternalLinkIcon.jsx'; import Expand from './Expand.jsx'; import File01 from './File01.jsx'; import FileDownload from './FileDownload.jsx'; @@ -62,6 +66,8 @@ import Folder from './Folder.jsx'; import FolderDownload from './FolderDownload.jsx'; import FolderUpload from './FolderUpload.jsx'; import GitSync from './GitSync.jsx'; +import GitBranch from './GitBranch.jsx'; +import GitMergeIcon from './GitMergeIcon.jsx'; import FullOuterJoin from './FullOuterJoin.jsx'; import Globe from './Globe.jsx'; import Options from './Options.jsx'; @@ -98,6 +104,7 @@ import Page from './Page.jsx'; import PageAdd from './PageAdd.jsx'; import PageUpload from './PageUpload.jsx'; import Pin from './Pin.jsx'; +import PlusIcon from './PlusIcon.jsx'; import Unpin from './Unpin.jsx'; import AlignRight from './AlignRight'; import Play from './Play.jsx'; @@ -111,6 +118,7 @@ import Remove from './Remove.jsx'; import Remove01 from './Remove01.jsx'; import Remove03 from './Remove03.jsx'; import RemoveRectangle from './RemoveRectangle.jsx'; +import Refresh from './Refresh.jsx'; import RightArrow from './RightArrow.jsx'; import RightOuterJoin from './RightOuterJoin.jsx'; import Row from './Row.jsx'; @@ -170,6 +178,7 @@ import CloudInvalid from './CloudInvalid.jsx'; import CloudValid from './CloudValid.jsx'; import LayersVersion from './LayersVersion.jsx'; import Comments from './Comments'; +import Commit from './Commit'; import Inspect from './Inspect.jsx'; import ArrowForwardUp from './ArrowForwardUp.jsx'; import ArrowBackUp from './ArrowBackUp.jsx'; @@ -177,6 +186,7 @@ import CheveronLeftDouble from './CheveronLeftDouble.jsx'; import CheveronRightDouble from './CheveronRightDouble.jsx'; import Dot from './Dot.jsx'; import Check from './Check.jsx'; +import Check2 from './Check2.jsx'; import Editable from './Editable.jsx'; import Save from './Save.jsx'; import Cross from './Cross.jsx'; @@ -229,6 +239,7 @@ import AITag from './AITag.jsx'; import SectionCollapse from './SectionCollapse.jsx'; import SectionExpand from './SectionExpand.jsx'; import Reset from './Reset.jsx'; +import RocketIcon from './RocketIcon.jsx'; import Outbound from './Outbound.jsx'; import AddPageGroupIcon from './AddPageGroup.jsx'; import PageIcon from './PageIcon.jsx'; @@ -394,6 +405,10 @@ const Icon = (props) => { return ; case 'cheveronup': return ; + case 'chevrondownsmall': + return ; + case 'circledot': + return ; case 'circularToggleDisabled': return ; case 'circularToggleEnabled': @@ -456,6 +471,8 @@ const Icon = (props) => { return ; case 'lockGradient': return ; + case 'lockclosed': + return ; case 'datasourceGradient': return ; case 'enterbutton': @@ -466,6 +483,8 @@ const Icon = (props) => { return ; case 'eyedisable': return ; + case 'externallink': + return ; case 'expand': return ; case 'file-code': @@ -488,6 +507,10 @@ const Icon = (props) => { return ; case 'gitsync': return ; + case 'gitbranch': + return ; + case 'gitmerge': + return ; case 'foreignkey': return ; case 'fullouterjoin': @@ -588,6 +611,8 @@ const Icon = (props) => { return ; case 'plus': return ; + case 'plusicon': + return ; case 'plus01': return ; case 'plusrectangle': @@ -598,6 +623,8 @@ const Icon = (props) => { return ; case 'reload': return ; + case 'refresh': + return ; case 'read': return ; case 'reloaderror': @@ -618,6 +645,8 @@ const Icon = (props) => { return ; case 'reset': return ; + case 'rocket': + return ; case 'retry': return ; case 'sadrectangle': @@ -646,6 +675,8 @@ const Icon = (props) => { return ; case 'comments': return ; + case 'commit': + return ; case 'corners': return ; case 'share': @@ -736,6 +767,8 @@ const Icon = (props) => { return ; case 'check': return ; + case 'check2': + return ; case 'editable': return ; case 'minimize': diff --git a/frontend/src/modules/common/components/BasePromoteReleaseButton/components/PromoteVersionButton/components/PromoteConfirmationModal/PromoteConfirmationModal.jsx b/frontend/src/modules/common/components/BasePromoteReleaseButton/components/PromoteVersionButton/components/PromoteConfirmationModal/PromoteConfirmationModal.jsx index 9edd06cb5e..9be2f74922 100644 --- a/frontend/src/modules/common/components/BasePromoteReleaseButton/components/PromoteVersionButton/components/PromoteConfirmationModal/PromoteConfirmationModal.jsx +++ b/frontend/src/modules/common/components/BasePromoteReleaseButton/components/PromoteVersionButton/components/PromoteConfirmationModal/PromoteConfirmationModal.jsx @@ -54,39 +54,47 @@ const PromoteConfirmationModal = React.memo(({ data, onClose, editingVersion }) versionIdToPromote, async (response) => { toast.success(`${versionToPromote.name} has been promoted to ${data.target.name}!`); - if ( - data?.current?.name == 'development' && - (creationMode !== 'GIT' || (creationMode === 'GIT' && allowAppEdit)) - ) { - try { - const gitData = await gitSyncService.getAppConfig(current_organization_id, versionToPromote?.id); - const appGit = gitData?.app_git; - if (appGit && appGit?.org_git?.auto_commit) { - const body = { - gitAppName: appGit?.git_app_name, - versionId: versionToPromote?.id, - lastCommitMessage: ` ${versionToPromote.name} Version of app ${appGit?.git_app_name} promoted from development to staging`, - gitVersionName: versionToPromote?.name, - }; - await gitSyncService.gitPush(body, appGit?.id, versionToPromote?.id); - toast.success('Changes committed successfully'); - } - } catch (err) { - const status = err?.statusCode; - const error = err?.error; - if ( - !(status === 404 && error === 'Git Configuration not found') && - !(error === 'No Git Provider is enabled for the workspace') - ) { - toast.error(error, { - style: { - width: 'auto', - maxWidth: '339px', - }, - }); - } - } + setPromotingEnvironment(false); + onClose(); + + { + /* Can clean when autoCommit is removed completely */ } + // if ( + // data?.current?.name == 'development' && + // (creationMode !== 'GIT' || (creationMode === 'GIT' && allowAppEdit)) + // ) { + // try { + // const gitData = await gitSyncService.getAppConfig(current_organization_id, versionToPromote?.id); + // const appGit = gitData?.app_git; + // if (appGit && appGit?.org_git?.auto_commit) { + // const body = { + // gitAppName: appGit?.git_app_name, + // versionId: versionToPromote?.id, + // lastCommitMessage: ` ${versionToPromote.name} Version of app ${appGit?.git_app_name} promoted from development to staging`, + // gitVersionName: versionToPromote?.name, + // allowMasterPush: true, + // }; + // await gitSyncService.gitPush(body, appGit?.id, versionToPromote?.id); + // toast.success('Changes committed successfully'); + // } + // } catch (err) { + // const status = err?.statusCode; + // const error = err?.error; + // if ( + // !(status === 404 && error === 'Git Configuration not found') && + // !(error === 'No Git Provider is enabled for the workspace') + // ) { + // toast.error(error, { + // style: { + // width: 'auto', + // maxWidth: '339px', + // }, + // }); + // } + // } + // } + // setSelectedEnvironment(response); // set env id here-----> state update // appEnvironmentChanged(response, true); diff --git a/plugins/package-lock.json b/plugins/package-lock.json index 207a95b361..60810d07fd 100644 --- a/plugins/package-lock.json +++ b/plugins/package-lock.json @@ -69,7 +69,7 @@ "eslint-plugin-jest": "^24.7.0", "eslint-plugin-prettier": "^3.4.1", "jest": "^27.5.1", - "lerna": "^9.0.3", + "lerna": "^5.5.2", "prettier": "^2.8.3", "rimraf": "^3.0.2", "ts-jest": "^27.1.5" @@ -303,856 +303,737 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-athena": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-athena/-/client-athena-3.1000.0.tgz", - "integrity": "sha512-/b5RJParCzsMmiRmMR6mAeHSl3tGAN8tyweRBWGxFDyE/cUSIVve9O+pk0cXsuRaHWvl/M1Xp8x3gQSgMSFgDA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/credential-provider-node": "^3.972.14", - "@aws-sdk/middleware-host-header": "^3.972.6", - "@aws-sdk/middleware-logger": "^3.972.6", - "@aws-sdk/middleware-recursion-detection": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/region-config-resolver": "^3.972.6", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@aws-sdk/util-user-agent-browser": "^3.972.6", - "@aws-sdk/util-user-agent-node": "^3.973.0", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/hash-node": "^4.2.10", - "@smithy/invalid-dependency": "^4.2.10", - "@smithy/middleware-content-length": "^4.2.10", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-retry": "^4.4.37", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.36", - "@smithy/util-defaults-mode-node": "^4.2.39", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/util-utf8": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1000.0.tgz", - "integrity": "sha512-7PtY49oxAo0rzkXZ1ulumtRL4QYi30Q5AMJtqJhYCHc1VZr0I2f0LHxiwovzquqUPzmTArgY6LjcPB7bkB/54w==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.958.0.tgz", + "integrity": "sha512-Sj+r1e1Hqn9/2Z3FYiOL1C7thHht3ZihEB2/yInY1hxA5WJtdWL+OKMd0m+rJy9ZzRWPYSDPFLql+NGtaMKNKQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/credential-provider-node": "^3.972.14", - "@aws-sdk/middleware-host-header": "^3.972.6", - "@aws-sdk/middleware-logger": "^3.972.6", - "@aws-sdk/middleware-recursion-detection": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/region-config-resolver": "^3.972.6", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@aws-sdk/util-user-agent-browser": "^3.972.6", - "@aws-sdk/util-user-agent-node": "^3.973.0", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/hash-node": "^4.2.10", - "@smithy/invalid-dependency": "^4.2.10", - "@smithy/middleware-content-length": "^4.2.10", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-retry": "^4.4.37", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.36", - "@smithy/util-defaults-mode-node": "^4.2.39", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/util-utf8": "^4.2.1", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/credential-provider-node": "3.958.0", + "@aws-sdk/middleware-host-header": "3.957.0", + "@aws-sdk/middleware-logger": "3.957.0", + "@aws-sdk/middleware-recursion-detection": "3.957.0", + "@aws-sdk/middleware-user-agent": "3.957.0", + "@aws-sdk/region-config-resolver": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-endpoints": "3.957.0", + "@aws-sdk/util-user-agent-browser": "3.957.0", + "@aws-sdk/util-user-agent-node": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@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.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.1000.0.tgz", - "integrity": "sha512-S0M9ndVgGiupQEX9M6yLIKx2Iw1Z/lnZR1j5guuR76sqteQM6jsQseTJepq0hJ9SGGpzSwMucYJxETQDHsgFhQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/credential-provider-node": "^3.972.14", - "@aws-sdk/dynamodb-codec": "^3.972.16", - "@aws-sdk/middleware-endpoint-discovery": "^3.972.6", - "@aws-sdk/middleware-host-header": "^3.972.6", - "@aws-sdk/middleware-logger": "^3.972.6", - "@aws-sdk/middleware-recursion-detection": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/region-config-resolver": "^3.972.6", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@aws-sdk/util-user-agent-browser": "^3.972.6", - "@aws-sdk/util-user-agent-node": "^3.973.0", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/hash-node": "^4.2.10", - "@smithy/invalid-dependency": "^4.2.10", - "@smithy/middleware-content-length": "^4.2.10", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-retry": "^4.4.37", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.36", - "@smithy/util-defaults-mode-node": "^4.2.39", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/util-utf8": "^4.2.1", - "@smithy/util-waiter": "^4.2.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1000.0.tgz", - "integrity": "sha512-7kPy33qNGq3NfwHC0412T6LDK1bp4+eiPzetX0sVd9cpTSXuQDKpoOFnB0Njj6uZjJDcLS3n2OeyarwwgkQ0Ow==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.958.0.tgz", + "integrity": "sha512-ol8Sw37AToBWb6PjRuT/Wu40SrrZSA0N4F7U3yTkjUNX0lirfO1VFLZ0hZtZplVJv8GNPITbiczxQ8VjxESXxg==", "license": "Apache-2.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.973.15", - "@aws-sdk/credential-provider-node": "^3.972.14", - "@aws-sdk/middleware-bucket-endpoint": "^3.972.6", - "@aws-sdk/middleware-expect-continue": "^3.972.6", - "@aws-sdk/middleware-flexible-checksums": "^3.973.1", - "@aws-sdk/middleware-host-header": "^3.972.6", - "@aws-sdk/middleware-location-constraint": "^3.972.6", - "@aws-sdk/middleware-logger": "^3.972.6", - "@aws-sdk/middleware-recursion-detection": "^3.972.6", - "@aws-sdk/middleware-sdk-s3": "^3.972.15", - "@aws-sdk/middleware-ssec": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/region-config-resolver": "^3.972.6", - "@aws-sdk/signature-v4-multi-region": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@aws-sdk/util-user-agent-browser": "^3.972.6", - "@aws-sdk/util-user-agent-node": "^3.973.0", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/eventstream-serde-browser": "^4.2.10", - "@smithy/eventstream-serde-config-resolver": "^4.3.10", - "@smithy/eventstream-serde-node": "^4.2.10", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/hash-blob-browser": "^4.2.11", - "@smithy/hash-node": "^4.2.10", - "@smithy/hash-stream-node": "^4.2.10", - "@smithy/invalid-dependency": "^4.2.10", - "@smithy/md5-js": "^4.2.10", - "@smithy/middleware-content-length": "^4.2.10", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-retry": "^4.4.37", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.36", - "@smithy/util-defaults-mode-node": "^4.2.39", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/util-stream": "^4.5.15", - "@smithy/util-utf8": "^4.2.1", - "@smithy/util-waiter": "^4.2.10", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/credential-provider-node": "3.958.0", + "@aws-sdk/middleware-bucket-endpoint": "3.957.0", + "@aws-sdk/middleware-expect-continue": "3.957.0", + "@aws-sdk/middleware-flexible-checksums": "3.957.0", + "@aws-sdk/middleware-host-header": "3.957.0", + "@aws-sdk/middleware-location-constraint": "3.957.0", + "@aws-sdk/middleware-logger": "3.957.0", + "@aws-sdk/middleware-recursion-detection": "3.957.0", + "@aws-sdk/middleware-sdk-s3": "3.957.0", + "@aws-sdk/middleware-ssec": "3.957.0", + "@aws-sdk/middleware-user-agent": "3.957.0", + "@aws-sdk/region-config-resolver": "3.957.0", + "@aws-sdk/signature-v4-multi-region": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-endpoints": "3.957.0", + "@aws-sdk/util-user-agent-browser": "3.957.0", + "@aws-sdk/util-user-agent-node": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/eventstream-serde-browser": "^4.2.7", + "@smithy/eventstream-serde-config-resolver": "^4.3.7", + "@smithy/eventstream-serde-node": "^4.2.7", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-blob-browser": "^4.2.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/hash-stream-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/md5-js": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@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.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.7", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-ses": { + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.958.0.tgz", + "integrity": "sha512-jBHEGPODgAg7whgQBOsRqCTvzc2Yw0bqi9a6C8KPvFZq1PK8rfn9ly9lzJdLz2dm/gXPrp0jSXl+jWhsh/lLFw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/credential-provider-node": "3.958.0", + "@aws-sdk/middleware-host-header": "3.957.0", + "@aws-sdk/middleware-logger": "3.957.0", + "@aws-sdk/middleware-recursion-detection": "3.957.0", + "@aws-sdk/middleware-user-agent": "3.957.0", + "@aws-sdk/region-config-resolver": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-endpoints": "3.957.0", + "@aws-sdk/util-user-agent-browser": "3.957.0", + "@aws-sdk/util-user-agent-node": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@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.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sesv2": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.1000.0.tgz", - "integrity": "sha512-RImSQzSPCMhWC+uR0LEkvpY2/FQShP8i67I6Nl4ZOsggO1zLbwhw9WdNrb2b0Lcq42ptaGFyk2j767GHrt+YiA==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.958.0.tgz", + "integrity": "sha512-3x3n8IIxIMAkdpt9wy9zS7MO2lqTcJwQTdHMn6BlD7YUohb+r5Q4KCOEQ2uHWd4WIJv2tlbXnfypHaXReO/WXA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/credential-provider-node": "^3.972.14", - "@aws-sdk/middleware-host-header": "^3.972.6", - "@aws-sdk/middleware-logger": "^3.972.6", - "@aws-sdk/middleware-recursion-detection": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/region-config-resolver": "^3.972.6", - "@aws-sdk/signature-v4-multi-region": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@aws-sdk/util-user-agent-browser": "^3.972.6", - "@aws-sdk/util-user-agent-node": "^3.973.0", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/hash-node": "^4.2.10", - "@smithy/invalid-dependency": "^4.2.10", - "@smithy/middleware-content-length": "^4.2.10", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-retry": "^4.4.37", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.36", - "@smithy/util-defaults-mode-node": "^4.2.39", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/util-utf8": "^4.2.1", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/credential-provider-node": "3.958.0", + "@aws-sdk/middleware-host-header": "3.957.0", + "@aws-sdk/middleware-logger": "3.957.0", + "@aws-sdk/middleware-recursion-detection": "3.957.0", + "@aws-sdk/middleware-user-agent": "3.957.0", + "@aws-sdk/region-config-resolver": "3.957.0", + "@aws-sdk/signature-v4-multi-region": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-endpoints": "3.957.0", + "@aws-sdk/util-user-agent-browser": "3.957.0", + "@aws-sdk/util-user-agent-node": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@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.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.1000.0.tgz", - "integrity": "sha512-PMUloaoajk/YxLWh4OFC5H8wauISkeG5/OS/I0ZeptMVq36hKQmJgYFhOqcCWAm6u/88JX9XztmKCTX8CyFPVg==", + "node_modules/@aws-sdk/client-sso": { + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.958.0.tgz", + "integrity": "sha512-6qNCIeaMzKzfqasy2nNRuYnMuaMebCcCPP4J2CVGkA8QYMbIVKPlkn9bpB20Vxe6H/r3jtCCLQaOJjVTx/6dXg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/credential-provider-node": "^3.972.14", - "@aws-sdk/middleware-host-header": "^3.972.6", - "@aws-sdk/middleware-logger": "^3.972.6", - "@aws-sdk/middleware-recursion-detection": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/region-config-resolver": "^3.972.6", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@aws-sdk/util-user-agent-browser": "^3.972.6", - "@aws-sdk/util-user-agent-node": "^3.973.0", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/hash-node": "^4.2.10", - "@smithy/invalid-dependency": "^4.2.10", - "@smithy/middleware-content-length": "^4.2.10", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-retry": "^4.4.37", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.36", - "@smithy/util-defaults-mode-node": "^4.2.39", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/util-utf8": "^4.2.1", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/middleware-host-header": "3.957.0", + "@aws-sdk/middleware-logger": "3.957.0", + "@aws-sdk/middleware-recursion-detection": "3.957.0", + "@aws-sdk/middleware-user-agent": "3.957.0", + "@aws-sdk/region-config-resolver": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-endpoints": "3.957.0", + "@aws-sdk/util-user-agent-browser": "3.957.0", + "@aws-sdk/util-user-agent-node": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@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.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.973.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.15.tgz", - "integrity": "sha512-AlC0oQ1/mdJ8vCIqu524j5RB7M8i8E24bbkZmya1CuiQxkY7SdIZAyw7NDNMGaNINQFq/8oGRMX0HeOfCVsl/A==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.957.0.tgz", + "integrity": "sha512-DrZgDnF1lQZv75a52nFWs6MExihJF2GZB6ETZRqr6jMwhrk2kbJPUtvgbifwcL7AYmVqHQDJBrR/MqkwwFCpiw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/xml-builder": "^3.972.8", - "@smithy/core": "^3.23.6", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/signature-v4": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-utf8": "^4.2.1", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/xml-builder": "3.957.0", + "@smithy/core": "^3.20.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/crc64-nvme": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.3.tgz", - "integrity": "sha512-UExeK+EFiq5LAcbHm96CQLSia+5pvpUVSAsVApscBzayb7/6dJBJKwV4/onsk4VbWSmqxDMcfuTD+pC4RxgZHg==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.957.0.tgz", + "integrity": "sha512-qSwSfI+qBU9HDsd6/4fM9faCxYJx2yDuHtj+NVOQ6XYDWQzFab/hUdwuKZ77Pi6goLF1pBZhJ2azaC2w7LbnTA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.6.tgz", - "integrity": "sha512-RJqEZYFoXkBTVCwSJuYFd311qc/Q/cBJ8BH08+ggX/rUTWw47TUEyZlxzyTlKfP7DoXG4Khu/TX+pzU6godEGQ==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.958.0.tgz", + "integrity": "sha512-O+j43kTMoh0jIgXU5C68aA+KWqYCpQ4MiYMIW6WahHGiKOBfk/N1EEifZkY/BIYMNTipItyFI4RROQhZhT/TxA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/nested-clients": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/property-provider": "^4.2.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/client-cognito-identity": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.13.tgz", - "integrity": "sha512-6ljXKIQ22WFKyIs1jbORIkGanySBHaPPTOI4OxACP5WXgbcR0nDYfqNJfXEGwCK7IzHdNbCSFsNKKs0qCexR8Q==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.957.0.tgz", + "integrity": "sha512-475mkhGaWCr+Z52fOOVb/q2VHuNvqEDixlYIkeaO6xJ6t9qR0wpLt4hOQaR6zR1wfZV0SlE7d8RErdYq/PByog==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/types": "^3.973.4", - "@smithy/property-provider": "^4.2.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.15.tgz", - "integrity": "sha512-dJuSTreu/T8f24SHDNTjd7eQ4rabr0TzPh2UTCwYexQtzG3nTDKm1e5eIdhiroTMDkPEJeY+WPkA6F9wod/20A==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.957.0.tgz", + "integrity": "sha512-8dS55QHRxXgJlHkEYaCGZIhieCs9NU1HU1BcqQ4RfUdSsfRdxxktqUKgCnBnOOn0oD3PPA8cQOCAVgIyRb3Rfw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/types": "^3.973.4", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/property-provider": "^4.2.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/util-stream": "^4.5.15", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.13.tgz", - "integrity": "sha512-JKSoGb7XeabZLBJptpqoZIFbROUIS65NuQnEHGOpuT9GuuZwag2qciKANiDLFiYk4u8nSrJC9JIOnWKVvPVjeA==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.958.0.tgz", + "integrity": "sha512-u7twvZa1/6GWmPBZs6DbjlegCoNzNjBsMS/6fvh5quByYrcJr/uLd8YEr7S3UIq4kR/gSnHqcae7y2nL2bqZdg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/credential-provider-env": "^3.972.13", - "@aws-sdk/credential-provider-http": "^3.972.15", - "@aws-sdk/credential-provider-login": "^3.972.13", - "@aws-sdk/credential-provider-process": "^3.972.13", - "@aws-sdk/credential-provider-sso": "^3.972.13", - "@aws-sdk/credential-provider-web-identity": "^3.972.13", - "@aws-sdk/nested-clients": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/credential-provider-imds": "^4.2.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/credential-provider-env": "3.957.0", + "@aws-sdk/credential-provider-http": "3.957.0", + "@aws-sdk/credential-provider-login": "3.958.0", + "@aws-sdk/credential-provider-process": "3.957.0", + "@aws-sdk/credential-provider-sso": "3.958.0", + "@aws-sdk/credential-provider-web-identity": "3.958.0", + "@aws-sdk/nested-clients": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.13.tgz", - "integrity": "sha512-RtYcrxdnJHKY8MFQGLltCURcjuMjnaQpAxPE6+/QEdDHHItMKZgabRe/KScX737F9vJMQsmJy9EmMOkCnoC1JQ==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.958.0.tgz", + "integrity": "sha512-sDwtDnBSszUIbzbOORGh5gmXGl9aK25+BHb4gb1aVlqB+nNL2+IUEJA62+CE55lXSH8qXF90paivjK8tOHTwPA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/nested-clients": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/property-provider": "^4.2.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/nested-clients": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.14", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.14.tgz", - "integrity": "sha512-WqoC2aliIjQM/L3oFf6j+op/enT2i9Cc4UTxxMEKrJNECkq4/PlKE5BOjSYFcq6G9mz65EFbXJh7zOU4CvjSKQ==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.958.0.tgz", + "integrity": "sha512-vdoZbNG2dt66I7EpN3fKCzi6fp9xjIiwEA/vVVgqO4wXCGw8rKPIdDUus4e13VvTr330uQs2W0UNg/7AgtquEQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.13", - "@aws-sdk/credential-provider-http": "^3.972.15", - "@aws-sdk/credential-provider-ini": "^3.972.13", - "@aws-sdk/credential-provider-process": "^3.972.13", - "@aws-sdk/credential-provider-sso": "^3.972.13", - "@aws-sdk/credential-provider-web-identity": "^3.972.13", - "@aws-sdk/types": "^3.973.4", - "@smithy/credential-provider-imds": "^4.2.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@aws-sdk/credential-provider-env": "3.957.0", + "@aws-sdk/credential-provider-http": "3.957.0", + "@aws-sdk/credential-provider-ini": "3.958.0", + "@aws-sdk/credential-provider-process": "3.957.0", + "@aws-sdk/credential-provider-sso": "3.958.0", + "@aws-sdk/credential-provider-web-identity": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.13.tgz", - "integrity": "sha512-rsRG0LQA4VR+jnDyuqtXi2CePYSmfm5GNL9KxiW8DSe25YwJSr06W8TdUfONAC+rjsTI+aIH2rBGG5FjMeANrw==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.957.0.tgz", + "integrity": "sha512-/KIz9kadwbeLy6SKvT79W81Y+hb/8LMDyeloA2zhouE28hmne+hLn0wNCQXAAupFFlYOAtZR2NTBs7HBAReJlg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/types": "^3.973.4", - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.13.tgz", - "integrity": "sha512-fr0UU1wx8kNHDhTQBXioc/YviSW8iXuAxHvnH7eQUtn8F8o/FU3uu6EUMvAQgyvn7Ne5QFnC0Cj0BFlwCk+RFw==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.958.0.tgz", + "integrity": "sha512-CBYHJ5ufp8HC4q+o7IJejCUctJXWaksgpmoFpXerbjAso7/Fg7LLUu9inXVOxlHKLlvYekDXjIUBXDJS2WYdgg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/nested-clients": "^3.996.3", - "@aws-sdk/token-providers": "3.999.0", - "@aws-sdk/types": "^3.973.4", - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@aws-sdk/client-sso": "3.958.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/token-providers": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.13.tgz", - "integrity": "sha512-a6iFMh1pgUH0TdcouBppLJUfPM7Yd3R9S1xFodPtCRoLqCz2RQFA3qjA8x4112PVYXEd4/pHX2eihapq39w0rA==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.958.0.tgz", + "integrity": "sha512-dgnvwjMq5Y66WozzUzxNkCFap+umHUtqMMKlr8z/vl9NYMLem/WUbWNpFFOVFWquXikc+ewtpBMR4KEDXfZ+KA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/nested-clients": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/nested-clients": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1000.0.tgz", - "integrity": "sha512-J0pBgTZ2b3UCnj+NQTPtWYjrEUne2aGwq1Xuuw8P2cIMpPBYJc39e59oYoRGpNseUXqcjkh0nLtWqZREEeMvkg==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.958.0.tgz", + "integrity": "sha512-HSyfH4f3uG63enBz2KOg25lcEUNPffUVIWcjQCBMIntsojBAOOHcGjuwiKvhwL5tt4nqTAoTXTMZ+drKYM5IAg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.1000.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/credential-provider-cognito-identity": "^3.972.6", - "@aws-sdk/credential-provider-env": "^3.972.13", - "@aws-sdk/credential-provider-http": "^3.972.15", - "@aws-sdk/credential-provider-ini": "^3.972.13", - "@aws-sdk/credential-provider-login": "^3.972.13", - "@aws-sdk/credential-provider-node": "^3.972.14", - "@aws-sdk/credential-provider-process": "^3.972.13", - "@aws-sdk/credential-provider-sso": "^3.972.13", - "@aws-sdk/credential-provider-web-identity": "^3.972.13", - "@aws-sdk/nested-clients": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/credential-provider-imds": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/client-cognito-identity": "3.958.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/credential-provider-cognito-identity": "3.958.0", + "@aws-sdk/credential-provider-env": "3.957.0", + "@aws-sdk/credential-provider-http": "3.957.0", + "@aws-sdk/credential-provider-ini": "3.958.0", + "@aws-sdk/credential-provider-login": "3.958.0", + "@aws-sdk/credential-provider-node": "3.958.0", + "@aws-sdk/credential-provider-process": "3.957.0", + "@aws-sdk/credential-provider-sso": "3.958.0", + "@aws-sdk/credential-provider-web-identity": "3.958.0", + "@aws-sdk/nested-clients": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/dynamodb-codec": { - "version": "3.972.16", - "resolved": "https://registry.npmjs.org/@aws-sdk/dynamodb-codec/-/dynamodb-codec-3.972.16.tgz", - "integrity": "sha512-SLo648PIVMsKjUUId2v1ig+M6Wqk3tyOtC4vIu3RiM5jyoUYBilrV+p/IVZvHdbLFHNrIWUxtqKr623sTilsGQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@smithy/core": "^3.23.6", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/endpoint-cache": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.972.3.tgz", - "integrity": "sha512-s5oiwOTe0ajI5y/cRMsThZsmlrZiAEcUct723O9NivR/es8fDtglbhHo7eQE4ydddCivFCm2lpNj8RPDLdL3AA==", - "license": "Apache-2.0", - "dependencies": { - "mnemonist": "0.38.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.1000.0.tgz", - "integrity": "sha512-iS7cL3lZXxNQMkSnxHvAchZUzbnn06XPmUtTAqwZJQpKI26ZQDespiW8yBh+YIrGNMGV2pWlG3HYQodV8uYRqg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/util-dynamodb": "^3.996.1", - "@smithy/core": "^3.23.6", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.1000.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.6.tgz", - "integrity": "sha512-3H2bhvb7Cb/S6WFsBy/Dy9q2aegC9JmGH1inO8Lb2sWirSqpLJlZmvQHPE29h2tIxzv6el/14X/tLCQ8BQU6ZQ==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.957.0.tgz", + "integrity": "sha512-iczcn/QRIBSpvsdAS/rbzmoBpleX1JBjXvCynMbDceVLBIcVrwT1hXECrhtIC2cjh4HaLo9ClAbiOiWuqt+6MA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-arn-parser": "^3.972.2", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.1", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-arn-parser": "3.957.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-config-provider": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint-discovery": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.972.6.tgz", - "integrity": "sha512-p5DYw2cpnsuT/bFA4DEBxucY/wn3TVGDZ7wonEds6EEox35I5DThCsw6aWDIN/fTpG0FMLO3q7s1PUKozWl3CQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/endpoint-cache": "^3.972.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.6.tgz", - "integrity": "sha512-QMdffpU+GkSGC+bz6WdqlclqIeCsOfgX8JFZ5xvwDtX+UTj4mIXm3uXu7Ko6dBseRcJz1FA6T9OmlAAY6JgJUg==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.957.0.tgz", + "integrity": "sha512-AlbK3OeVNwZZil0wlClgeI/ISlOt/SPUxBsIns876IFaVu/Pj3DgImnYhpcJuFRek4r4XM51xzIaGQXM6GDHGg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.973.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.973.1.tgz", - "integrity": "sha512-QLXsxsI6VW8LuGK+/yx699wzqP/NMCGk/hSGP+qtB+Lcff+23UlbahyouLlk+nfT7Iu021SkXBhnAuVd6IZcPw==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.957.0.tgz", + "integrity": "sha512-iJpeVR5V8se1hl2pt+k8bF/e9JO4KWgPCMjg8BtRspNtKIUGy7j6msYvbDixaKZaF2Veg9+HoYcOhwnZumjXSA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/crc64-nvme": "^3.972.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/is-array-buffer": "^4.2.1", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-stream": "^4.5.15", - "@smithy/util-utf8": "^4.2.1", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/crc64-nvme": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.6.tgz", - "integrity": "sha512-5XHwjPH1lHB+1q4bfC7T8Z5zZrZXfaLcjSMwTd1HPSPrCmPFMbg3UQ5vgNWcVj0xoX4HWqTGkSf2byrjlnRg5w==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.957.0.tgz", + "integrity": "sha512-BBgKawVyfQZglEkNTuBBdC3azlyqNXsvvN4jPkWAiNYcY0x1BasaJFl+7u/HisfULstryweJq/dAvIZIxzlZaA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.6.tgz", - "integrity": "sha512-XdZ2TLwyj3Am6kvUc67vquQvs6+D8npXvXgyEUJAdkUDx5oMFJKOqpK+UpJhVDsEL068WAJl2NEGzbSik7dGJQ==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.957.0.tgz", + "integrity": "sha512-y8/W7TOQpmDJg/fPYlqAhwA4+I15LrS7TwgUEoxogtkD8gfur9wFMRLT8LCyc9o4NMEcAnK50hSb4+wB0qv6tQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.6.tgz", - "integrity": "sha512-iFnaMFMQdljAPrvsCVKYltPt2j40LQqukAbXvW7v0aL5I+1GO7bZ/W8m12WxW3gwyK5p5u1WlHg8TSAizC5cZw==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.957.0.tgz", + "integrity": "sha512-w1qfKrSKHf9b5a8O76yQ1t69u6NWuBjr5kBX+jRWFx/5mu6RLpqERXRpVJxfosbep7k3B+DSB5tZMZ82GKcJtQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.6.tgz", - "integrity": "sha512-dY4v3of5EEMvik6+UDwQ96KfUFDk8m1oZDdkSc5lwi4o7rFrjnv0A+yTV+gu230iybQZnKgDLg/rt2P3H+Vscw==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.957.0.tgz", + "integrity": "sha512-D2H/WoxhAZNYX+IjkKTdOhOkWQaK0jjJrDBj56hKjU5c9ltQiaX/1PqJ4dfjHntEshJfu0w+E6XJ+/6A6ILBBA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", + "@aws-sdk/types": "3.957.0", "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.15.tgz", - "integrity": "sha512-WDLgssevOU5BFx1s8jA7jj6cE5HuImz28sy9jKOaVtz0AW1lYqSzotzdyiybFaBcQTs5zxXOb2pUfyMxgEKY3Q==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.957.0.tgz", + "integrity": "sha512-5B2qY2nR2LYpxoQP0xUum5A1UNvH2JQpLHDH1nWFNF/XetV7ipFHksMxPNhtJJ6ARaWhQIDXfOUj0jcnkJxXUg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-arn-parser": "^3.972.2", - "@smithy/core": "^3.23.6", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/signature-v4": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-stream": "^4.5.15", - "@smithy/util-utf8": "^4.2.1", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-arn-parser": "3.957.0", + "@smithy/core": "^3.20.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.6.tgz", - "integrity": "sha512-acvMUX9jF4I2Ew+Z/EA6gfaFaz9ehci5wxBmXCZeulLuv8m+iGf6pY9uKz8TPjg39bdAz3hxoE0eLP8Qz+IYlA==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.957.0.tgz", + "integrity": "sha512-qwkmrK0lizdjNt5qxl4tHYfASh8DFpHXM1iDVo+qHe+zuslfMqQEGRkzxS8tJq/I+8F0c6v3IKOveKJAfIvfqQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.15.tgz", - "integrity": "sha512-ABlFVcIMmuRAwBT+8q5abAxOr7WmaINirDJBnqGY5b5jSDo00UMlg/G4a0xoAgwm6oAECeJcwkvDlxDwKf58fQ==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.957.0.tgz", + "integrity": "sha512-50vcHu96XakQnIvlKJ1UoltrFODjsq2KvtTgHiPFteUS884lQnK5VC/8xd1Msz/1ONpLMzdCVproCQqhDTtMPQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@smithy/core": "^3.23.6", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-endpoints": "3.957.0", + "@smithy/core": "^3.20.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.996.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.3.tgz", - "integrity": "sha512-AU5TY1V29xqwg/MxmA2odwysTez+ccFAhmfRJk+QZT5HNv90UTA9qKd1J9THlsQkvmH7HWTEV1lDNxkQO5PzNw==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.958.0.tgz", + "integrity": "sha512-/KuCcS8b5TpQXkYOrPLYytrgxBhv81+5pChkOlhegbeHttjM69pyUpQVJqyfDM/A7wPLnDrzCAnk4zaAOkY0Nw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/middleware-host-header": "^3.972.6", - "@aws-sdk/middleware-logger": "^3.972.6", - "@aws-sdk/middleware-recursion-detection": "^3.972.6", - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/region-config-resolver": "^3.972.6", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-endpoints": "^3.996.3", - "@aws-sdk/util-user-agent-browser": "^3.972.6", - "@aws-sdk/util-user-agent-node": "^3.973.0", - "@smithy/config-resolver": "^4.4.9", - "@smithy/core": "^3.23.6", - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/hash-node": "^4.2.10", - "@smithy/invalid-dependency": "^4.2.10", - "@smithy/middleware-content-length": "^4.2.10", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-retry": "^4.4.37", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.36", - "@smithy/util-defaults-mode-node": "^4.2.39", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/util-utf8": "^4.2.1", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/middleware-host-header": "3.957.0", + "@aws-sdk/middleware-logger": "3.957.0", + "@aws-sdk/middleware-recursion-detection": "3.957.0", + "@aws-sdk/middleware-user-agent": "3.957.0", + "@aws-sdk/region-config-resolver": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-endpoints": "3.957.0", + "@aws-sdk/util-user-agent-browser": "3.957.0", + "@aws-sdk/util-user-agent-node": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@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.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/node-http-handler": { @@ -1250,184 +1131,169 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.6.tgz", - "integrity": "sha512-Aa5PusHLXAqLTX1UKDvI3pHQJtIsF7Q+3turCHqfz/1F61/zDMWfbTC8evjhrrYVAtz9Vsv3SJ/waSUeu7B6gw==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.957.0.tgz", + "integrity": "sha512-V8iY3blh8l2iaOqXWW88HbkY5jDoWjH56jonprG/cpyqqCnprvpMUZWPWYJoI8rHRf2bqzZeql1slxG6EnKI7A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/config-resolver": "^4.4.9", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.1000.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1000.0.tgz", - "integrity": "sha512-DP6EbwCD0CKzBwBnT1X6STB5i+bY765CxjMbWCATDhCgOB343Q6AHM9c1S/300Uc5waXWtI/Wdeak9Ru56JOvg==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.958.0.tgz", + "integrity": "sha512-bFKsofead/fl3lyhdES+aNo+MZ+qv1ixSPSsF8O1oj6/KgGE0t1UH9AHw2vPq6iSQMTeEuyV0F5pC+Ns40kBgA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/signature-v4-multi-region": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@aws-sdk/util-format-url": "^3.972.6", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/protocol-http": "^5.3.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", + "@aws-sdk/signature-v4-multi-region": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@aws-sdk/util-format-url": "3.957.0", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.3.tgz", - "integrity": "sha512-gQYI/Buwp0CAGQxY7mR5VzkP56rkWq2Y1ROkFuXh5XY94DsSjJw62B3I0N0lysQmtwiL2ht2KHI9NylM/RP4FA==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.957.0.tgz", + "integrity": "sha512-t6UfP1xMUigMMzHcb7vaZcjv7dA2DQkk9C/OAP1dKyrE0vb4lFGDaTApi17GN6Km9zFxJthEMUbBc7DL0hq1Bg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.15", - "@aws-sdk/types": "^3.973.4", - "@smithy/protocol-http": "^5.3.10", - "@smithy/signature-v4": "^5.3.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/middleware-sdk-s3": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.999.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.999.0.tgz", - "integrity": "sha512-cx0hHUlgXULfykx4rdu/ciNAJaa3AL5xz3rieCz7NKJ68MJwlj3664Y8WR5MGgxfyYJBdamnkjNSx5Kekuc0cg==", + "version": "3.958.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.958.0.tgz", + "integrity": "sha512-UCj7lQXODduD1myNJQkV+LYcGYJ9iiMggR8ow8Hva1g3A/Na5imNXzz6O67k7DAee0TYpy+gkNw+SizC6min8Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.973.15", - "@aws-sdk/nested-clients": "^3.996.3", - "@aws-sdk/types": "^3.973.4", - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@aws-sdk/core": "3.957.0", + "@aws-sdk/nested-clients": "3.958.0", + "@aws-sdk/types": "3.957.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.973.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.4.tgz", - "integrity": "sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.957.0.tgz", + "integrity": "sha512-wzWC2Nrt859ABk6UCAVY/WYEbAd7FjkdrQL6m24+tfmWYDNRByTJ9uOgU/kw9zqLCAwb//CPvrJdhqjTznWXAg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.972.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.2.tgz", - "integrity": "sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.957.0.tgz", + "integrity": "sha512-Aj6m+AyrhWyg8YQ4LDPg2/gIfGHCEcoQdBt5DeSFogN5k9mmJPOJ+IAmNSWmWRjpOxEy6eY813RNDI6qS97M0g==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.996.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.996.1.tgz", - "integrity": "sha512-5Vle00DrIcao9x5UuhkEprIQiMuhVvrxSLQwEhTb1sfWvdrLphcW4LqAtOkWSHpWF9ZdQQVKXvAOjKNV8LSlrw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.997.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.996.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.3.tgz", - "integrity": "sha512-yWIQSNiCjykLL+ezN5A+DfBb1gfXTytBxm57e64lYmwxDHNmInYHRJYYRAGWG1o77vKEiWaw4ui28e3yb1k5aQ==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.957.0.tgz", + "integrity": "sha512-xwF9K24mZSxcxKS3UKQFeX/dPYkEps9wF1b+MGON7EvnbcucrJGyQyK1v1xFPn1aqXkBTFi+SZaMRx5E5YCVFw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-endpoints": "^3.3.1", + "@aws-sdk/types": "3.957.0", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-endpoints": "^3.2.7", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-format-url": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.972.6.tgz", - "integrity": "sha512-0YNVNgFyziCejXJx0rzxPiD2rkxTWco4c9wiMF6n37Tb9aQvIF8+t7GyEyIFCwQHZ0VMQaAl+nCZHOYz5I5EKw==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.957.0.tgz", + "integrity": "sha512-Yyo/tlc0iGFGTPPkuxub1uRAv6XrnVnvSNjslZh5jIYA8GZoeEFPgJa3Qdu0GUS/YwoK8GOLnnaL9h/eH5LDJQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/querystring-builder": "^4.2.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.965.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.4.tgz", - "integrity": "sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.957.0.tgz", + "integrity": "sha512-nhmgKHnNV9K+i9daumaIz8JTLsIIML9PE/HUks5liyrjUzenjW/aHoc7WJ9/Td/gPZtayxFnXQSJRb/fDlBuJw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.6.tgz", - "integrity": "sha512-Fwr/llD6GOrFgQnKaI2glhohdGuBDfHfora6iG9qsBBBR8xv1SdCSwbtf5CWlUdCw5X7g76G/9Hf0Inh0EmoxA==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.957.0.tgz", + "integrity": "sha512-exueuwxef0lUJRnGaVkNSC674eAiWU07ORhxBnevFFZEKisln+09Qrtw823iyv5I1N8T+wKfh95xvtWQrNKNQw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.4", - "@smithy/types": "^4.13.0", + "@aws-sdk/types": "3.957.0", + "@smithy/types": "^4.11.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.973.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.0.tgz", - "integrity": "sha512-A9J2G4Nf236e9GpaC1JnA8wRn6u6GjnOXiTwBLA6NUJhlBTIGfrTy+K1IazmF8y+4OFdW3O5TZlhyspJMqiqjA==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.957.0.tgz", + "integrity": "sha512-ycbYCwqXk4gJGp0Oxkzf2KBeeGBdTxz559D41NJP8FlzSej1Gh7Rk40Zo6AyTfsNWkrl/kVi1t937OIzC5t+9Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.15", - "@aws-sdk/types": "^3.973.4", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/types": "^4.13.0", + "@aws-sdk/middleware-user-agent": "3.957.0", + "@aws-sdk/types": "3.957.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -1439,23 +1305,23 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.8.tgz", - "integrity": "sha512-Ql8elcUdYCha83Ol7NznBsgN5GVZnv3vUd86fEc6waU6oUdY0T1O9NODkEEOS/Uaogr87avDrUC6DSeM4oXjZg==", + "version": "3.957.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.957.0.tgz", + "integrity": "sha512-Ai5iiQqS8kJ5PjzMhWcLKN0G2yasAkvpnPlq2EnqlIMdB48HsizElt62qcktdxp4neRMyGkFq4NzgmDbXnhRiA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", - "fast-xml-parser": "5.3.6", + "@smithy/types": "^4.11.0", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz", - "integrity": "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -1585,19 +1451,17 @@ } }, "node_modules/@azure/core-http-compat": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.2.tgz", - "integrity": "sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.1.tgz", + "integrity": "sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.1.2" + "@azure/abort-controller": "^2.1.2", + "@azure/core-client": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0" }, "engines": { "node": ">=20.0.0" - }, - "peerDependencies": { - "@azure/core-client": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0" } }, "node_modules/@azure/core-http-compat/node_modules/@azure/abort-controller": { @@ -1625,13 +1489,26 @@ "node": ">=12.0.0" } }, - "node_modules/@azure/core-http/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/@azure/core-http/node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@azure/core-http/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" } }, "node_modules/@azure/core-lro": { @@ -1778,15 +1655,6 @@ "node": ">=14.0.0" } }, - "node_modules/@azure/cosmos/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@azure/identity": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", @@ -1931,33 +1799,33 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.29.0.tgz", - "integrity": "sha512-/f3eHkSNUTl6DLQHm+bKecjBKcRQxbd/XLx8lvSYp8Nl/HRyPuIPOijt9Dt0sH50/SxOwQ62RnFCmFlGK+bR/w==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.27.0.tgz", + "integrity": "sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.15.0" + "@azure/msal-common": "15.13.3" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.15.0.tgz", - "integrity": "sha512-/n+bN0AKlVa+AOcETkJSKj38+bvFs78BaP4rNtv3MJCmPH0YrHiskMRe74OhyZ5DZjGISlFyxqvf9/4QVEi2tw==", + "version": "15.13.3", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", + "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "3.8.8", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.8.tgz", - "integrity": "sha512-+f1VrJH1iI517t4zgmuhqORja0bL6LDQXfBqkjuMmfTYXTQQnh1EvwwxO3UbKLT05N0obF72SRHFrC1RBDv5Gg==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.4.tgz", + "integrity": "sha512-lvuAwsDpPDE/jSuVQOBMpLbXuVuLsPNRwWCyK3/6bPlBk0fGWegqoZ0qjZclMWyQ2JNvIY3vHY7hoFmFmFQcOw==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.15.0", + "@azure/msal-common": "15.13.3", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -1965,19 +1833,10 @@ "node": ">=16" } }, - "node_modules/@azure/msal-node/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@azure/storage-blob": { - "version": "12.31.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.31.0.tgz", - "integrity": "sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg==", + "version": "12.29.1", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.29.1.tgz", + "integrity": "sha512-7ktyY0rfTM0vo7HvtK6E3UvYnI9qfd6Oz6z/+92VhGRveWng3kJwMKeUpqmW/NmwcDNbxHpSlldG+vsUnRFnBg==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -1991,7 +1850,7 @@ "@azure/core-util": "^1.11.0", "@azure/core-xml": "^1.4.5", "@azure/logger": "^1.1.4", - "@azure/storage-common": "^12.3.0", + "@azure/storage-common": "^12.1.1", "events": "^3.0.0", "tslib": "^2.8.1" }, @@ -2012,9 +1871,9 @@ } }, "node_modules/@azure/storage-common": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@azure/storage-common/-/storage-common-12.3.0.tgz", - "integrity": "sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@azure/storage-common/-/storage-common-12.1.1.tgz", + "integrity": "sha512-eIOH1pqFwI6UmVNnDQvmFeSg0XppuzDLFeUNO/Xht7ODAzRLgGDh7h550pSxoA+lPDxBl1+D2m/KG3jWzCUjTg==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", @@ -2054,9 +1913,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, "license": "MIT", "engines": { @@ -2064,21 +1923,21 @@ } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -2095,13 +1954,13 @@ } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -2127,14 +1986,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -2144,13 +2003,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -2181,29 +2040,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -2213,9 +2072,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -2253,14 +2112,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -2361,13 +2220,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -2432,13 +2291,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2584,13 +2443,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2600,9 +2459,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", "peer": true, "engines": { @@ -2610,28 +2469,28 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -2640,18 +2499,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -2659,13 +2518,13 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -2674,9 +2533,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { @@ -2695,21 +2554,21 @@ "license": "MIT" }, "node_modules/@clickhouse/client": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@clickhouse/client/-/client-1.18.1.tgz", - "integrity": "sha512-fO4QggCOSr0WBS9oGIFa83FUhbweP8VTFGOXF51DJQbR/oEXegdocNSma3Gp6F4Km9A1Xm1ZAhwrldtg3prPiQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@clickhouse/client/-/client-1.15.0.tgz", + "integrity": "sha512-QmW+p4c/r0oa3X6Un6lcBs4GZtJEQUdvf//x8GeqM5ru6m4oIUg3WwvermP3HE31kpEGoFOQfKbMN5ooR5gvNw==", "license": "Apache-2.0", "dependencies": { - "@clickhouse/client-common": "1.18.1" + "@clickhouse/client-common": "1.15.0" }, "engines": { "node": ">=16" } }, "node_modules/@clickhouse/client-common": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@clickhouse/client-common/-/client-common-1.18.1.tgz", - "integrity": "sha512-kDk8miGZVDAzqFrBZRmD9rD82Li8gwaGlJ5MNUpWgxx1OUXRBUkcV6ULysWP1C9Jinb3yle3YLz/XbNOPVgVtQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@clickhouse/client-common/-/client-common-1.15.0.tgz", + "integrity": "sha512-/1BXaNNsBzH2w5ALWiH6M9zS+cJwlM9uMnMj9e8ETwvDjJzO+nIYlyxzp8Prc+9pEDZ5iAilZ4F8c0YVCzzNaA==", "license": "Apache-2.0" }, "node_modules/@colors/colors": { @@ -2733,9 +2592,9 @@ } }, "node_modules/@databricks/sql": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@databricks/sql/-/sql-1.13.0.tgz", - "integrity": "sha512-xBuxCKmq3gR2fXnCzHsWkPujd5Vi/QxtHAyZXlj180v0fAqucIrG3SckSS5bpbF/NOH7uPLjolBUiZWDJ8E4xQ==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@databricks/sql/-/sql-1.12.0.tgz", + "integrity": "sha512-bCUoHg2/mNgOXkYTooF1m0wyO57yPJPo44wOTXOlA9CREbXCzP1RMuUVa3GfXKzGifd52nNEPHyKeZvrbJBLnA==", "license": "Apache 2.0", "dependencies": { "apache-arrow": "^13.0.0", @@ -2769,37 +2628,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -2831,18 +2659,12 @@ "node": ">= 4" } }, - "node_modules/@gar/promise-retry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.2.tgz", - "integrity": "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==", + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true, - "license": "MIT", - "dependencies": { - "retry": "^0.13.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "MIT" }, "node_modules/@google-cloud/bigquery": { "version": "5.12.0", @@ -2876,15 +2698,6 @@ "node": ">=8" } }, - "node_modules/@google-cloud/bigquery/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@google-cloud/common": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz", @@ -3028,15 +2841,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@google-cloud/storage/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@grpc/grpc-js": { "version": "1.14.3", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.3.tgz", @@ -3068,6 +2872,37 @@ "node": ">=6" } }, + "node_modules/@grpc/grpc-js/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/grpc-js/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@grpc/grpc-js/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -3086,6 +2921,15 @@ "node": ">=12" } }, + "node_modules/@grpc/grpc-js/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/@grpc/proto-loader": { "version": "0.7.15", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", @@ -3104,6 +2948,37 @@ "node": ">=6" } }, + "node_modules/@grpc/proto-loader/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@grpc/proto-loader/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -3122,6 +2997,15 @@ "node": ">=12" } }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -3156,150 +3040,6 @@ "node": ">=6.9.0" } }, - "node_modules/@inquirer/ansi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", - "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", - "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.1.21", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", - "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", - "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.23", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", - "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/external-editor": "^1.0.3", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", - "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, "node_modules/@inquirer/external-editor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", @@ -3322,230 +3062,106 @@ } } }, - "node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", - "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", - "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", - "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", - "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.3.2", - "@inquirer/confirm": "^5.1.21", - "@inquirer/editor": "^4.2.23", - "@inquirer/expand": "^4.0.23", - "@inquirer/input": "^4.3.1", - "@inquirer/number": "^3.0.23", - "@inquirer/password": "^4.0.23", - "@inquirer/rawlist": "^4.1.11", - "@inquirer/search": "^3.2.2", - "@inquirer/select": "^4.4.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", - "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", - "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", - "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", - "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, "node_modules/@ioredis/commands": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.1.tgz", - "integrity": "sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.0.tgz", + "integrity": "sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==", "license": "MIT" }, "node_modules/@isaacs/cliui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", - "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "license": "ISC", "dependencies": { - "minipass": "^7.0.4" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@isaacs/string-locale-compare": { @@ -3658,16 +3274,6 @@ } } }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/environment": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", @@ -3702,16 +3308,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/globals": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", @@ -3772,19 +3368,6 @@ } } }, - "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jest/source-map": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", @@ -3927,9 +3510,9 @@ } }, "node_modules/@js-joda/core": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.7.0.tgz", - "integrity": "sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.5.tgz", + "integrity": "sha512-3zwefSMwHpu8iVUW8YYz227sIv6UFqO31p1Bf1ZH/Vom7CmNyUsXjDBlnNzcuhmOL1XfxZ3nvND42kR23XlbcQ==", "license": "BSD-3-Clause" }, "node_modules/@js-sdsl/ordered-map": { @@ -3948,242 +3531,808 @@ "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", "license": "MIT" }, - "node_modules/@lerna/create": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-9.0.5.tgz", - "integrity": "sha512-Gwd6ooSqXMdkdhiCGvHAfLRstj7W3ttr72WQB3Jf9HPP1A6mWtw0O80D0X+T/2hakqfe7lNLuKrEid4f7C0qbg==", + "node_modules/@lerna/add": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.6.2.tgz", + "integrity": "sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, "license": "MIT", "dependencies": { - "@npmcli/arborist": "9.1.6", - "@npmcli/package-json": "7.0.2", - "@npmcli/run-script": "10.0.3", - "@nx/devkit": ">=21.5.2 < 23.0.0", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "20.1.2", - "aproba": "2.0.0", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "cmd-shim": "6.0.3", - "color-support": "1.1.3", - "columnify": "1.6.0", - "console-control-strings": "^1.1.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "9.0.0", - "dedent": "1.5.3", - "execa": "5.0.0", - "fs-extra": "^11.2.0", - "get-stream": "6.0.0", - "git-url-parse": "14.0.0", - "glob-parent": "6.0.2", - "has-unicode": "2.0.1", - "ini": "^1.3.8", - "init-package-json": "8.2.2", - "inquirer": "12.9.6", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "js-yaml": "4.1.1", - "libnpmpublish": "11.1.2", - "load-json-file": "6.2.0", - "make-dir": "4.0.0", - "make-fetch-happen": "15.0.2", - "minimatch": "3.1.4", - "multimatch": "5.0.0", - "npm-package-arg": "13.0.1", - "npm-packlist": "10.0.3", - "npm-registry-fetch": "19.1.0", - "nx": ">=21.5.3 < 23.0.0", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-queue": "6.6.2", - "p-reduce": "^2.1.0", - "pacote": "21.0.1", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "resolve-from": "5.0.0", - "rimraf": "^6.1.2", - "semver": "7.7.2", - "set-blocking": "^2.0.0", - "signal-exit": "3.0.7", - "slash": "^3.0.0", - "ssri": "12.0.0", - "string-width": "^4.2.3", - "tar": "7.5.8", - "temp-dir": "1.0.0", - "through": "2.3.8", - "tinyglobby": "0.2.12", - "upath": "2.0.1", - "uuid": "^11.1.0", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "6.0.2", - "wide-align": "1.1.5", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" + "@lerna/bootstrap": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/npm-conf": "5.6.2", + "@lerna/validation-error": "5.6.2", + "dedent": "^0.7.0", + "npm-package-arg": "8.1.1", + "p-map": "^4.0.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/create/node_modules/argparse": { + "node_modules/@lerna/bootstrap": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.6.2.tgz", + "integrity": "sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/has-npm-version": "5.6.2", + "@lerna/npm-install": "5.6.2", + "@lerna/package-graph": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/rimraf-dir": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/symlink-binary": "5.6.2", + "@lerna/symlink-dependencies": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@npmcli/arborist": "5.3.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/changed": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.6.2.tgz", + "integrity": "sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-updates": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/listable": "5.6.2", + "@lerna/output": "5.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/check-working-tree": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.6.2.tgz", + "integrity": "sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-uncommitted": "5.6.2", + "@lerna/describe-ref": "5.6.2", + "@lerna/validation-error": "5.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/child-process": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.6.2.tgz", + "integrity": "sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/clean": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.6.2.tgz", + "integrity": "sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/rimraf-dir": "5.6.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/cli": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.6.2.tgz", + "integrity": "sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/global-options": "5.6.2", + "dedent": "^0.7.0", + "npmlog": "^6.0.2", + "yargs": "^16.2.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/collect-uncommitted": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.6.2.tgz", + "integrity": "sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "chalk": "^4.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/collect-updates": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.6.2.tgz", + "integrity": "sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/describe-ref": "5.6.2", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/command": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.6.2.tgz", + "integrity": "sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/package-graph": "5.6.2", + "@lerna/project": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@lerna/write-log-file": "5.6.2", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/conventional-commits": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.6.2.tgz", + "integrity": "sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/validation-error": "5.6.2", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.4", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/create": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.6.2.tgz", + "integrity": "sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/npm-conf": "5.6.2", + "@lerna/validation-error": "5.6.2", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "init-package-json": "^3.0.2", + "npm-package-arg": "8.1.1", + "p-reduce": "^2.1.0", + "pacote": "^13.6.1", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/create-symlink": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.6.2.tgz", + "integrity": "sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "cmd-shim": "^5.0.0", + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/describe-ref": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.6.2.tgz", + "integrity": "sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/diff": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.6.2.tgz", + "integrity": "sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/validation-error": "5.6.2", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/exec": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.6.2.tgz", + "integrity": "sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/profiler": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/validation-error": "5.6.2", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/filter-options": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.6.2.tgz", + "integrity": "sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/collect-updates": "5.6.2", + "@lerna/filter-packages": "5.6.2", + "dedent": "^0.7.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/filter-packages": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.6.2.tgz", + "integrity": "sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/validation-error": "5.6.2", + "multimatch": "^5.0.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/get-npm-exec-opts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.6.2.tgz", + "integrity": "sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/get-packed": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.6.2.tgz", + "integrity": "sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "ssri": "^9.0.1", + "tar": "^6.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/github-client": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.6.2.tgz", + "integrity": "sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^19.0.3", + "git-url-parse": "^13.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/gitlab-client": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.6.2.tgz", + "integrity": "sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/global-options": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.6.2.tgz", + "integrity": "sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/has-npm-version": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.6.2.tgz", + "integrity": "sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/import": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.6.2.tgz", + "integrity": "sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/validation-error": "5.6.2", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/info": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.6.2.tgz", + "integrity": "sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/output": "5.6.2", + "envinfo": "^7.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/init": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.6.2.tgz", + "integrity": "sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/project": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/link": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.6.2.tgz", + "integrity": "sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/package-graph": "5.6.2", + "@lerna/symlink-dependencies": "5.6.2", + "@lerna/validation-error": "5.6.2", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/list": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.6.2.tgz", + "integrity": "sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/listable": "5.6.2", + "@lerna/output": "5.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/listable": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.6.2.tgz", + "integrity": "sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/query-graph": "5.6.2", + "chalk": "^4.1.0", + "columnify": "^1.6.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/log-packed": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.6.2.tgz", + "integrity": "sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "byte-size": "^7.0.0", + "columnify": "^1.6.0", + "has-unicode": "^2.0.1", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-conf": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.6.2.tgz", + "integrity": "sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-dist-tag": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.6.2.tgz", + "integrity": "sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/otplease": "5.6.2", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-install": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.6.2.tgz", + "integrity": "sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/get-npm-exec-opts": "5.6.2", + "fs-extra": "^9.1.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-publish": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.6.2.tgz", + "integrity": "sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/otplease": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "fs-extra": "^9.1.0", + "libnpmpublish": "^6.0.4", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "read-package-json": "^5.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/npm-run-script": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.6.2.tgz", + "integrity": "sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/get-npm-exec-opts": "5.6.2", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/otplease": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.6.2.tgz", + "integrity": "sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/prompt": "5.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/output": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.6.2.tgz", + "integrity": "sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pack-directory": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.6.2.tgz", + "integrity": "sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/get-packed": "5.6.2", + "@lerna/package": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/temp-write": "5.6.2", + "npm-packlist": "^5.1.1", + "npmlog": "^6.0.2", + "tar": "^6.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/package": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.6.2.tgz", + "integrity": "sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^6.2.0", + "npm-package-arg": "8.1.1", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/package-graph": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.6.2.tgz", + "integrity": "sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/prerelease-id-from-version": "5.6.2", + "@lerna/validation-error": "5.6.2", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/prerelease-id-from-version": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.6.2.tgz", + "integrity": "sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/profiler": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.6.2.tgz", + "integrity": "sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "upath": "^2.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/project": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.6.2.tgz", + "integrity": "sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/package": "5.6.2", + "@lerna/validation-error": "5.6.2", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "js-yaml": "^4.1.0", + "load-json-file": "^6.2.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/project/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, - "node_modules/@lerna/create/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@lerna/create/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/@lerna/create/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/js-yaml": { + "node_modules/@lerna/project/node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", @@ -4196,20 +4345,7 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@lerna/create/node_modules/minimatch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", - "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@lerna/create/node_modules/resolve-from": { + "node_modules/@lerna/project/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -4219,107 +4355,359 @@ "node": ">=8" } }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", - "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", + "node_modules/@lerna/prompt": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.6.2.tgz", + "integrity": "sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "glob": "^13.0.3", - "package-json-from-dist": "^1.0.1" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" + "inquirer": "^8.2.4", + "npmlog": "^6.0.2" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/@lerna/create/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "node_modules/@lerna/publish": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.6.2.tgz", + "integrity": "sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/check-working-tree": "5.6.2", + "@lerna/child-process": "5.6.2", + "@lerna/collect-updates": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/describe-ref": "5.6.2", + "@lerna/log-packed": "5.6.2", + "@lerna/npm-conf": "5.6.2", + "@lerna/npm-dist-tag": "5.6.2", + "@lerna/npm-publish": "5.6.2", + "@lerna/otplease": "5.6.2", + "@lerna/output": "5.6.2", + "@lerna/pack-directory": "5.6.2", + "@lerna/prerelease-id-from-version": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@lerna/version": "5.6.2", + "fs-extra": "^9.1.0", + "libnpmaccess": "^6.0.3", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pulse-till-done": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.6.2.tgz", + "integrity": "sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/query-graph": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.6.2.tgz", + "integrity": "sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/package-graph": "5.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/resolve-symlink": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.6.2.tgz", + "integrity": "sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "read-cmd-shim": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/rimraf-dir": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.6.2.tgz", + "integrity": "sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/child-process": "5.6.2", + "npmlog": "^6.0.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/run": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.6.2.tgz", + "integrity": "sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/npm-run-script": "5.6.2", + "@lerna/output": "5.6.2", + "@lerna/profiler": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/timer": "5.6.2", + "@lerna/validation-error": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/run-lifecycle": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.6.2.tgz", + "integrity": "sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/npm-conf": "5.6.2", + "@npmcli/run-script": "^4.1.7", + "npmlog": "^6.0.2", + "p-queue": "^6.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/run-topologically": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.6.2.tgz", + "integrity": "sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/query-graph": "5.6.2", + "p-queue": "^6.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/symlink-binary": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.6.2.tgz", + "integrity": "sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create-symlink": "5.6.2", + "@lerna/package": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/symlink-dependencies": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.6.2.tgz", + "integrity": "sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create-symlink": "5.6.2", + "@lerna/resolve-symlink": "5.6.2", + "@lerna/symlink-binary": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/temp-write": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.6.2.tgz", + "integrity": "sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^8.3.2" + } + }, + "node_modules/@lerna/temp-write/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/temp-write/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/@lerna/create/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "node_modules/@lerna/timer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.6.2.tgz", + "integrity": "sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/validation-error": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.6.2.tgz", + "integrity": "sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/version": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.6.2.tgz", + "integrity": "sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/check-working-tree": "5.6.2", + "@lerna/child-process": "5.6.2", + "@lerna/collect-updates": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/conventional-commits": "5.6.2", + "@lerna/github-client": "5.6.2", + "@lerna/gitlab-client": "5.6.2", + "@lerna/output": "5.6.2", + "@lerna/prerelease-id-from-version": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/temp-write": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@nrwl/devkit": ">=14.8.1 < 16", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/write-log-file": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.6.2.tgz", + "integrity": "sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "npmlog": "^6.0.2", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/write-log-file/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "signal-exit": "^3.0.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz", - "integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.4.tgz", + "integrity": "sha512-p7X/ytJDIdwUfFL/CLOhKgdfJe1Fa8uw9seJYvdOmnP9JBWGWHW69HkOixXS6Wy9yvGf1MbhcS6lVmrhy4jm2g==", "license": "MIT", "optional": true, "dependencies": { "sparse-bitfield": "^3.0.3" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4368,991 +4756,590 @@ "node": ">=12" } }, - "node_modules/@npmcli/agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", - "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@npmcli/arborist": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.6.tgz", - "integrity": "sha512-c5Pr3EG8UP5ollkJy2x+UdEQC5sEHe3H9whYn6hb2HJimAKS4zmoJkx5acCiR/g4P38RnCSMlsYQyyHnKYeLvQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", + "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", "dev": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^4.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/metavuln-calculator": "^9.0.2", - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/query": "^4.0.0", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^10.0.0", - "bin-links": "^5.0.0", - "cacache": "^20.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", - "lru-cache": "^11.2.1", - "minimatch": "^10.0.3", - "nopt": "^8.0.0", - "npm-install-checks": "^7.1.0", - "npm-package-arg": "^13.0.0", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "pacote": "^21.0.2", - "parse-conflict-json": "^4.0.0", - "proc-log": "^5.0.0", - "proggy": "^3.0.0", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", "semver": "^7.3.7", - "ssri": "^12.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^4.0.0" + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" }, "bin": { "arborist": "bin/index.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@npmcli/arborist/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "balanced-match": "^4.0.2" + "lru-cache": "^7.5.1" }, "engines": { - "node": "18 || 20 || >=22" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/arborist/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "engines": { - "node": "20 || >=22" + "node": ">=12" } }, - "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/arborist/node_modules/npm-bundled": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", - "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", + "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^5.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/npm-normalize-package-bin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", - "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/pacote": { - "version": "21.4.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.4.0.tgz", - "integrity": "sha512-DR7mn7HUOomAX1BORnpYy678qVIidbvOojkBscqy27dRKN+s/hLeQT1MeYYrx1Cxh62jyKjiWiDV7RTTqB+ZEQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "sigstore": "^4.0.0", - "ssri": "^13.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/pacote/node_modules/@npmcli/installed-package-contents": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", - "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^5.0.0", - "npm-normalize-package-bin": "^5.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/pacote/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/pacote/node_modules/ssri": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", - "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "license": "ISC", "dependencies": { + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/git": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", - "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", "dev": true, "license": "ISC", "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "ini": "^6.0.0", - "lru-cache": "^11.2.1", - "npm-pick-manifest": "^11.0.1", - "proc-log": "^6.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^6.0.0" + "which": "^2.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", - "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@npmcli/git/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "license": "ISC", "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=12" } }, "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, "license": "ISC", "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" }, "bin": { - "installed-package-contents": "bin/index.js" + "installed-package-contents": "index.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 10" } }, "node_modules/@npmcli/map-workspaces": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz", - "integrity": "sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", + "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "glob": "^13.0.0", - "minimatch": "^10.0.3" + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/@npmcli/name-from-folder": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz", - "integrity": "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" + "balanced-match": "^1.0.0" } }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, "node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz", - "integrity": "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", + "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", "dev": true, "license": "ISC", "dependencies": { - "cacache": "^20.0.0", - "json-parse-even-better-errors": "^5.0.0", - "pacote": "^21.0.0", - "proc-log": "^6.0.0", + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", "semver": "^7.3.5" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/name-from-folder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz", - "integrity": "sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "ISC" }, "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/package-json": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.2.tgz", - "integrity": "sha512-0ylN3U5htO1SJTmy2YI78PZZjLkKUGg7EKgukb2CRi0kzyoDr0cfjHAzi7kozVhj2V3SxN1oyKqZ2NSo40z00g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", + "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^11.0.3", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" + "json-parse-even-better-errors": "^2.3.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", - "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, "license": "ISC", "dependencies": { - "which": "^6.0.0" + "infer-owner": "^1.0.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/query": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-4.0.1.tgz", - "integrity": "sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", - "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", - "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "node-gyp": "^12.1.0", - "proc-log": "^6.0.0", - "which": "^6.0.0" + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/run-script/node_modules/@npmcli/node-gyp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", - "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" - } - }, - "node_modules/@npmcli/run-script/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@nx/devkit": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-22.5.3.tgz", - "integrity": "sha512-zhRNTFsi4pbwg7L/zhBHtTOSevlgwm1iKlhPlQWoOv2PR6b+3JvjL8o4P1MbkIkut3Lsn+oTuJJ1LUPlr5vprg==", + "node_modules/@nrwl/cli": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.7.tgz", + "integrity": "sha512-1jtHBDuJzA57My5nLzYiM372mJW0NY6rFKxlWt5a0RLsAZdPTHsd8lE3Gs9XinGC1jhXbruWmhhnKyYtZvX/zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "15.9.7" + } + }, + "node_modules/@nrwl/devkit": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.9.7.tgz", + "integrity": "sha512-Sb7Am2TMT8AVq8e+vxOlk3AtOA2M0qCmhBzoM1OJbdHaPKc0g0UgSnWRml1kPGg5qfPk72tWclLoZJ5/ut0vTg==", "dev": true, "license": "MIT", "dependencies": { - "@zkochan/js-yaml": "0.0.7", "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "minimatch": "10.2.1", - "semver": "^7.6.3", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "ignore": "^5.0.4", + "semver": "7.5.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" }, "peerDependencies": { - "nx": ">= 21 <= 23 || ^22.0.0-0" + "nx": ">= 14.1 <= 16" } }, - "node_modules/@nx/devkit/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/@nrwl/devkit/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@nx/devkit/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "balanced-match": "^4.0.2" + "yallist": "^4.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=10" } }, - "node_modules/@nx/devkit/node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/@nrwl/devkit/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-colors": "^4.1.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.6" + "node": ">=10" } }, - "node_modules/@nx/devkit/node_modules/minimatch": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", - "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "node_modules/@nrwl/devkit/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "ISC" }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.5.3.tgz", - "integrity": "sha512-cKXBq5bJanXp8uv6+wPvx/G4q4oFpOxMSPGaeFOVhbul2QHGGq+XMcSo+D8aYJCsk1YnbyAnnQ8r8RH/kTK5Mw==", + "node_modules/@nrwl/nx-darwin-arm64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.7.tgz", + "integrity": "sha512-aBUgnhlkrgC0vu0fK6eb9Vob7eFnkuknrK+YzTjmLrrZwj7FGNAeyGXSlyo1dVokIzjVKjJg2saZZ0WQbfuCJw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-darwin-x64": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-22.5.3.tgz", - "integrity": "sha512-mToS41o8I+8CfxYVRMTISkgT7I1cnazgwMf7U9DoLqKOwOZzj9WD3NmsWc1h69QNJPltbeRPS8y/wnhu7RHzRA==", + "node_modules/@nrwl/nx-darwin-x64": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.7.tgz", + "integrity": "sha512-L+elVa34jhGf1cmn38Z0sotQatmLovxoASCIw5r1CBZZeJ5Tg7Y9nOwjRiDixZxNN56hPKXm6xl9EKlVHVeKlg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.5.3.tgz", - "integrity": "sha512-CAWysdFSZVbTfdjNXojd9TgXbZiK9i0k3njROeV+jORsDWw4Eth3PDmK94Wk916b3n2hS0UjyI6RZaMy2GEqzA==", - "cpu": [ - "x64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.5.3.tgz", - "integrity": "sha512-PRjPrijQQbdrvYwNuA3xQ3VXEQ4zfhnPjy+S2ZlQZqhFI4mlP22xfhOH1bQ7pIfzCNC2f/J9UMNYOrq/bEFjBg==", + "node_modules/@nrwl/nx-linux-arm-gnueabihf": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.7.tgz", + "integrity": "sha512-pqmfqqEUGFu6PmmHKyXyUw1Al0Ki8PSaR0+ndgCAb1qrekVDGDfznJfaqxN0JSLeolPD6+PFtLyXNr9ZyPFlFg==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.5.3.tgz", - "integrity": "sha512-dmDBio/5z4Zch2VlRMdgBPm53d8xwq1l7xLj1dFMKjfE7ByfPukjPM7ZEYBiPckfiQfJBRh6HKDN7uEkA/y8CQ==", - "cpu": [ - "arm64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.5.3.tgz", - "integrity": "sha512-E81ET/MnnKfuLhKiovF5ueJirHOMjhC1eK0MDM2Do9wdPyusZzfGSVFQ9DOHtg7L37dAE95NNd1lCVO8gJ96vg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.5.3.tgz", - "integrity": "sha512-AgXCsPCzC0sAu2VRclMjs7LrvPQfqS3sFiehlXWTbNHQitPZLuAmQGb2l4T8lbMOs0Xn3EIrg6BF6/ntTTp6Xg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.5.3.tgz", - "integrity": "sha512-sKs4bFQRu8Btxf5rMYKPsRVNxkQ2ey8sqoCyhJj8fwJF05DayK2ErJAR/rhtBK0c1NV7kQiKJA8nWBV3jnCdsg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.5.3.tgz", - "integrity": "sha512-KOCQLakSO5vl4D6et9qPytOAmkgq2IIuhI8A/g0xbD1LqrIlRPa+bdkZqOGpODYAk3NyKAk7hWHsqfXKHwwX6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.5.3.tgz", - "integrity": "sha512-a6ZB2La82RIHcz4nrt3H6RZaOa+xkC2IPzhU9hMo2gbkLdIxn8wyof8uGA0frncmIVHuLc3nFAhpBOgf4j6tMA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "dev": true, - "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 10" } }, - "node_modules/@octokit/core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", - "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", + "node_modules/@nrwl/nx-linux-arm64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.7.tgz", + "integrity": "sha512-NYOa/eRrqmM+In5g3M0rrPVIS9Z+q6fvwXJYf/KrjOHqqan/KL+2TOfroA30UhcBrwghZvib7O++7gZ2hzwOnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-arm64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.7.tgz", + "integrity": "sha512-zyStqjEcmbvLbejdTOrLUSEdhnxNtdQXlmOuymznCzYUEGRv+4f7OAepD3yRoR0a/57SSORZmmGQB7XHZoYZJA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-x64-gnu": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.7.tgz", + "integrity": "sha512-saNK5i2A8pKO3Il+Ejk/KStTApUpWgCxjeUz9G+T8A+QHeDloZYH2c7pU/P3jA9QoNeKwjVO9wYQllPL9loeVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-linux-x64-musl": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.7.tgz", + "integrity": "sha512-extIUThYN94m4Vj4iZggt6hhMZWQSukBCo8pp91JHnDcryBg7SnYmnikwtY1ZAFyyRiNFBLCKNIDFGkKkSrZ9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-win32-arm64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.7.tgz", + "integrity": "sha512-GSQ54hJ5AAnKZb4KP4cmBnJ1oC4ILxnrG1mekxeM65c1RtWg9NpBwZ8E0gU3xNrTv8ZNsBeKi/9UhXBxhsIh8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/nx-win32-x64-msvc": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.7.tgz", + "integrity": "sha512-x6URof79RPd8AlapVbPefUD3ynJZpmah3tYaYZ9xZRMXojVtEHV8Qh5vysKXQ1rNYJiiB8Ah6evSKWLbAH60tw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nrwl/tao": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.7.tgz", + "integrity": "sha512-OBnHNvQf3vBH0qh9YnvBQQWyyFZ+PWguF6dJ8+1vyQYlrLVk/XZ8nJ4ukWFb+QfPv/O8VBmqaofaOI9aFC4yTw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.1.0", - "@octokit/request": "^8.4.1", - "@octokit/request-error": "^5.1.1", - "@octokit/types": "^13.0.0", + "nx": "15.9.7" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 14" } }, "node_modules/@octokit/endpoint": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", - "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.1.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 14" } }, "node_modules/@octokit/graphql": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", - "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request": "^8.4.1", - "@octokit/types": "^13.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 14" } }, "node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", "dev": true, "license": "MIT" }, @@ -5364,105 +5351,122 @@ "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "11.4.4-cjs.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", - "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.7.0" + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" }, "engines": { - "node": ">= 18" + "node": ">= 14" }, "peerDependencies": { - "@octokit/core": "5" + "@octokit/core": ">=4" } }, "node_modules/@octokit/plugin-request-log": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", - "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 18" - }, "peerDependencies": { - "@octokit/core": "5" + "@octokit/core": ">=3" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.3.2-cjs.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", - "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", + "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.8.0" + "@octokit/types": "^10.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 14" }, "peerDependencies": { - "@octokit/core": "^5" + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", + "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" } }, "node_modules/@octokit/request": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", - "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/endpoint": "^9.0.6", - "@octokit/request-error": "^5.1.1", - "@octokit/types": "^13.1.0", + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 14" } }, "node_modules/@octokit/request-error": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", - "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.1.0", + "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, "engines": { - "node": ">= 18" + "node": ">= 14" } }, "node_modules/@octokit/rest": { - "version": "20.1.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", - "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", + "version": "19.0.13", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz", + "integrity": "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/core": "^5.0.2", - "@octokit/plugin-paginate-rest": "11.4.4-cjs.2", - "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "13.3.2-cjs.1" + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" }, "engines": { - "node": ">= 18" + "node": ">= 14" } }, + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true, + "license": "MIT" + }, "node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^24.2.0" + "@octokit/openapi-types": "^18.0.0" } }, "node_modules/@opensearch-project/opensearch": { @@ -5490,6 +5494,25 @@ "node": ">=8.0.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -5565,9 +5588,9 @@ "license": "BSD-3-Clause" }, "node_modules/@sap/hana-client": { - "version": "2.27.23", - "resolved": "https://registry.npmjs.org/@sap/hana-client/-/hana-client-2.27.23.tgz", - "integrity": "sha512-HFm6il8AUViABAPB1nGmvJm1v0YpIziOz5caYAHcMAG7iDKkfSaQ+7L9KBqrIykzbMBQq3lSeYYr/oIXqUTg5Q==", + "version": "2.27.19", + "resolved": "https://registry.npmjs.org/@sap/hana-client/-/hana-client-2.27.19.tgz", + "integrity": "sha512-Bqx9isM8uW/ud/jLqUh7BCHnoTor6hwuC4fOtOxPub00oHQ6LNExLnOrofFskom+4V0po1303dJ8geXlStdFuw==", "hasInstallScript": true, "hasShrinkwrap": true, "license": "SEE LICENSE IN developer-license-3_2.txt", @@ -5633,170 +5656,6 @@ "node": ">=12.*" } }, - "node_modules/@sigstore/bundle": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", - "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.1.0.tgz", - "integrity": "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", - "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.0.tgz", - "integrity": "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.3", - "proc-log": "^6.1.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.4.tgz", - "integrity": "sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promise-retry": "^1.0.0", - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^6.0.0", - "ssri": "^13.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", - "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^2.0.0", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - }, - "optionalDependencies": { - "iconv-lite": "^0.7.2" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass-sized": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", - "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sigstore/sign/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/sign/node_modules/ssri": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", - "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.1.tgz", - "integrity": "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.0.tgz", - "integrity": "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.48", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", - "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", - "dev": true, - "license": "MIT" - }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -5830,12 +5689,12 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.10.tgz", - "integrity": "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", + "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5843,9 +5702,9 @@ } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.1.tgz", - "integrity": "sha512-y5d4xRiD6TzeP5BWlb+Ig/VFqF+t9oANNhGeMqyzU7obw7FYgTgVi50i5JqBTeKp+TABeDIeeXFZdz65RipNtA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", + "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -5855,12 +5714,12 @@ } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.2.tgz", - "integrity": "sha512-QzzYIlf4yg0w5TQaC9VId3B3ugSk1MI/wb7tgcHtd7CBV9gNRKZrhc2EPSxSZuDy10zUZ0lomNMgkc6/VVe8xg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", + "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-base64": "^4.3.1", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -5868,16 +5727,16 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.9.tgz", - "integrity": "sha512-ejQvXqlcU30h7liR9fXtj7PIAau1t/sFbJpgWPfiYDs7zd16jpH0IsSXKcba2jF6ChTXvIjACs27kNMc5xxE2Q==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", + "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.1", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -5885,20 +5744,20 @@ } }, "node_modules/@smithy/core": { - "version": "3.23.6", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.6.tgz", - "integrity": "sha512-4xE+0L2NrsFKpEVFlFELkIHQddBvMbQ41LRIP74dGCXnY1zQ9DgksrBcRBDJT+iOzGy4VEJIeU3hkUK5mn06kg==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", + "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.11", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-stream": "^4.5.15", - "@smithy/util-utf8": "^4.2.1", - "@smithy/uuid": "^1.1.1", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { @@ -5906,15 +5765,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.10.tgz", - "integrity": "sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", + "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -5922,14 +5781,14 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.10.tgz", - "integrity": "sha512-A4ynrsFFfSXUHicfTcRehytppFBcY3HQxEGYiyGktPIOye3Ot7fxpiy4VR42WmtGI4Wfo6OXt/c1Ky1nUFxYYQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz", + "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.13.0", - "@smithy/util-hex-encoding": "^4.2.1", + "@smithy/types": "^4.11.0", + "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -5937,13 +5796,13 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.10.tgz", - "integrity": "sha512-0xupsu9yj9oDVuQ50YCTS9nuSYhGlrwqdaKQel9y2Fz7LU9fNErVlw9N0o4pm4qqvWEGbSTI4HKc6XJfB30MVw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz", + "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.10", - "@smithy/types": "^4.13.0", + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5951,12 +5810,12 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.10.tgz", - "integrity": "sha512-8kn6sinrduk0yaYHMJDsNuiFpXwQwibR7n/4CDUqn4UgaG+SeBHu5jHGFdU9BLFAM7Q4/gvr9RYxBHz9/jKrhA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz", + "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5964,13 +5823,13 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.10.tgz", - "integrity": "sha512-uUrxPGgIffnYfvIOUmBM5i+USdEBRTdh7mLPttjphgtooxQ8CtdO1p6K5+Q4BBAZvKlvtJ9jWyrWpBJYzBKsyQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz", + "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.10", - "@smithy/types": "^4.13.0", + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5978,13 +5837,13 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.10.tgz", - "integrity": "sha512-aArqzOEvcs2dK+xQVCgLbpJQGfZihw8SD4ymhkwNTtwKbnrzdhJsFDKuMQnam2kF69WzgJYOU5eJlCx+CA32bw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz", + "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.10", - "@smithy/types": "^4.13.0", + "@smithy/eventstream-codec": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5992,15 +5851,15 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.11.tgz", - "integrity": "sha512-wbTRjOxdFuyEg0CpumjZO0hkUl+fetJFqxNROepuLIoijQh51aMBmzFLfoQdwRjxsuuS2jizzIUTjPWgd8pd7g==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", + "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.10", - "@smithy/querystring-builder": "^4.2.10", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -6008,14 +5867,14 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.11.tgz", - "integrity": "sha512-DrcAx3PM6AEbWZxsKl6CWAGnVwiz28Wp1ZhNu+Hi4uI/6C1PIZBIaPM2VoqBDAsOWbM6ZVzOEQMxFLLdmb4eBQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.8.tgz", + "integrity": "sha512-07InZontqsM1ggTCPSRgI7d8DirqRrnpL7nIACT4PW0AWrgDiHhjGZzbAE5UtRSiU0NISGUYe7/rri9ZeWyDpw==", "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^5.2.1", - "@smithy/chunked-blob-reader-native": "^4.2.2", - "@smithy/types": "^4.13.0", + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6023,14 +5882,14 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.10.tgz", - "integrity": "sha512-1VzIOI5CcsvMDvP3iv1vG/RfLJVVVc67dCRyLSB2Hn9SWCZrDO3zvcIzj3BfEtqRW5kcMg5KAeVf1K3dR6nD3w==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", + "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", - "@smithy/util-buffer-from": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", + "@smithy/types": "^4.11.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6038,13 +5897,13 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.10.tgz", - "integrity": "sha512-w78xsYrOlwXKwN5tv1GnKIRbHb1HygSpeZMP6xDxCPGf1U/xDHjCpJu64c5T35UKyEPwa0bPeIcvU69VY3khUA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.7.tgz", + "integrity": "sha512-ZQVoAwNYnFMIbd4DUc517HuwNelJUY6YOzwqrbcAgCnVn+79/OK7UjwA93SPpdTOpKDVkLIzavWm/Ck7SmnDPQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", - "@smithy/util-utf8": "^4.2.1", + "@smithy/types": "^4.11.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6052,12 +5911,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.10.tgz", - "integrity": "sha512-vy9KPNSFUU0ajFYk0sDZIYiUlAWGEAhRfehIr5ZkdFrRFTAuXEPUd41USuqHU6vvLX4r6Q9X7MKBco5+Il0Org==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", + "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6065,9 +5924,9 @@ } }, "node_modules/@smithy/is-array-buffer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz", - "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6077,13 +5936,13 @@ } }, "node_modules/@smithy/md5-js": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.10.tgz", - "integrity": "sha512-Op+Dh6dPLWTjWITChFayDllIaCXRofOed8ecpggTC5fkh8yXes0vAEX7gRUfjGK+TlyxoCAA05gHbZW/zB9JwQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.7.tgz", + "integrity": "sha512-Wv6JcUxtOLTnxvNjDnAiATUsk8gvA6EeS8zzHig07dotpByYsLot+m0AaQEniUBjx97AC41MQR4hW0baraD1Xw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", - "@smithy/util-utf8": "^4.2.1", + "@smithy/types": "^4.11.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6091,13 +5950,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.10.tgz", - "integrity": "sha512-TQZ9kX5c6XbjhaEBpvhSvMEZ0klBs1CFtOdPFwATZSbC9UeQfKHPLPN9Y+I6wZGMOavlYTOlHEPDrt42PMSH9w==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", + "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6105,18 +5964,18 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.20", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.20.tgz", - "integrity": "sha512-9W6Np4ceBP3XCYAGLoMCmn8t2RRVzuD1ndWPLBbv7H9CrwM9Bprf6Up6BM9ZA/3alodg0b7Kf6ftBK9R1N04vw==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", + "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.6", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-middleware": "^4.2.10", + "@smithy/core": "^3.20.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -6124,19 +5983,19 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.37", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.37.tgz", - "integrity": "sha512-/1psZZllBBSQ7+qo5+hhLz7AEPGLx3Z0+e3ramMBEuPK2PfvLK4SrncDB9VegX5mBn+oP/UTDrM6IHrFjvX1ZA==", + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", + "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/service-error-classification": "^4.2.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/uuid": "^1.1.1", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { @@ -6144,13 +6003,13 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.11.tgz", - "integrity": "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", + "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6158,12 +6017,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.10.tgz", - "integrity": "sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", + "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6171,14 +6030,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.10.tgz", - "integrity": "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", + "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6186,15 +6045,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.12.tgz", - "integrity": "sha512-zo1+WKJkR9x7ZtMeMDAAsq2PufwiLDmkhcjpWPRRkmeIuOm6nq1qjFICSZbnjBvD09ei8KMo26BWxsu2BUU+5w==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", + "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/querystring-builder": "^4.2.10", - "@smithy/types": "^4.13.0", + "@smithy/abort-controller": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6202,12 +6061,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.10.tgz", - "integrity": "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", + "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6215,12 +6074,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", + "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6228,13 +6087,13 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.10.tgz", - "integrity": "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", + "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", - "@smithy/util-uri-escape": "^4.2.1", + "@smithy/types": "^4.11.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6242,12 +6101,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.10.tgz", - "integrity": "sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", + "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6255,24 +6114,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.10.tgz", - "integrity": "sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", + "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0" + "@smithy/types": "^4.11.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.5.tgz", - "integrity": "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", + "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6280,18 +6139,18 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.10.tgz", - "integrity": "sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", + "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-hex-encoding": "^4.2.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-uri-escape": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6299,17 +6158,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.0.tgz", - "integrity": "sha512-R8bQ9K3lCcXyZmBnQqUZJF4ChZmtWT5NLi6x5kgWx5D+/j0KorXcA0YcFg/X5TOgnTCy1tbKc6z2g2y4amFupQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", + "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.23.6", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-stream": "^4.5.15", + "@smithy/core": "^3.20.0", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", "tslib": "^2.6.2" }, "engines": { @@ -6317,9 +6176,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", + "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6329,13 +6188,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.10.tgz", - "integrity": "sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", + "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.2.10", - "@smithy/types": "^4.13.0", + "@smithy/querystring-parser": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6343,13 +6202,13 @@ } }, "node_modules/@smithy/util-base64": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.1.tgz", - "integrity": "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6357,9 +6216,9 @@ } }, "node_modules/@smithy/util-body-length-browser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.1.tgz", - "integrity": "sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6369,9 +6228,9 @@ } }, "node_modules/@smithy/util-body-length-node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.2.tgz", - "integrity": "sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6381,12 +6240,12 @@ } }, "node_modules/@smithy/util-buffer-from": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz", - "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6394,9 +6253,9 @@ } }, "node_modules/@smithy/util-config-provider": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.1.tgz", - "integrity": "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6406,14 +6265,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.36", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.36.tgz", - "integrity": "sha512-R0smq7EHQXRVMxkAxtH5akJ/FvgAmNF6bUy/GwY/N20T4GrwjT633NFm0VuRpC+8Bbv8R9A0DoJ9OiZL/M3xew==", + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", + "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6421,17 +6280,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.39", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.39.tgz", - "integrity": "sha512-otWuoDm35btJV1L8MyHrPl462B07QCdMTktKc7/yM+Psv6KbED/ziXiHnmr7yPHUjfIwE9S8Max0LO24Mo3ZVg==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", + "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.9", - "@smithy/credential-provider-imds": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6439,13 +6298,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.1.tgz", - "integrity": "sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", + "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/types": "^4.13.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6453,9 +6312,9 @@ } }, "node_modules/@smithy/util-hex-encoding": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.1.tgz", - "integrity": "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6465,12 +6324,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz", - "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", + "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6478,13 +6337,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.10.tgz", - "integrity": "sha512-HrBzistfpyE5uqTwiyLsFHscgnwB0kgv8vySp7q5kZ0Eltn/tjosaSGGDj/jJ9ys7pWzIP/icE2d+7vMKXLv7A==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", + "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.2.10", - "@smithy/types": "^4.13.0", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6492,18 +6351,18 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.15.tgz", - "integrity": "sha512-OlOKnaqnkU9X+6wEkd7mN+WB7orPbCVDauXOj22Q7VtiTkvy7ZdSsOg4QiNAZMgI4OkvNf+/VLUC3VXkxuWJZw==", + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", + "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-buffer-from": "^4.2.1", - "@smithy/util-hex-encoding": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/types": "^4.11.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.6.2" }, "engines": { @@ -6511,9 +6370,9 @@ } }, "node_modules/@smithy/util-uri-escape": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.1.tgz", - "integrity": "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6523,12 +6382,12 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz", - "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -6536,13 +6395,13 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.10.tgz", - "integrity": "sha512-4eTWph/Lkg1wZEDAyObwme0kmhEb7J/JjibY2znJdrYRgKbKqB7YoEhhJVJ4R1g/SYih4zuwX7LpJaM8RsnTVg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.7.tgz", + "integrity": "sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.10", - "@smithy/types": "^4.13.0", + "@smithy/abort-controller": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -6550,9 +6409,9 @@ } }, "node_modules/@smithy/uuid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.1.tgz", - "integrity": "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6804,79 +6663,6 @@ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "license": "MIT" }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", - "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^10.1.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@tufjs/models/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -6952,6 +6738,12 @@ "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", "license": "MIT" }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -6963,9 +6755,9 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { @@ -7022,6 +6814,12 @@ "@types/node": "*" } }, + "node_modules/@types/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", + "license": "MIT" + }, "node_modules/@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", @@ -7043,12 +6841,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz", - "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "license": "MIT", "dependencies": { - "undici-types": "~7.18.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/node-fetch": { @@ -7071,12 +6869,13 @@ } }, "node_modules/@types/nodemailer": { - "version": "6.4.23", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.23.tgz", - "integrity": "sha512-aFV3/NsYFLSx9mbb5gtirBSXJnAlrusoKNuPbxsASWc7vrKLmIrTQRpdcxNcSFL3VW2A2XpeLEavwb2qMi6nlQ==", + "version": "6.4.21", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.21.tgz", + "integrity": "sha512-Eix+sb/Nj28MNnWvO2X1OLrk5vuD4C9SMnb2Vf4itWnxphYeSceqkFX7IdmxTzn+dvmnNz7paMbg4Uc60wSfJg==", "dev": true, "license": "MIT", "dependencies": { + "@aws-sdk/client-ses": "^3.731.1", "@types/node": "*" } }, @@ -7103,6 +6902,13 @@ "integrity": "sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA==", "license": "MIT" }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/pegjs": { "version": "0.10.6", "resolved": "https://registry.npmjs.org/@types/pegjs/-/pegjs-0.10.6.tgz", @@ -7399,9 +7205,9 @@ } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz", - "integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", + "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", "license": "MIT", "dependencies": { "http-proxy-agent": "^7.0.0", @@ -7465,9 +7271,9 @@ "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7475,13 +7281,13 @@ "tslib": "^2.4.0" }, "engines": { - "node": ">=18.12.0" + "node": ">=14.15.0" } }, "node_modules/@zkochan/js-yaml": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", "dev": true, "license": "MIT", "dependencies": { @@ -7514,14 +7320,11 @@ "license": "BSD-3-Clause" }, "node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "ISC" }, "node_modules/abort-controller": { "version": "3.0.0", @@ -7598,6 +7401,19 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -7613,9 +7429,9 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -7734,12 +7550,27 @@ "license": "MIT" }, "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", "dev": true, "license": "ISC" }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -7796,14 +7627,12 @@ "node": ">=0.10.0" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" }, "node_modules/asn1.js": { "version": "5.4.1", @@ -7881,12 +7710,40 @@ "retry": "0.13.1" } }, + "node_modules/async-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/athena-express": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/athena-express/-/athena-express-7.1.5.tgz", + "integrity": "sha512-YLCaKQWyLDUjyHNH939H0eTTP/FbgZutx8vn5qzMUiAaMrS2DWaClL9g27nPMIad9QcJYdF1HIA6KfAH0c5txg==", + "license": "MIT", + "dependencies": { + "csvtojson": "^2.0.10" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -7902,6 +7759,79 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-sdk": { + "version": "2.1693.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1693.0.tgz", + "integrity": "sha512-cJmb8xEnVLT+R6fBS5sn/EFJiX7tUnDaPtOPZ1vFbOJtd0fnZn/Ky2XGgsvvoeliWeH7mL3TWSX5zXXGSQV6gQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "license": "BSD-3-Clause" + }, + "node_modules/aws-sdk/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "license": "MIT" + }, + "node_modules/aws-sdk/node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/aws-ssl-profiles": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", @@ -7918,13 +7848,13 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -8055,36 +7985,24 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", - "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", "dev": true, "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" + "baseline-browser-mapping": "dist/cli.js" } }, "node_modules/basic-ftp": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", - "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", "license": "MIT", "engines": { "node": ">=10.0.0" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", @@ -8124,67 +8042,45 @@ } }, "node_modules/bin-links": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-5.0.0.tgz", - "integrity": "sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz", + "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", "dev": true, "license": "ISC", "dependencies": { - "cmd-shim": "^7.0.0", - "npm-normalize-package-bin": "^4.0.0", - "proc-log": "^5.0.0", - "read-cmd-shim": "^5.0.0", - "write-file-atomic": "^6.0.0" + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/bin-links/node_modules/cmd-shim": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-7.0.0.tgz", - "integrity": "sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw==", + "node_modules/bin-links/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/bin-links/node_modules/read-cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz", - "integrity": "sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/bin-links/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/bin-links/node_modules/write-file-atomic": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz", - "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "signal-exit": "^3.0.7" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/binascii": { @@ -8220,15 +8116,15 @@ "license": "MIT" }, "node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "license": "MIT" }, "node_modules/bowser": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", - "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", "license": "MIT" }, "node_modules/brace-expansion": { @@ -8389,13 +8285,14 @@ "dev": true, "license": "MIT" }, - "node_modules/buildcheck": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.7.tgz", - "integrity": "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==", - "optional": true, - "engines": { - "node": ">=10.0.0" + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" } }, "node_modules/bundle-name": { @@ -8426,142 +8323,97 @@ } }, "node_modules/byte-size": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", - "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.17" + "node": ">=10" } }, "node_modules/cacache": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", - "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^5.0.0", - "fs-minipass": "^3.0.0", - "glob": "^13.0.0", - "lru-cache": "^11.1.0", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^13.0.0", - "unique-filename": "^5.0.0" + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/cacache/node_modules/@npmcli/fs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", - "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/cacache/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/cacache/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" + "balanced-match": "^1.0.0" } }, "node_modules/cacache/node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "engines": { - "node": "20 || >=22" + "node": ">=12" } }, "node_modules/cacache/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacache/node_modules/ssri": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", - "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, "node_modules/cacheable-lookup": { @@ -8692,9 +8544,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001775", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", - "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==", + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", "dev": true, "funding": [ { @@ -8761,13 +8613,13 @@ "license": "MIT" }, "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "engines": { - "node": ">=18" + "node": ">=10" } }, "node_modules/ci-info": { @@ -8830,33 +8682,32 @@ } }, "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "license": "ISC", "engines": { - "node": ">= 12" + "node": ">= 10" } }, "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", + "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" } }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -8880,6 +8731,34 @@ "node": ">=0.8" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", @@ -8902,13 +8781,16 @@ } }, "node_modules/cmd-shim": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", - "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", "dev": true, "license": "ISC", + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/co": { @@ -9119,6 +9001,19 @@ "dot-prop": "^5.1.0" } }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -9153,6 +9048,17 @@ "typedarray": "^0.0.6" } }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -9170,6 +9076,18 @@ "node": ">=8" } }, + "node_modules/configstore/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/configstore/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -9202,126 +9120,145 @@ "license": "ISC" }, "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "license": "ISC", "dependencies": { - "compare-func": "^2.0.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { - "node": ">=16" + "node": ">=10" } }, "node_modules/conventional-changelog-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", - "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "license": "MIT", "dependencies": { "add-stream": "^1.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-parser": "^4.0.0", - "dateformat": "^3.0.3", - "get-pkg-repo": "^4.2.1", - "git-raw-commits": "^3.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^5.0.0", - "normalize-package-data": "^3.0.3", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0" + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/conventional-changelog-preset-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", - "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, "license": "MIT", "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/conventional-changelog-writer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", - "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, "license": "MIT", "dependencies": { - "conventional-commits-filter": "^3.0.0", - "dateformat": "^3.0.3", + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", - "meow": "^8.1.2", - "semver": "^7.0.0", - "split": "^1.0.1" + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" }, "bin": { "conventional-changelog-writer": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/conventional-commits-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", - "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" + "modify-values": "^1.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, "bin": { "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/conventional-recommended-bump": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", - "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, "license": "MIT", "dependencies": { "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^3.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "git-raw-commits": "^3.0.0", - "git-semver-tags": "^5.0.0", - "meow": "^8.1.2" + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" }, "bin": { "conventional-recommended-bump": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/convert-source-map": { @@ -9339,64 +9276,20 @@ "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/cpu-features": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", - "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" - }, - "engines": { - "node": ">=10.0.0" + "node": ">=10" } }, "node_modules/cross-spawn": { @@ -9422,19 +9315,6 @@ "node": ">=8" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -9462,6 +9342,21 @@ "dev": true, "license": "MIT" }, + "node_modules/csvtojson": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-2.0.14.tgz", + "integrity": "sha512-F7NNvhhDyob7OsuEGRsH0FM1aqLs/WYITyza3l+hTEEmOK9sGPBlYQZwlVG0ezCojXYpE17lhS5qL6BCOZSPyA==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + }, + "bin": { + "csvtojson": "bin/csvtojson" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/cuint": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", @@ -9536,6 +9431,17 @@ } } }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -9640,9 +9546,9 @@ } }, "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -9738,6 +9644,13 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT" + }, "node_modules/denque": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", @@ -9755,13 +9668,13 @@ "license": "ISC" }, "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/detect-newline": { @@ -9774,6 +9687,17 @@ "node": ">=8" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", @@ -9835,44 +9759,29 @@ } }, "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" + "node": ">=10" } }, "node_modules/dunder-proto": { @@ -9889,6 +9798,13 @@ "node": ">= 0.4" } }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, "node_modules/duplexify": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", @@ -9964,9 +9880,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.302", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", - "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, "license": "ISC" }, @@ -10073,9 +9989,9 @@ } }, "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, "license": "MIT", "bin": { @@ -10442,9 +10358,9 @@ } }, "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10670,22 +10586,10 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fast-xml-builder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.0.0.tgz", - "integrity": "sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/fast-xml-parser": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", - "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", "funding": [ { "type": "github", @@ -10694,7 +10598,7 @@ ], "license": "MIT", "dependencies": { - "strnum": "^2.1.2" + "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" @@ -10797,9 +10701,9 @@ } }, "node_modules/filelist": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", - "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10817,9 +10721,9 @@ } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -10908,9 +10812,9 @@ "license": "SEE LICENSE IN LICENSE" }, "node_modules/flatted": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.4.tgz", - "integrity": "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, @@ -11020,16 +10924,6 @@ "node": ">=12.20.0" } }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -11038,31 +10932,32 @@ "license": "MIT" }, "node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", "dependencies": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=10" } }, "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, "node_modules/fs.realpath": { @@ -11101,6 +10996,27 @@ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "license": "MIT" }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/gaxios": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", @@ -11228,38 +11144,49 @@ "node": ">=6.9.0" } }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "safe-buffer": "~5.1.0" } }, - "node_modules/get-pkg-repo/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } }, "node_modules/get-port": { "version": "5.1.1", @@ -11320,22 +11247,23 @@ "license": "MIT" }, "node_modules/git-raw-commits": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", - "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", - "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "license": "MIT", "dependencies": { "dargs": "^7.0.0", - "meow": "^8.1.2", - "split2": "^3.2.2" + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, "bin": { "git-raw-commits": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/git-remote-origin-url": { @@ -11363,21 +11291,30 @@ } }, "node_modules/git-semver-tags": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", - "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", - "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, "license": "MIT", "dependencies": { - "meow": "^8.1.2", - "semver": "^7.0.0" + "meow": "^8.0.0", + "semver": "^6.0.0" }, "bin": { "git-semver-tags": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, "node_modules/git-up": { @@ -11392,9 +11329,9 @@ } }, "node_modules/git-url-parse": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.1.tgz", + "integrity": "sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11415,7 +11352,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -11796,23 +11733,6 @@ "node": ">=18.0.0" } }, - "node_modules/googleapis-common/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/googleapis-common/node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -11822,30 +11742,6 @@ "node": ">= 14" } }, - "node_modules/googleapis-common/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/googleapis-common/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/googleapis-common/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -11864,21 +11760,16 @@ "node": ">= 12" } }, - "node_modules/googleapis-common/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, "node_modules/googleapis-common/node_modules/gaxios": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", - "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", "license": "Apache-2.0", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.2" + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" }, "engines": { "node": ">=18" @@ -11902,7 +11793,6 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -11920,37 +11810,23 @@ } }, "node_modules/googleapis-common/node_modules/google-auth-library": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.1.tgz", - "integrity": "sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "7.1.3", - "gcp-metadata": "8.1.2", - "google-logging-utils": "1.1.3", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", "jws": "^4.0.0" }, "engines": { "node": ">=18" } }, - "node_modules/googleapis-common/node_modules/google-auth-library/node_modules/gaxios": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", - "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", - "license": "Apache-2.0", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.2", - "rimraf": "^5.0.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/googleapis-common/node_modules/google-logging-utils": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", @@ -11960,6 +11836,19 @@ "node": ">=14" } }, + "node_modules/googleapis-common/node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/googleapis-common/node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -11973,34 +11862,13 @@ "node": ">= 14" } }, - "node_modules/googleapis-common/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/googleapis-common/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, "node_modules/googleapis-common/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -12009,6 +11877,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/googleapis-common/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/googleapis-common/node_modules/node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", @@ -12027,22 +11904,6 @@ "url": "https://opencollective.com/node-fetch" } }, - "node_modules/googleapis-common/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/googleapis-common/node_modules/rimraf": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", @@ -12058,72 +11919,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/googleapis-common/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/googleapis-common/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/googleapis-common/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/googleapis/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/googleapis/node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", @@ -12133,30 +11928,6 @@ "node": ">= 14" } }, - "node_modules/googleapis/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/googleapis/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/googleapis/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -12175,12 +11946,6 @@ "node": ">= 12" } }, - "node_modules/googleapis/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, "node_modules/googleapis/node_modules/gaxios": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", @@ -12214,7 +11979,6 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -12232,16 +11996,17 @@ } }, "node_modules/googleapis/node_modules/google-auth-library": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.1.tgz", - "integrity": "sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "7.1.3", - "gcp-metadata": "8.1.2", - "google-logging-utils": "1.1.3", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", "jws": "^4.0.0" }, "engines": { @@ -12257,6 +12022,19 @@ "node": ">=14" } }, + "node_modules/googleapis/node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/googleapis/node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -12270,34 +12048,13 @@ "node": ">= 14" } }, - "node_modules/googleapis/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/googleapis/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, "node_modules/googleapis/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -12306,6 +12063,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/googleapis/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/googleapis/node_modules/node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", @@ -12324,22 +12090,6 @@ "url": "https://opencollective.com/node-fetch" } }, - "node_modules/googleapis/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/googleapis/node_modules/rimraf": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", @@ -12355,55 +12105,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/googleapis/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/googleapis/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/googleapis/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -12448,12 +12149,13 @@ "license": "ISC" }, "node_modules/grpc-js-reflection-client": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/grpc-js-reflection-client/-/grpc-js-reflection-client-1.3.4.tgz", - "integrity": "sha512-Aa+woATrUc6zSnseIiJRjuFMsli3wfeQWnqYRcWmttb2G2m+weG2xSF3SZ8hswWE5jpvuQLyFqNzNAZJ6lAOOw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/grpc-js-reflection-client/-/grpc-js-reflection-client-1.3.3.tgz", + "integrity": "sha512-4OQCk2iZIfhgj3ou9+tKoUP3lDuh0vuN7ZhX1rW8w6SDv2fcam7rQz7zh7zGwQKWrcin1aRrNyPHckeJWjDJZw==", "license": "MIT", "dependencies": { - "lodash": "^4.17.23", + "@types/lodash": "^4.17.21", + "lodash": "^4.17.21", "protobufjs": "^7.5.4" }, "peerDependencies": { @@ -12592,28 +12294,38 @@ } }, "node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^11.1.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "20 || >=22" + "node": ">=10" } }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/hpagent": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", @@ -12725,10 +12437,20 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -12772,55 +12494,39 @@ } }, "node_modules/ignore-walk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", - "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "license": "ISC", "dependencies": { - "minimatch": "^10.0.3" + "minimatch": "^5.0.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/ignore-walk/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" + "balanced-match": "^1.0.0" } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, "node_modules/import-fresh": { @@ -12879,6 +12585,13 @@ "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC" + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -12904,49 +12617,88 @@ "license": "ISC" }, "node_modules/init-package-json": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-8.2.2.tgz", - "integrity": "sha512-pXVMn67Jdw2hPKLCuJZj62NC9B2OIDd1R3JwZXTHXuEnfN3Uq5kJbKOSld6YEU+KOGfMD82EzxFTYz5o0SSJoA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", + "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^7.0.0", - "npm-package-arg": "^13.0.0", - "promzard": "^2.0.0", - "read": "^4.0.0", - "semver": "^7.7.2", + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^6.0.2" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/init-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/inquirer": { - "version": "12.9.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.9.6.tgz", - "integrity": "sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^1.0.0", - "@inquirer/core": "^10.2.2", - "@inquirer/prompts": "^7.8.6", - "@inquirer/type": "^3.0.8", - "mute-stream": "^2.0.0", - "run-async": "^4.0.5", - "rxjs": "^7.8.2" + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": ">=12.0.0" } }, "node_modules/interpret": { @@ -12959,9 +12711,9 @@ } }, "node_modules/ioredis": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.31.0.tgz", - "integrity": "sha512-tVrCrc4LWJwX82GD79dZ0teZQGq+5KJEGpXJRgzHOrhHtLgF9ME6rTwDV5+HN5bjnvmtrnS8ioXhflY16sy2HQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.30.1.tgz", + "integrity": "sha512-17Ed70njJ7wT7JZsdTVLb0j/cmwHwfQCFu+AP6jY7nFKd+CA7MBW7nX121mM64eT8S9ekAVtYYt8nGQPmm3euA==", "license": "MIT", "dependencies": { "@ioredis/commands": "^1.0.2", @@ -13056,18 +12808,25 @@ } }, "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "license": "MIT", "dependencies": { - "ci-info": "^3.2.0" + "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -13200,6 +12959,13 @@ "node": ">=8" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -13228,6 +12994,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -13344,7 +13120,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, "license": "MIT" }, "node_modules/isexe": { @@ -13353,6 +13128,16 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", @@ -13444,19 +13229,18 @@ } }, "node_modules/jackspeak": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", - "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", - "dev": true, + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^9.0.0" - }, - "engines": { - "node": "20 || >=22" + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jake": { @@ -13829,13 +13613,13 @@ } }, "node_modules/jest-message-util/node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -14136,6 +13920,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/jose": { "version": "4.15.9", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", @@ -14225,9 +14018,9 @@ } }, "node_modules/jsdom/node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -14298,14 +14091,11 @@ "license": "MIT" }, "node_modules/json-parse-even-better-errors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", - "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -14425,9 +14215,9 @@ } }, "node_modules/just-diff": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", - "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz", + "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==", "dev": true, "license": "MIT" }, @@ -14587,454 +14377,41 @@ "license": "MIT" }, "node_modules/lerna": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-9.0.5.tgz", - "integrity": "sha512-LtwZu2wINHlKpjRCxrEdK3QopyeUpFuUS4v6uzLYdg/uxnAKqDHrGY/mDPxdxDR3YAXJzpWXBdz49AHNIKZaSg==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.6.2.tgz", + "integrity": "sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/create": "9.0.5", - "@npmcli/arborist": "9.1.6", - "@npmcli/package-json": "7.0.2", - "@npmcli/run-script": "10.0.3", - "@nx/devkit": ">=21.5.2 < 23.0.0", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "20.1.2", - "aproba": "2.0.0", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "cmd-shim": "6.0.3", - "color-support": "1.1.3", - "columnify": "1.6.0", - "console-control-strings": "^1.1.0", - "conventional-changelog-angular": "7.0.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "9.0.0", - "dedent": "1.5.3", - "envinfo": "7.13.0", - "execa": "5.0.0", - "fs-extra": "^11.2.0", - "get-port": "5.1.1", - "get-stream": "6.0.0", - "git-url-parse": "14.0.0", - "glob-parent": "6.0.2", - "has-unicode": "2.0.1", - "import-local": "3.1.0", - "ini": "^1.3.8", - "init-package-json": "8.2.2", - "inquirer": "12.9.6", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "jest-diff": ">=30.0.0 < 31", - "js-yaml": "4.1.1", - "libnpmaccess": "10.0.3", - "libnpmpublish": "11.1.2", - "load-json-file": "6.2.0", - "make-dir": "4.0.0", - "make-fetch-happen": "15.0.2", - "minimatch": "3.1.4", - "multimatch": "5.0.0", - "npm-package-arg": "13.0.1", - "npm-packlist": "10.0.3", - "npm-registry-fetch": "19.1.0", - "nx": ">=21.5.3 < 23.0.0", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-pipe": "3.1.0", - "p-queue": "6.6.2", - "p-reduce": "2.1.0", - "p-waterfall": "2.1.1", - "pacote": "21.0.1", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "resolve-from": "5.0.0", - "rimraf": "^6.1.2", - "semver": "7.7.2", - "set-blocking": "^2.0.0", - "signal-exit": "3.0.7", - "slash": "3.0.0", - "ssri": "12.0.0", - "string-width": "^4.2.3", - "tar": "7.5.8", - "temp-dir": "1.0.0", - "through": "2.3.8", - "tinyglobby": "0.2.12", - "typescript": ">=3 < 6", - "upath": "2.0.1", - "uuid": "^11.1.0", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "6.0.2", - "wide-align": "1.1.5", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" + "@lerna/add": "5.6.2", + "@lerna/bootstrap": "5.6.2", + "@lerna/changed": "5.6.2", + "@lerna/clean": "5.6.2", + "@lerna/cli": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/create": "5.6.2", + "@lerna/diff": "5.6.2", + "@lerna/exec": "5.6.2", + "@lerna/import": "5.6.2", + "@lerna/info": "5.6.2", + "@lerna/init": "5.6.2", + "@lerna/link": "5.6.2", + "@lerna/list": "5.6.2", + "@lerna/publish": "5.6.2", + "@lerna/run": "5.6.2", + "@lerna/version": "5.6.2", + "@nrwl/devkit": ">=14.8.1 < 16", + "import-local": "^3.0.2", + "inquirer": "^8.2.4", + "npmlog": "^6.0.2", + "nx": ">=14.8.1 < 16", + "typescript": "^3 || ^4" }, "bin": { - "lerna": "dist/cli.js" + "lerna": "cli.js" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - } - }, - "node_modules/lerna/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/lerna/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/lerna/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/lerna/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lerna/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/jest-diff": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", - "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/lerna/node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/lerna/node_modules/minimatch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", - "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/lerna/node_modules/pretty-format": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", - "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/lerna/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/lerna/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lerna/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/rimraf": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", - "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "glob": "^13.0.3", - "package-json-from-dist": "^1.0.1" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lerna/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/lerna/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" + "node": "^14.15.0 || >=16.0.0" } }, "node_modules/leven": { @@ -15062,59 +14439,136 @@ } }, "node_modules/libnpmaccess": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-10.0.3.tgz", - "integrity": "sha512-JPHTfWJxIK+NVPdNMNGnkz4XGX56iijPbe0qFWbdt68HL+kIvSzh+euBL8npLZvl2fpaxo+1eZSdoG15f5YdIQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz", + "integrity": "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==", "dev": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0" + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/libnpmaccess/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/libnpmaccess/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmpublish": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-11.1.2.tgz", - "integrity": "sha512-tNcU3cLH7toloAzhOOrBDhjzgbxpyuYvkf+BPPnnJCdc5EIcdJ8JcT+SglvCQKKyZ6m9dVXtCVlJcA6csxKdEA==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz", + "integrity": "sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0", + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", "semver": "^7.3.7", - "sigstore": "^4.0.0", - "ssri": "^12.0.0" + "ssri": "^9.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmpublish/node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmpublish/node_modules/normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, "license": "MIT", "engines": { @@ -15161,9 +14615,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.camelcase": { @@ -15345,9 +14799,9 @@ } }, "node_modules/lru.min": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", - "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.3.tgz", + "integrity": "sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==", "license": "MIT", "engines": { "bun": ">=1.0.0", @@ -15400,26 +14854,66 @@ "license": "ISC" }, "node_modules/make-fetch-happen": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", - "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "ssri": "^12.0.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" } }, "node_modules/makeerror": { @@ -15446,29 +14940,28 @@ } }, "node_modules/mariadb": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.5.1.tgz", - "integrity": "sha512-ObKf/e7jU8pmwa5wTs1UwhLMrQYRBDwXPndej2Dv/rvbqsokJYlymubsNtpakVfjI+hd0bG3U6tiuVunDYoLtA==", + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.4.5.tgz", + "integrity": "sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==", "license": "LGPL-2.1-or-later", "dependencies": { + "@types/geojson": "^7946.0.16", + "@types/node": "^24.0.13", "denque": "^2.1.0", - "iconv-lite": "^0.7.2", + "iconv-lite": "^0.6.3", "lru-cache": "^10.4.3" }, "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@types/geojson": ">=7946.0.0", - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/geojson": { - "optional": true - }, - "@types/node": { - "optional": true - } + "node": ">= 14" + } + }, + "node_modules/mariadb/node_modules/@types/node": { + "version": "24.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", + "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" } }, "node_modules/mariadb/node_modules/denque": { @@ -15480,6 +14973,18 @@ "node": ">=0.10" } }, + "node_modules/mariadb/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mariadb/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -15625,16 +15130,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -15733,9 +15228,9 @@ "license": "ISC" }, "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -15794,9 +15289,9 @@ } }, "node_modules/minio/node_modules/fast-xml-parser": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz", - "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", "funding": [ { "type": "github", @@ -15805,7 +15300,7 @@ ], "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "strnum": "^1.1.1" }, "bin": { "fxparser": "src/cli/cli.js" @@ -15823,50 +15318,67 @@ ], "license": "MIT" }, - "node_modules/minio/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "node_modules/minio/node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "license": "MIT", "dependencies": { - "readable-stream": "3" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/minio/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" } }, "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "yallist": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/minipass-fetch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", - "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^7.0.3", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" + "minizlib": "^2.1.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -15885,26 +15397,17 @@ "node": ">= 8" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/minipass-json-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", + "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -15918,26 +15421,6 @@ "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -15951,20 +15434,7 @@ "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { + "node_modules/minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", @@ -15972,18 +15442,26 @@ "license": "ISC" }, "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^7.1.2" + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 8" } }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -15996,13 +15474,19 @@ "node": ">=10" } }, - "node_modules/mnemonist": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz", - "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==", - "license": "MIT", + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "license": "ISC", "dependencies": { - "obliterator": "^1.6.1" + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" } }, "node_modules/modify-values": { @@ -16135,35 +15619,30 @@ } }, "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "ISC" }, "node_modules/mysql2": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.18.2.tgz", - "integrity": "sha512-UfEShBFAZZEAKjySnTUuE7BgqkYT4mx+RjoJ5aqtmwSSvNcJ/QxQPXz/y3jSxNiVRedPfgccmuBtiPCSiEEytw==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.16.0.tgz", + "integrity": "sha512-AEGW7QLLSuSnjCS4pk3EIqOmogegmze9h8EyrndavUQnIUcfkVal/sK7QznE+a3bc6rzPbAiui9Jcb+96tPwYA==", "license": "MIT", "dependencies": { - "aws-ssl-profiles": "^1.1.2", + "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", - "iconv-lite": "^0.7.2", - "long": "^5.3.2", - "lru.min": "^1.1.4", - "named-placeholders": "^1.1.6", - "sql-escaper": "^1.3.3" + "iconv-lite": "^0.7.0", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" }, "engines": { "node": ">= 8.0" - }, - "peerDependencies": { - "@types/node": ">= 8" } }, "node_modules/mysql2/node_modules/denque": { @@ -16188,9 +15667,9 @@ } }, "node_modules/nan": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", - "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.24.0.tgz", + "integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==", "license": "MIT", "optional": true }, @@ -16208,9 +15687,9 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, "license": "MIT", "engines": { @@ -16253,6 +15732,13 @@ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "license": "MIT" }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT" + }, "node_modules/node-appwrite": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-13.0.0.tgz", @@ -16361,90 +15847,57 @@ } }, "node_modules/node-gyp": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", - "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^15.0.0", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "which": "^6.0.0" + "tar": "^6.1.2", + "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", - "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", - "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=20" + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, "node_modules/node-gyp/node_modules/nopt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", - "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^4.0.0" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/node-gyp/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", - "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^4.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/node-int64": { @@ -16453,13 +15906,6 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "license": "MIT" }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "dev": true, - "license": "MIT" - }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -16468,9 +15914,9 @@ "license": "MIT" }, "node_modules/node-sql-parser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-5.4.0.tgz", - "integrity": "sha512-jVe6Z61gPcPjCElPZ6j8llB3wnqGcuQzefim1ERsqIakxnEy5JlzV7XKdO1KmacRG5TKwPc4vJTgSRQ0LfkbFw==", + "version": "5.3.13", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-5.3.13.tgz", + "integrity": "sha512-heyWv3lLjKHpcBDMUSR+R0DohRYZTYq+Ro3hJ4m9Ia8ccdKbL5UijIaWr2L4co+bmmFuvBVZ4v23QW2PqvBFAA==", "license": "Apache-2.0", "dependencies": { "@types/pegjs": "^0.10.0", @@ -16490,19 +15936,19 @@ } }, "node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^3.0.0" + "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, "node_modules/normalize-package-data": { @@ -16521,39 +15967,6 @@ "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -16577,138 +15990,307 @@ } }, "node_modules/npm-bundled": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", - "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "npm-normalize-package-bin": "^1.0.1" } }, "node_modules/npm-install-checks": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", - "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", - "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "ISC" }, "node_modules/npm-package-arg": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.1.tgz", - "integrity": "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", + "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", "dev": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, + "node_modules/npm-package-arg/node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/npm-package-arg/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/npm-packlist": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", - "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, "license": "ISC", "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^6.0.0" + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "bin": { + "npm-packlist": "bin/index.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-packlist/node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "node_modules/npm-packlist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-packlist/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-packlist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, "license": "ISC", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-pick-manifest": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", - "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", + "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", "dev": true, "license": "ISC", "dependencies": { - "npm-install-checks": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "npm-package-arg": "^13.0.0", + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/npm-install-checks": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", - "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "semver": "^7.1.1" + "lru-cache": "^7.5.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" } }, "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", - "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, "license": "ISC", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm-registry-fetch": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.0.tgz", - "integrity": "sha512-xyZLfs7TxPu/WKjHUs0jZOPinzBAI32kEUel6za0vH+JUTnFZ5zbHI1ZoGZRDm6oMjADtrli6FxtMlk/5ABPNw==", + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^13.0.0", - "proc-log": "^5.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-run-path": { @@ -16724,6 +16306,23 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/nwsapi": { "version": "2.2.23", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", @@ -16732,69 +16331,66 @@ "license": "MIT" }, "node_modules/nx": { - "version": "22.5.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-22.5.3.tgz", - "integrity": "sha512-IaEPqdgaFBIr0Bfmnt6WAcX3t660sOuDXQ71lpoS8GgpD8cqX1LIW2ZyzEAdOvCP1iD6HCZehpofcVvaaL1GNQ==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.7.tgz", + "integrity": "sha512-1qlEeDjX9OKZEryC8i4bA+twNg+lB5RKrozlNwWx/lLJHqWPUfvUTvxh+uxlPYL9KzVReQjUuxMLFMsHNqWUrA==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", + "@nrwl/cli": "15.9.7", + "@nrwl/tao": "15.9.7", + "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.12.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "ejs": "^3.1.7", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", "enquirer": "~2.3.6", + "fast-glob": "3.2.7", "figures": "3.2.0", "flat": "^5.0.2", - "front-matter": "^4.0.2", - "ignore": "^7.0.5", - "jest-diff": "^30.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "10.2.1", - "node-machine-id": "1.1.12", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "ora": "5.3.0", - "picocolors": "^1.1.0", - "resolve.exports": "2.0.3", - "semver": "^7.6.3", + "semver": "7.5.4", "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", - "tree-kill": "^1.2.2", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", - "yaml": "^2.6.0", + "v8-compile-cache": "2.3.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" + "nx": "bin/nx.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "22.5.3", - "@nx/nx-darwin-x64": "22.5.3", - "@nx/nx-freebsd-x64": "22.5.3", - "@nx/nx-linux-arm-gnueabihf": "22.5.3", - "@nx/nx-linux-arm64-gnu": "22.5.3", - "@nx/nx-linux-arm64-musl": "22.5.3", - "@nx/nx-linux-x64-gnu": "22.5.3", - "@nx/nx-linux-x64-musl": "22.5.3", - "@nx/nx-win32-arm64-msvc": "22.5.3", - "@nx/nx-win32-x64-msvc": "22.5.3" + "@nrwl/nx-darwin-arm64": "15.9.7", + "@nrwl/nx-darwin-x64": "15.9.7", + "@nrwl/nx-linux-arm-gnueabihf": "15.9.7", + "@nrwl/nx-linux-arm64-gnu": "15.9.7", + "@nrwl/nx-linux-arm64-musl": "15.9.7", + "@nrwl/nx-linux-x64-gnu": "15.9.7", + "@nrwl/nx-linux-x64-musl": "15.9.7", + "@nrwl/nx-win32-arm64-msvc": "15.9.7", + "@nrwl/nx-win32-x64-msvc": "15.9.7" }, "peerDependencies": { - "@swc-node/register": "^1.11.1", - "@swc/core": "^1.15.8" + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" }, "peerDependenciesMeta": { "@swc-node/register": { @@ -16805,41 +16401,12 @@ } } }, - "node_modules/nx/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/nx/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/nx/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/nx/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } + "license": "Python-2.0" }, "node_modules/nx/node_modules/enquirer": { "version": "2.3.6", @@ -16854,80 +16421,144 @@ "node": ">=8.6" } }, - "node_modules/nx/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/nx/node_modules/jest-diff": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", - "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "node_modules/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/nx/node_modules/minimatch": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", - "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nx/node_modules/pretty-format": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", - "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "node_modules/nx/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=14.14" } }, - "node_modules/nx/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } }, - "node_modules/nx/node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "node_modules/nx/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { "node": ">=10" } }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nx/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/nx/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/nx/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -16947,6 +16578,31 @@ "node": ">=12" } }, + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/oauth-1.0a": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/oauth-1.0a/-/oauth-1.0a-2.2.6.tgz", @@ -16983,12 +16639,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obliterator": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz", - "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==", - "license": "MIT" - }, "node_modules/oidc-token-hash": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.2.0.tgz", @@ -17110,18 +16760,19 @@ } }, "node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.0.3", + "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, @@ -17362,6 +17013,20 @@ "node": ">= 14" } }, + "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/pac-resolver": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", @@ -17397,156 +17062,78 @@ "license": "BSD" }, "node_modules/pacote": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.1.tgz", - "integrity": "sha512-LHGIUQUrcDIJUej53KJz1BPvUuHrItrR2yrnN0Kl9657cJ0ZT6QJHk9wWPBnQZhYT5KLyZWrk9jaYc2aKDu4yw==", + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0", + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "sigstore": "^4.0.0", - "ssri": "^12.0.0", - "tar": "^7.4.3" + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" }, "bin": { - "pacote": "bin/index.js" + "pacote": "lib/bin.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/pacote/node_modules/@npmcli/git": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", - "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/pacote/node_modules/@npmcli/promise-spawn": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", - "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/pacote/node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "lru-cache": "^7.5.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/pacote/node_modules/ini": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", - "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/pacote/node_modules/isexe": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", - "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/pacote/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/pacote/node_modules/npm-pick-manifest": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", - "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=12" } }, - "node_modules/pacote/node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", - "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/pacote/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/pad-left": { @@ -17575,28 +17162,18 @@ } }, "node_modules/parse-conflict-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz", - "integrity": "sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", + "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", "dev": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "just-diff": "^6.0.0", + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", - "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/parse-json": { @@ -17618,13 +17195,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, "node_modules/parse-json/node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -17703,30 +17273,34 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", - "dev": true, - "license": "BlueOak-1.0.0", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": "20 || >=22" + "node": ">=16 || 14 >=14.17" } }, "node_modules/path-type": { @@ -17740,14 +17314,14 @@ } }, "node_modules/pg": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.19.0.tgz", - "integrity": "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ==", + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", "license": "MIT", "dependencies": { - "pg-connection-string": "^2.11.0", - "pg-pool": "^3.12.0", - "pg-protocol": "^1.12.0", + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", "pg-types": "2.2.0", "pgpass": "1.0.5" }, @@ -17755,7 +17329,7 @@ "node": ">= 16.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.3.0" + "pg-cloudflare": "^1.2.7" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -17767,9 +17341,9 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", - "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", "license": "MIT", "optional": true }, @@ -17789,18 +17363,18 @@ } }, "node_modules/pg-pool": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.12.0.tgz", - "integrity": "sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.12.0.tgz", - "integrity": "sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", "license": "MIT" }, "node_modules/pg-types": { @@ -17820,9 +17394,9 @@ } }, "node_modules/pg/node_modules/pg-connection-string": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.11.0.tgz", - "integrity": "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", "license": "MIT" }, "node_modules/pgpass": { @@ -17907,20 +17481,6 @@ "node": ">= 0.4" } }, - "node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -18034,13 +17594,13 @@ "license": "MIT" }, "node_modules/proc-log": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", - "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/process": { @@ -18059,16 +17619,6 @@ "dev": true, "license": "MIT" }, - "node_modules/proggy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proggy/-/proggy-3.0.0.tgz", - "integrity": "sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -18090,15 +17640,22 @@ } }, "node_modules/promise-call-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", - "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", + "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", "dev": true, "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -18113,16 +17670,6 @@ "node": ">=10" } }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -18138,16 +17685,13 @@ } }, "node_modules/promzard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-2.0.0.tgz", - "integrity": "sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, "license": "ISC", "dependencies": { - "read": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "read": "1" } }, "node_modules/propagate": { @@ -18159,6 +17703,13 @@ "node": ">= 8" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, "node_modules/proto3-json-serializer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", @@ -18265,6 +17816,20 @@ "node": ">=12" } }, + "node_modules/proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -18284,9 +17849,9 @@ } }, "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -18340,9 +17905,9 @@ } }, "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -18372,6 +17937,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -18429,26 +18003,150 @@ "license": "MIT" }, "node_modules/read": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/read/-/read-4.1.0.tgz", - "integrity": "sha512-uRfX6K+f+R8OOrYScaM3ixPY4erg69f8DN6pgTvMcA9iRc8iDhwrA4m3Yu8YYKsXJgVvum+m8PkRboZwwuLzYA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "license": "ISC", "dependencies": { - "mute-stream": "^2.0.0" + "mute-stream": "~0.0.4" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.8" } }, "node_modules/read-cmd-shim": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz", + "integrity": "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-pkg": { @@ -18660,6 +18358,20 @@ "node": ">= 6" } }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -18861,9 +18573,10 @@ } }, "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -18921,9 +18634,9 @@ } }, "node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "license": "MIT", "engines": { @@ -19021,13 +18734,10 @@ "integrity": "sha512-k6knZTDNK8PKKbIqnvxiOveJinuw2LcQjqDoaorZWP9M5AR2EPsnpDeSbeoZZ0pHr5ze1uoaKdK8NBGQrJ34Uw==" }, "node_modules/sax": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", - "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "license": "ISC" }, "node_modules/saxes": { "version": "5.0.1", @@ -19064,9 +18774,9 @@ } }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -19075,6 +18785,11 @@ "node": ">=10" } }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -19099,6 +18814,19 @@ "node": ">= 0.4" } }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -19198,24 +18926,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, - "node_modules/sigstore": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.0.tgz", - "integrity": "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.1.0", - "@sigstore/tuf": "^4.0.1", - "@sigstore/verify": "^3.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/simple-lru-cache": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", @@ -19362,9 +19072,9 @@ } }, "node_modules/snowflake-sdk/node_modules/@google-cloud/storage": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.19.0.tgz", - "integrity": "sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.18.0.tgz", + "integrity": "sha512-r3ZwDMiz4nwW6R922Z1pwpePxyRwE5GdevYX63hRmAQUkUQJcBH/79EnQPDv5cOv1mFBgevdNWQfi3tie3dHrQ==", "license": "Apache-2.0", "dependencies": { "@google-cloud/paginator": "^5.0.0", @@ -19373,7 +19083,7 @@ "abort-controller": "^3.0.0", "async-retry": "^1.3.3", "duplexify": "^4.1.3", - "fast-xml-parser": "^5.3.4", + "fast-xml-parser": "^4.4.1", "gaxios": "^6.0.2", "google-auth-library": "^9.6.3", "html-entities": "^2.5.2", @@ -19387,42 +19097,6 @@ "node": ">=14" } }, - "node_modules/snowflake-sdk/node_modules/@google-cloud/storage/node_modules/fast-xml-parser": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.4.2.tgz", - "integrity": "sha512-pw/6pIl4k0CSpElPEJhDppLzaixDEuWui2CUQQBH/ECDf7+y6YwA4Gf7Tyb0Rfe4DIMuZipYj4AEL0nACKglvQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "fast-xml-builder": "^1.0.0", - "strnum": "^2.1.2" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/snowflake-sdk/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/snowflake-sdk/node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -19441,30 +19115,6 @@ "node": ">= 14" } }, - "node_modules/snowflake-sdk/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/snowflake-sdk/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/snowflake-sdk/node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -19475,9 +19125,9 @@ } }, "node_modules/snowflake-sdk/node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", "license": "MIT" }, "node_modules/snowflake-sdk/node_modules/brace-expansion": { @@ -19489,16 +19139,10 @@ "balanced-match": "^1.0.0" } }, - "node_modules/snowflake-sdk/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, "node_modules/snowflake-sdk/node_modules/fast-xml-parser": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz", - "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", "funding": [ { "type": "github", @@ -19507,24 +19151,12 @@ ], "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "strnum": "^1.1.1" }, "bin": { "fxparser": "src/cli/cli.js" } }, - "node_modules/snowflake-sdk/node_modules/fast-xml-parser/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/snowflake-sdk/node_modules/gaxios": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", @@ -19572,7 +19204,6 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -19658,34 +19289,13 @@ "node": ">= 14" } }, - "node_modules/snowflake-sdk/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/snowflake-sdk/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, "node_modules/snowflake-sdk/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -19694,6 +19304,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/snowflake-sdk/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/snowflake-sdk/node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -19725,22 +19344,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snowflake-sdk/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/snowflake-sdk/node_modules/retry-request": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", @@ -19755,37 +19358,17 @@ "node": ">=14" } }, - "node_modules/snowflake-sdk/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/snowflake-sdk/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } + "node_modules/snowflake-sdk/node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, "node_modules/snowflake-sdk/node_modules/teeny-request": { "version": "9.0.0", @@ -19841,32 +19424,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/snowflake-sdk/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/snowflake-sdk/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/socks": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", @@ -19882,39 +19439,44 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "license": "MIT", "dependencies": { - "is-plain-obj": "^1.0.0" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">=4" + "node": ">= 10" + } + }, + "node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, "node_modules/source-map": { @@ -19978,9 +19540,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, @@ -20023,49 +19585,26 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/sql-escaper": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.3.3.tgz", - "integrity": "sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==", + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", "license": "MIT", "engines": { - "bun": ">=1.0.0", - "deno": ">=2.0.0", - "node": ">=12.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/mysqljs/sql-escaper?sponsor=1" - } - }, - "node_modules/ssh2": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", - "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.10", - "nan": "^2.23.0" + "node": ">= 0.6" } }, "node_modules/ssri": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", - "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.1.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/stack-trace": { @@ -20263,9 +19802,9 @@ } }, "node_modules/strnum": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz", - "integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", "funding": [ { "type": "github", @@ -20274,6 +19813,24 @@ ], "license": "MIT" }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", @@ -20382,9 +19939,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { @@ -20406,20 +19963,21 @@ "license": "MIT" }, "node_modules/tar": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", - "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, "node_modules/tar-stream": { @@ -20439,16 +19997,23 @@ "node": ">=6" } }, - "node_modules/tar/node_modules/yallist": { + "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "engines": { - "node": ">=18" + "node": ">=8" } }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/tarn": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", @@ -20588,15 +20153,6 @@ "node": ">= 6" } }, - "node_modules/teeny-request/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -20708,47 +20264,12 @@ "license": "MIT" }, "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "license": "MIT", "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "readable-stream": "3" } }, "node_modules/tildify": { @@ -20760,54 +20281,6 @@ "node": ">=8" } }, - "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", @@ -20880,24 +20353,14 @@ "node": ">=8" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, "node_modules/treeverse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", + "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/trim-newlines": { @@ -20963,16 +20426,6 @@ } } }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", @@ -21025,21 +20478,6 @@ "dev": true, "license": "0BSD" }, - "node_modules/tuf-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", - "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "4.1.0", - "debug": "^4.4.3", - "make-fetch-happen": "^15.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -21049,23 +20487,17 @@ "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "license": "Unlicense" - }, "node_modules/twilio": { - "version": "5.12.2", - "resolved": "https://registry.npmjs.org/twilio/-/twilio-5.12.2.tgz", - "integrity": "sha512-yjTH04Ig0Z3PAxIXhwrto0IJC4Gv7lBDQQ9f4/P9zJhnxVdd+3tENqBMJOtdmmRags3X0jl2IGKEQefCEpJE9g==", + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/twilio/-/twilio-5.11.1.tgz", + "integrity": "sha512-LQuLrAwWk7dsu7S5JQWzLRe17qdD4/7OJcwZG6kYWMJILtxI7pXDHksu9DcIF/vKpSpL1F0/sA9uSF3xuVizMQ==", "license": "MIT", "dependencies": { "axios": "^1.12.0", "dayjs": "^1.11.9", "https-proxy-agent": "^5.0.0", "jsonwebtoken": "^9.0.2", - "qs": "^6.14.1", + "qs": "^6.9.4", "scmp": "^2.1.0", "xmlbuilder": "^13.0.2" }, @@ -21178,35 +20610,35 @@ } }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, "node_modules/unique-filename": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", - "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "license": "ISC", "dependencies": { - "unique-slug": "^6.0.0" + "unique-slug": "^3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/unique-slug": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", - "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/unique-string": { @@ -21344,17 +20776,12 @@ "license": "MIT" }, "node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", "bin": { - "uuid": "dist/esm/bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { @@ -21401,13 +20828,16 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", - "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/w3c-hr-time": { @@ -21435,14 +20865,11 @@ } }, "node_modules/walk-up-path": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", - "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } + "license": "ISC" }, "node_modules/walker": { "version": "1.0.8", @@ -21557,9 +20984,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -21716,67 +21143,60 @@ } }, "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-indent": "^5.0.0", + "detect-indent": "^6.0.0", "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.3" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, "node_modules/write-json-file/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { - "semver": "bin/semver" - } - }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "semver": "bin/semver.js" } }, "node_modules/write-pkg": { @@ -21794,6 +21214,63 @@ "node": ">=8" } }, + "node_modules/write-pkg/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/write-pkg/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/write-pkg/node_modules/type-fest": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", @@ -21804,6 +21281,36 @@ "node": ">=6" } }, + "node_modules/write-pkg/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", @@ -21841,9 +21348,9 @@ } }, "node_modules/wsl-utils/node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -21878,9 +21385,9 @@ "license": "Apache-2.0" }, "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "license": "MIT", "dependencies": { "sax": ">=0.6.0", @@ -21951,19 +21458,13 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" + "node": ">= 6" } }, "node_modules/yargs": { @@ -21986,48 +21487,9 @@ } }, "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/yargs/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "license": "ISC", "engines": { @@ -22046,19 +21508,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", @@ -22083,9 +21532,8 @@ "name": "@tooljet-plugins/amazonses", "version": "1.0.0", "dependencies": { - "@aws-sdk/client-sesv2": "^3.971.0", - "@aws-sdk/client-sts": "^3.971.0", - "@aws-sdk/credential-providers": "^3.971.0", + "@aws-sdk/client-sesv2": "^3.264.0", + "@aws-sdk/credential-providers": "^3.267.0", "@tooljet-plugins/common": "file:../common", "react": "^17.0.2", "rimraf": "^3.0.2" @@ -22104,8 +21552,10 @@ "name": "@tooljet-plugins/athena", "version": "1.0.0", "dependencies": { - "@aws-sdk/client-athena": "^3.971.0", + "@aws-sdk/credential-providers": "^3.267.0", "@tooljet-plugins/common": "file:../common", + "athena-express": "^7.1.5", + "aws-sdk": "^2.1309.0", "react": "^17.0.2" } }, @@ -22242,9 +21692,9 @@ } }, "packages/baserow/node_modules/normalize-url": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", - "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "license": "MIT", "engines": { "node": ">=14.16" @@ -22355,11 +21805,8 @@ "name": "@tooljet-plugins/dynamodb", "version": "1.0.0", "dependencies": { - "@aws-sdk/client-dynamodb": "^3.971.0", - "@aws-sdk/client-sts": "^3.971.0", - "@aws-sdk/credential-providers": "^3.971.0", - "@aws-sdk/lib-dynamodb": "^3.971.0", "@tooljet-plugins/common": "file:../common", + "aws-sdk": "^2.1309.0", "react": "^17.0.2", "rimraf": "^3.0.2" } @@ -22464,17 +21911,17 @@ } }, "packages/grpcv2/node_modules/cacheable-request": { - "version": "13.0.18", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-13.0.18.tgz", - "integrity": "sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==", + "version": "13.0.17", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-13.0.17.tgz", + "integrity": "sha512-tQm7K9zC0cJPpbJS8xZ+NUqJ1bZ78jEXc7/G8uqvQTSdEdbmrxdnvxGb7/piCPeICuRY/L82VVt8UA+qpJ8wyw==", "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.4", "get-stream": "^9.0.1", "http-cache-semantics": "^4.2.0", - "keyv": "^5.5.5", + "keyv": "^5.5.4", "mimic-response": "^4.0.0", - "normalize-url": "^8.1.1", + "normalize-url": "^8.1.0", "responselike": "^4.0.2" }, "engines": { @@ -22522,9 +21969,9 @@ } }, "packages/grpcv2/node_modules/got": { - "version": "14.6.6", - "resolved": "https://registry.npmjs.org/got/-/got-14.6.6.tgz", - "integrity": "sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==", + "version": "14.6.5", + "resolved": "https://registry.npmjs.org/got/-/got-14.6.5.tgz", + "integrity": "sha512-Su87c0NNeg97de1sO02gy9I8EmE7DCJ1gzcFLcgGpYeq2PnLg4xz73MWrp6HjqbSsjb6Glf4UBDW6JNyZA6uSg==", "license": "MIT", "dependencies": { "@sindresorhus/is": "^7.0.1", @@ -22573,9 +22020,9 @@ } }, "packages/grpcv2/node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.5.tgz", + "integrity": "sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==", "license": "MIT", "dependencies": { "@keyv/serialize": "^1.1.1" @@ -22606,9 +22053,9 @@ } }, "packages/grpcv2/node_modules/normalize-url": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", - "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "license": "MIT", "engines": { "node": ">=14.16" @@ -22708,8 +22155,7 @@ "json5": "^2.2.3", "mongodb": "^4.13.0", "react": "^17.0.2", - "rimraf": "^3.0.2", - "ssh2": "^1.17.0" + "rimraf": "^3.0.2" } }, "packages/mssql": { @@ -22720,7 +22166,6 @@ "knex": "^3.1.0", "react": "^17.0.2", "rimraf": "^3.0.2", - "ssh2": "^1.17.0", "tedious": "^18.2.1" } }, @@ -22732,8 +22177,7 @@ "knex": "^3.1.0", "mysql2": "^3.9.7", "react": "^17.0.2", - "rimraf": "^3.0.2", - "ssh2": "^1.17.0" + "rimraf": "^3.0.2" } }, "packages/n8n": { @@ -22868,9 +22312,9 @@ } }, "packages/nocodb/node_modules/normalize-url": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", - "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "license": "MIT", "engines": { "node": ">=14.16" @@ -22955,8 +22399,7 @@ "knex": "^3.1.0", "pg": "^8.9.0", "react": "^17.0.2", - "rimraf": "^3.0.2", - "ssh2": "^1.17.0" + "rimraf": "^3.0.2" } }, "packages/redis": { @@ -22973,9 +22416,6 @@ "name": "@tooljet-plugins/restapi", "version": "1.0.0", "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-sdk/credential-provider-node": "^3.972.12", - "@smithy/signature-v4": "^4.2.0", "@tooljet-plugins/common": "file:../common", "form-data": "^4.0.0", "got": "^11.8.6", @@ -22984,2130 +22424,6 @@ "url": "^0.11.0" } }, - "packages/restapi/node_modules/@aws-sdk/core": { - "version": "3.973.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.13.tgz", - "integrity": "sha512-eCFiLyBhJR7c/i8hZOETdzj2wsLFzi2L/w9/jajOgwmGqO8xrUExqkTZqdjROkwU62owqeqSuw4sIzlCv1E/ww==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/xml-builder": "^3.972.6", - "@smithy/core": "^3.23.4", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/property-provider": "^4.2.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/signature-v4": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-middleware": "^4.2.9", - "@smithy/util-utf8": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/is-array-buffer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz", - "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.10.tgz", - "integrity": "sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-hex-encoding": "^4.2.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-uri-escape": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/util-buffer-from": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz", - "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/util-hex-encoding": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.1.tgz", - "integrity": "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/util-middleware": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz", - "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/util-uri-escape": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.1.tgz", - "integrity": "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz", - "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.11.tgz", - "integrity": "sha512-hbyoFuVm3qOAGfIPS9t7jCs8GFLFoaOs8ZmYp/chqciuHDyEGv+J365ip7YSvXSrxxUbeW9NyB1hTLt40NBMRg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.13.tgz", - "integrity": "sha512-a864QxQWFkdCZ5wQF0QZNKTbqAc/DFQNeARp4gOyZZdql5RHjj4CppUSfwAzS9cpw2IPY3eeJjWqLZ1QiDB/6w==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/fetch-http-handler": "^5.3.10", - "@smithy/node-http-handler": "^4.4.11", - "@smithy/property-provider": "^4.2.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", - "@smithy/util-stream": "^4.5.14", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.11.tgz", - "integrity": "sha512-kvPFn626ABLzxmjFMoqMRtmFKMeiUdWPhwxhmuPu233tqHnNuXzHv0MtrZlkzHd+rwlh9j0zCbQo89B54wIazQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/credential-provider-env": "^3.972.11", - "@aws-sdk/credential-provider-http": "^3.972.13", - "@aws-sdk/credential-provider-login": "^3.972.11", - "@aws-sdk/credential-provider-process": "^3.972.11", - "@aws-sdk/credential-provider-sso": "^3.972.11", - "@aws-sdk/credential-provider-web-identity": "^3.972.11", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/credential-provider-imds": "^4.2.9", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.11.tgz", - "integrity": "sha512-stdy09EpBTmsxGiXe1vB5qtXNww9wact36/uWLlSV0/vWbCOUAY2JjhPXoDVLk8n+E6r0M5HeZseLk+iTtifxg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/protocol-http": "^5.3.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.12", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.12.tgz", - "integrity": "sha512-gMWGnHbNSKWRj+PAiuSg0EDpEwpyIgk0v9U6EuZ1C/5/BUv25Way+E+UFB7r+YYkscuBJMJ+ai8E2K0Q8dx50g==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.11", - "@aws-sdk/credential-provider-http": "^3.972.13", - "@aws-sdk/credential-provider-ini": "^3.972.11", - "@aws-sdk/credential-provider-process": "^3.972.11", - "@aws-sdk/credential-provider-sso": "^3.972.11", - "@aws-sdk/credential-provider-web-identity": "^3.972.11", - "@aws-sdk/types": "^3.973.2", - "@smithy/credential-provider-imds": "^4.2.9", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.11.tgz", - "integrity": "sha512-B049fvbv41vf0Fs5bCtbzHpruBDp61sPiFDxUmkAJ/zvgSAturpj2rqzV1rj2clg4mb44Uxp9rgpcODexNFlFA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.11.tgz", - "integrity": "sha512-vX9z8skN8vPtamVWmSCm4KQohub+1uMuRzIo4urZ2ZUMBAl1bqHatVD/roCb3qRfAyIGvZXCA/AWS03BQRMyCQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/token-providers": "3.997.0", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.11.tgz", - "integrity": "sha512-VR2Ju/QBdOjnWNIYuxRml63eFDLGc6Zl8aDwLi1rzgWo3rLBgtaWhWVBAijhVXzyPdQIOqdL8hvll5ybqumjeQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.4.tgz", - "integrity": "sha512-4q2Vg7/zOB10huDBLjzzTwVjBpG22X3J3ief2XrJEgTaANZrNfA3/cGbCVNAibSbu/nIYA7tDk8WCdsIzDDc4Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-logger": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.4.tgz", - "integrity": "sha512-xFqPvTysuZAHSkdygT+ken/5rzkR7fhOoDPejAJQslZpp0XBepmCJnDOqA57ERtCTBpu8wpjTFI1ETd4S0AXEw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.4.tgz", - "integrity": "sha512-tVbRaayUZ7y2bOb02hC3oEPTqQf2A0HpPDwdMl1qTmye/q8Mq1F1WiIoFkQwG/YQFvbyErYIDMbYzIlxzzLtjQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.13.tgz", - "integrity": "sha512-p1kVYbzBxRmhuOHoL/ANJPCedqUxnVgkEjxPoxt5pQv/yzppHM7aBWciYEE9TZY59M421D3GjLfZIZBoEFboVQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/util-endpoints": "^3.996.1", - "@smithy/core": "^3.23.4", - "@smithy/protocol-http": "^5.3.9", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/nested-clients": { - "version": "3.996.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.1.tgz", - "integrity": "sha512-XHVLFRGkuV2gh2uwBahCt65ALMb5wMpqplXEZIvFnWOCPlk60B7h7M5J9Em243K8iICDiWY6KhBEqVGfjTqlLA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/middleware-host-header": "^3.972.4", - "@aws-sdk/middleware-logger": "^3.972.4", - "@aws-sdk/middleware-recursion-detection": "^3.972.4", - "@aws-sdk/middleware-user-agent": "^3.972.13", - "@aws-sdk/region-config-resolver": "^3.972.4", - "@aws-sdk/types": "^3.973.2", - "@aws-sdk/util-endpoints": "^3.996.1", - "@aws-sdk/util-user-agent-browser": "^3.972.4", - "@aws-sdk/util-user-agent-node": "^3.972.12", - "@smithy/config-resolver": "^4.4.7", - "@smithy/core": "^3.23.4", - "@smithy/fetch-http-handler": "^5.3.10", - "@smithy/hash-node": "^4.2.9", - "@smithy/invalid-dependency": "^4.2.9", - "@smithy/middleware-content-length": "^4.2.9", - "@smithy/middleware-endpoint": "^4.4.18", - "@smithy/middleware-retry": "^4.4.35", - "@smithy/middleware-serde": "^4.2.10", - "@smithy/middleware-stack": "^4.2.9", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/node-http-handler": "^4.4.11", - "@smithy/protocol-http": "^5.3.9", - "@smithy/smithy-client": "^4.11.7", - "@smithy/types": "^4.12.1", - "@smithy/url-parser": "^4.2.9", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-body-length-node": "^4.2.2", - "@smithy/util-defaults-mode-browser": "^4.3.34", - "@smithy/util-defaults-mode-node": "^4.2.37", - "@smithy/util-endpoints": "^3.2.9", - "@smithy/util-middleware": "^4.2.9", - "@smithy/util-retry": "^4.2.9", - "@smithy/util-utf8": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/is-array-buffer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz", - "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-buffer-from": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz", - "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-middleware": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz", - "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz", - "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.4.tgz", - "integrity": "sha512-3GrJYv5eI65oCKveBZP7Q246dVP+tqeys9aKMB0dfX1glUWfppWlxIu52derqdNb9BX9lxYmeiaBcBIqOAYSgQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/config-resolver": "^4.4.7", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/token-providers": { - "version": "3.997.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.997.0.tgz", - "integrity": "sha512-UdG36F7lU9aTqGFRieEyuRUJlgEJBqKeKKekC0esH21DbUSKhPR1kZBah214kYasIaWe1hLJLaqUigoTa5hZAQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.973.13", - "@aws-sdk/nested-clients": "^3.996.1", - "@aws-sdk/types": "^3.973.2", - "@smithy/property-provider": "^4.2.9", - "@smithy/shared-ini-file-loader": "^4.4.4", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/types": { - "version": "3.973.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.2.tgz", - "integrity": "sha512-maTZwGsALtnAw4TJr/S6yERAosTwPduu0XhUV+SdbvRZtCOgSgk1ttL2R0XYzvkYSpvbtJocn77tBXq2AKglBw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/types/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/util-endpoints": { - "version": "3.996.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.1.tgz", - "integrity": "sha512-7cJyd+M5i0IoqWkJa1KFx8KNCGIx+Ywu+lT53KpqX7ReVwz03DCKUqvZ/y65vdKwo9w9/HptSAeLDluO5MpGIg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", - "@smithy/url-parser": "^4.2.9", - "@smithy/util-endpoints": "^3.2.9", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.972.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.4.tgz", - "integrity": "sha512-GHb+8XHv6hfLWKQKAKaSOm+vRvogg07s+FWtbR3+eCXXPSFn9XVmiYF4oypAxH7dGIvoxkVG/buHEnzYukyJiA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.2", - "@smithy/types": "^4.12.1", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "packages/restapi/node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.972.12", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.12.tgz", - "integrity": "sha512-c1n3wBK6te+Vd9qU86nF8AsYuiBsxLn0AADGWyFX7vEADr3btaAg5iPQT6GYj6rvzSOEVVisvaAatOWInlJUbQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.13", - "@aws-sdk/types": "^3.973.2", - "@smithy/node-config-provider": "^4.3.9", - "@smithy/types": "^4.12.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "packages/restapi/node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/xml-builder": { - "version": "3.972.6", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.6.tgz", - "integrity": "sha512-YrXu+UnfC8IdARa4ZkrpcyuRmA/TVgYW6Lcdtvi34NQgRjM1hTirNirN+rGb+s/kNomby8oJiIAu0KNbiZC7PA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.12.1", - "fast-xml-parser": "5.3.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/restapi/node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/abort-controller": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.10.tgz", - "integrity": "sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/abort-controller/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/config-resolver": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.9.tgz", - "integrity": "sha512-ejQvXqlcU30h7liR9fXtj7PIAau1t/sFbJpgWPfiYDs7zd16jpH0IsSXKcba2jF6ChTXvIjACs27kNMc5xxE2Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-config-provider": "^4.2.1", - "@smithy/util-endpoints": "^3.3.1", - "@smithy/util-middleware": "^4.2.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/config-resolver/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/config-resolver/node_modules/@smithy/util-middleware": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz", - "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/core": { - "version": "3.23.6", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.6.tgz", - "integrity": "sha512-4xE+0L2NrsFKpEVFlFELkIHQddBvMbQ41LRIP74dGCXnY1zQ9DgksrBcRBDJT+iOzGy4VEJIeU3hkUK5mn06kg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-serde": "^4.2.11", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-body-length-browser": "^4.2.1", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-stream": "^4.5.15", - "@smithy/util-utf8": "^4.2.1", - "@smithy/uuid": "^1.1.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/core/node_modules/@smithy/is-array-buffer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz", - "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/core/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/core/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/core/node_modules/@smithy/util-buffer-from": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz", - "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/core/node_modules/@smithy/util-middleware": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz", - "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/core/node_modules/@smithy/util-utf8": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz", - "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/credential-provider-imds": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.10.tgz", - "integrity": "sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/fetch-http-handler": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.11.tgz", - "integrity": "sha512-wbTRjOxdFuyEg0CpumjZO0hkUl+fetJFqxNROepuLIoijQh51aMBmzFLfoQdwRjxsuuS2jizzIUTjPWgd8pd7g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.10", - "@smithy/querystring-builder": "^4.2.10", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/hash-node": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.10.tgz", - "integrity": "sha512-1VzIOI5CcsvMDvP3iv1vG/RfLJVVVc67dCRyLSB2Hn9SWCZrDO3zvcIzj3BfEtqRW5kcMg5KAeVf1K3dR6nD3w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "@smithy/util-buffer-from": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz", - "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/hash-node/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz", - "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz", - "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/invalid-dependency": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.10.tgz", - "integrity": "sha512-vy9KPNSFUU0ajFYk0sDZIYiUlAWGEAhRfehIr5ZkdFrRFTAuXEPUd41USuqHU6vvLX4r6Q9X7MKBco5+Il0Org==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-content-length": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.10.tgz", - "integrity": "sha512-TQZ9kX5c6XbjhaEBpvhSvMEZ0klBs1CFtOdPFwATZSbC9UeQfKHPLPN9Y+I6wZGMOavlYTOlHEPDrt42PMSH9w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-endpoint": { - "version": "4.4.20", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.20.tgz", - "integrity": "sha512-9W6Np4ceBP3XCYAGLoMCmn8t2RRVzuD1ndWPLBbv7H9CrwM9Bprf6Up6BM9ZA/3alodg0b7Kf6ftBK9R1N04vw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.23.6", - "@smithy/middleware-serde": "^4.2.11", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", - "@smithy/url-parser": "^4.2.10", - "@smithy/util-middleware": "^4.2.10", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-endpoint/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-endpoint/node_modules/@smithy/util-middleware": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz", - "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-retry": { - "version": "4.4.37", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.37.tgz", - "integrity": "sha512-/1psZZllBBSQ7+qo5+hhLz7AEPGLx3Z0+e3ramMBEuPK2PfvLK4SrncDB9VegX5mBn+oP/UTDrM6IHrFjvX1ZA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/service-error-classification": "^4.2.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "@smithy/util-middleware": "^4.2.10", - "@smithy/util-retry": "^4.2.10", - "@smithy/uuid": "^1.1.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-retry/node_modules/@smithy/util-middleware": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.10.tgz", - "integrity": "sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-serde": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.11.tgz", - "integrity": "sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-serde/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-serde/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-stack": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.10.tgz", - "integrity": "sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/middleware-stack/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/node-config-provider": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.10.tgz", - "integrity": "sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^4.2.10", - "@smithy/shared-ini-file-loader": "^4.4.5", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/node-config-provider/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/node-http-handler": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.12.tgz", - "integrity": "sha512-zo1+WKJkR9x7ZtMeMDAAsq2PufwiLDmkhcjpWPRRkmeIuOm6nq1qjFICSZbnjBvD09ei8KMo26BWxsu2BUU+5w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^4.2.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/querystring-builder": "^4.2.10", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/property-provider": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.10.tgz", - "integrity": "sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/property-provider/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/protocol-http": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", - "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/querystring-builder": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.10.tgz", - "integrity": "sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "@smithy/util-uri-escape": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/querystring-builder/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/querystring-builder/node_modules/@smithy/util-uri-escape": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.1.tgz", - "integrity": "sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/querystring-parser": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.10.tgz", - "integrity": "sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/querystring-parser/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/service-error-classification": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.10.tgz", - "integrity": "sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.5.tgz", - "integrity": "sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/shared-ini-file-loader/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/signature-v4": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.4.tgz", - "integrity": "sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.8", - "@smithy/types": "^3.7.2", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.11", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/smithy-client": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.0.tgz", - "integrity": "sha512-R8bQ9K3lCcXyZmBnQqUZJF4ChZmtWT5NLi6x5kgWx5D+/j0KorXcA0YcFg/X5TOgnTCy1tbKc6z2g2y4amFupQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.23.6", - "@smithy/middleware-endpoint": "^4.4.20", - "@smithy/middleware-stack": "^4.2.10", - "@smithy/protocol-http": "^5.3.10", - "@smithy/types": "^4.13.0", - "@smithy/util-stream": "^4.5.15", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/smithy-client/node_modules/@smithy/protocol-http": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.10.tgz", - "integrity": "sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/smithy-client/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/types": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", - "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/url-parser": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.10.tgz", - "integrity": "sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^4.2.10", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/url-parser/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-base64": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.1.tgz", - "integrity": "sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz", - "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz", - "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz", - "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-body-length-browser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.1.tgz", - "integrity": "sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-body-length-node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.2.tgz", - "integrity": "sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-config-provider": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.1.tgz", - "integrity": "sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.36", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.36.tgz", - "integrity": "sha512-R0smq7EHQXRVMxkAxtH5akJ/FvgAmNF6bUy/GwY/N20T4GrwjT633NFm0VuRpC+8Bbv8R9A0DoJ9OiZL/M3xew==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^4.2.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.39", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.39.tgz", - "integrity": "sha512-otWuoDm35btJV1L8MyHrPl462B07QCdMTktKc7/yM+Psv6KbED/ziXiHnmr7yPHUjfIwE9S8Max0LO24Mo3ZVg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^4.4.9", - "@smithy/credential-provider-imds": "^4.2.10", - "@smithy/node-config-provider": "^4.3.10", - "@smithy/property-provider": "^4.2.10", - "@smithy/smithy-client": "^4.12.0", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-endpoints": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.1.tgz", - "integrity": "sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^4.3.10", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-middleware": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.11.tgz", - "integrity": "sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.7.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-retry": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.10.tgz", - "integrity": "sha512-HrBzistfpyE5uqTwiyLsFHscgnwB0kgv8vySp7q5kZ0Eltn/tjosaSGGDj/jJ9ys7pWzIP/icE2d+7vMKXLv7A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/service-error-classification": "^4.2.10", - "@smithy/types": "^4.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-retry/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-stream": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.15.tgz", - "integrity": "sha512-OlOKnaqnkU9X+6wEkd7mN+WB7orPbCVDauXOj22Q7VtiTkvy7ZdSsOg4QiNAZMgI4OkvNf+/VLUC3VXkxuWJZw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/fetch-http-handler": "^5.3.11", - "@smithy/node-http-handler": "^4.4.12", - "@smithy/types": "^4.13.0", - "@smithy/util-base64": "^4.3.1", - "@smithy/util-buffer-from": "^4.2.1", - "@smithy/util-hex-encoding": "^4.2.1", - "@smithy/util-utf8": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-stream/node_modules/@smithy/is-array-buffer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz", - "integrity": "sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-stream/node_modules/@smithy/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.0.tgz", - "integrity": "sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz", - "integrity": "sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-stream/node_modules/@smithy/util-hex-encoding": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.1.tgz", - "integrity": "sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.1.tgz", - "integrity": "sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^4.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "packages/restapi/node_modules/@smithy/uuid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.1.tgz", - "integrity": "sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/restapi/node_modules/fast-xml-parser": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", - "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^2.1.2" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "packages/rethinkdb": { "name": "@tooljet-plugins/rethinkdb", "version": "1.0.0", @@ -25121,10 +22437,9 @@ "name": "@tooljet-plugins/s3", "version": "1.0.0", "dependencies": { - "@aws-sdk/client-s3": "^3.971.0", - "@aws-sdk/client-sts": "^3.971.0", - "@aws-sdk/credential-providers": "^3.971.0", - "@aws-sdk/s3-request-presigner": "^3.971.0", + "@aws-sdk/client-s3": "^3.264.0", + "@aws-sdk/credential-providers": "^3.266.1", + "@aws-sdk/s3-request-presigner": "^3.264.0", "@tooljet-plugins/common": "file:../common", "react": "^17.0.2", "rimraf": "^3.0.2" @@ -25229,4 +22544,4 @@ } } } -} +} \ No newline at end of file diff --git a/server/.version b/server/.version index d7e293cb37..b8b5ad86ee 100644 --- a/server/.version +++ b/server/.version @@ -1 +1 @@ -3.20.119-lts +3.21.5-beta diff --git a/server/data-migrations/1769151383974-NormalizeFolderAppsKeepFirstCreatedMappingPerApp.ts b/server/data-migrations/1769151383974-NormalizeFolderAppsKeepFirstCreatedMappingPerApp.ts new file mode 100644 index 0000000000..d3f8ce207f --- /dev/null +++ b/server/data-migrations/1769151383974-NormalizeFolderAppsKeepFirstCreatedMappingPerApp.ts @@ -0,0 +1,30 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class NormalizeFolderAppsKeepFirstCreatedMappingPerApp1769151383974 implements MigrationInterface { + +public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + DELETE FROM folder_apps + WHERE id IN ( + SELECT id FROM ( + SELECT id, + ROW_NUMBER() OVER ( + PARTITION BY app_id + ORDER BY created_at ASC + ) AS rn + FROM folder_apps + ) t + WHERE t.rn > 1 + ); + `); + await queryRunner.query(` + CREATE UNIQUE INDEX IF NOT EXISTS uniq_folder_apps_app_id + ON folder_apps (app_id); + `); +} +public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + DROP INDEX IF EXISTS uniq_folder_apps_app_id; + `); + } +} diff --git a/server/ee b/server/ee index 69f5654707..9d25317dba 160000 --- a/server/ee +++ b/server/ee @@ -1 +1 @@ -Subproject commit 69f565470789a69aeabbb5d4c54669ea7f43b4de +Subproject commit 9d25317dba9c6063ff5d65d509c79a8f444ac4fe diff --git a/server/migrations/1743997765065-AddCoRelationIdToComponents.ts b/server/migrations/1743997765065-AddCoRelationIdToComponents.ts new file mode 100644 index 0000000000..30ad68ca72 --- /dev/null +++ b/server/migrations/1743997765065-AddCoRelationIdToComponents.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddCoRelationIdToAppEntities1743997765065 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE components ADD COLUMN IF NOT EXISTS "co_relation_id" uuid DEFAULT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE components DROP COLUMN IF EXISTS "co_relation_id"`); + } + +} diff --git a/server/migrations/1761828716101-AddBranchingAndSchemaVersionToOrgGitSync.ts b/server/migrations/1761828716101-AddBranchingAndSchemaVersionToOrgGitSync.ts new file mode 100644 index 0000000000..ed434e58f2 --- /dev/null +++ b/server/migrations/1761828716101-AddBranchingAndSchemaVersionToOrgGitSync.ts @@ -0,0 +1,28 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddBranchingAndSchemaVersionToOrgGitSync1761828716101 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + // Add isBranchingEnabled column to organization_git_sync table + await queryRunner.query( + `ALTER TABLE "organization_git_sync" + ADD COLUMN IF NOT EXISTS "is_branching_enabled" boolean NOT NULL DEFAULT true` + ); + // default value is set to true for now, this migration should be changed before releasing for lts and default should be false. + + // Add schema_version column to organization_git_sync table + await queryRunner.query( + `ALTER TABLE "organization_git_sync" + ADD COLUMN IF NOT EXISTS "schema_version" varchar NOT NULL DEFAULT '1.0.0'` + ); + + } + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "organization_git_sync" DROP COLUMN IF EXISTS "is_branching_enabled"` + ); + + await queryRunner.query( + `ALTER TABLE "organization_git_sync" DROP COLUMN IF EXISTS "schema_version"` + ); + } +} diff --git a/server/migrations/1761828800001-AddVersionTypeColumn.ts b/server/migrations/1761828800001-AddVersionTypeColumn.ts new file mode 100644 index 0000000000..02964422c0 --- /dev/null +++ b/server/migrations/1761828800001-AddVersionTypeColumn.ts @@ -0,0 +1,24 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddVersionTypeColumn1761828800001 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TYPE app_version_type AS ENUM ('version', 'branch') + `); + + await queryRunner.query(` + ALTER TABLE "app_versions" + ADD COLUMN "version_type" app_version_type NOT NULL DEFAULT 'version' + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "app_versions" + DROP COLUMN IF EXISTS "version_type" + `); + await queryRunner.query(` + DROP TYPE IF EXISTS app_version_type + `); + } +} \ No newline at end of file diff --git a/server/migrations/1762860937123-AddCreatedByToAppVersions.ts b/server/migrations/1762860937123-AddCreatedByToAppVersions.ts new file mode 100644 index 0000000000..6f0b70de06 --- /dev/null +++ b/server/migrations/1762860937123-AddCreatedByToAppVersions.ts @@ -0,0 +1,30 @@ +import { MigrationInterface, QueryRunner, TableColumn, TableForeignKey } from 'typeorm'; + +export class AddCreatedByToAppVersions1762860937123 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.addColumn( + 'app_versions', + new TableColumn({ + name: 'created_by', + type: 'uuid', + isNullable: true, + }) + ); + + await queryRunner.createForeignKey( + 'app_versions', + new TableForeignKey({ + name: 'fk_app_versions_created_by', + columnNames: ['created_by'], + referencedColumnNames: ['id'], + referencedTableName: 'users', + onDelete: 'SET NULL', + }) + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropForeignKey('app_versions', 'fk_app_versions_created_by'); + await queryRunner.dropColumn('app_versions', 'created_by'); + } +} diff --git a/server/migrations/1763549159927-AddCoRelationIdToAppEntities.ts b/server/migrations/1763549159927-AddCoRelationIdToAppEntities.ts new file mode 100644 index 0000000000..886945205f --- /dev/null +++ b/server/migrations/1763549159927-AddCoRelationIdToAppEntities.ts @@ -0,0 +1,39 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddCoRelationIdToAppEntities1763549159927 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + const tables = [ + 'pages', + 'data_queries', + 'data_sources', + 'data_source_options', + 'internal_tables', + 'app_versions', + 'event_handlers', + 'layouts' + ]; + + for (const table of tables) { + await queryRunner.query(`ALTER TABLE ${table} ADD COLUMN IF NOT EXISTS "co_relation_id" uuid DEFAULT NULL`); + } + } + + public async down(queryRunner: QueryRunner): Promise { + const tables = [ + 'pages', + 'data_queries', + 'data_sources', + 'data_source_options', + 'internal_tables', + 'app_versions', + 'event_handlers', + 'layouts' + ]; + + for (const table of tables) { + await queryRunner.query(`ALTER TABLE "${table}" DROP COLUMN IF EXISTS "co_relation_id"`); + } + } + +} diff --git a/server/migrations/1765630548010-AddSourceTagToAppVersions.ts b/server/migrations/1765630548010-AddSourceTagToAppVersions.ts new file mode 100644 index 0000000000..78587d5ef1 --- /dev/null +++ b/server/migrations/1765630548010-AddSourceTagToAppVersions.ts @@ -0,0 +1,24 @@ +import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm'; + +export class AddSourceTagToAppVersions1765630548010 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.addColumn( + 'app_versions', + new TableColumn({ + name: 'source_tag', + type: 'varchar', + length: '256', + isNullable: true, + default: null, + }) + ); + } + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropColumn('app_versions', 'source_tag'); + } +} +/** + * Adds source_tag column to track version's sync state with GitHub tags: + * - null: Version created locally, not synced → creates GitHub tag on save + * - "{app_name}/{version_name}": Version synced with this tag (updated on every pull) → no tag created on save + */ \ No newline at end of file diff --git a/server/migrations/1768289065973-AddCoRelationIdToApps.ts b/server/migrations/1768289065973-AddCoRelationIdToApps.ts new file mode 100644 index 0000000000..cd65223d6f --- /dev/null +++ b/server/migrations/1768289065973-AddCoRelationIdToApps.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddCoRelationIdToApps1768289065973 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE apps ADD COLUMN IF NOT EXISTS "co_relation_id" uuid DEFAULT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE apps DROP COLUMN IF EXISTS "co_relation_id"`); + } + +} diff --git a/server/src/dto/organization_git.dto.ts b/server/src/dto/organization_git.dto.ts index 876ad5f62f..c36e1a14e1 100644 --- a/server/src/dto/organization_git.dto.ts +++ b/server/src/dto/organization_git.dto.ts @@ -26,17 +26,20 @@ export class OrganizationGitUpdateDto { @IsString() @IsIn(['ed25519', 'rsa']) keyType: 'ed25519' | 'rsa'; + + @IsOptional() + @IsBoolean() + branchingEnabled?: boolean; } -export class OrganizationGitHTTPSUpdateDto { +export class OrganizationGitConfigUpdateDto { @IsOptional() @IsBoolean() - autoCommit: boolean; -} -export class OrganizationGitLabUpdateDto { + autoCommit?: boolean; + @IsOptional() @IsBoolean() - autoCommit: boolean; + branchingEnabled?: boolean; } export class OrganizationGitStatusUpdateDto { diff --git a/server/src/entities/app.entity.ts b/server/src/entities/app.entity.ts index 33b369e7fe..dd1cfdb92b 100644 --- a/server/src/entities/app.entity.ts +++ b/server/src/entities/app.entity.ts @@ -75,6 +75,9 @@ export class App extends BaseEntity { @Column({ name: 'app_generated_from_prompt', default: false }) appGeneratedFromPrompt: boolean; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @Column({ type: 'enum', enumName: 'app_builder_mode', diff --git a/server/src/entities/app_version.entity.ts b/server/src/entities/app_version.entity.ts index 18c12c8345..61e9a12269 100644 --- a/server/src/entities/app_version.entity.ts +++ b/server/src/entities/app_version.entity.ts @@ -22,13 +22,21 @@ import { DataSource } from './data_source.entity'; import { Page } from './page.entity'; import { EventHandler } from './event_handler.entity'; import { WorkflowSchedule } from './workflow_schedule.entity'; +import { User } from './user.entity'; +export enum AppVersionType { + VERSION = 'version', + BRANCH = 'branch', +} @Entity({ name: 'app_versions' }) @Unique(['name', 'appId']) export class AppVersion extends BaseEntity { @PrimaryGeneratedColumn('uuid') id: string; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @Column({ name: 'name' }) name: string; @@ -47,6 +55,14 @@ export class AppVersion extends BaseEntity { @Column({ name: 'home_page_id' }) homePageId: string; + @Column({ + name: 'version_type', + type: 'enum', + enum: AppVersionType, + default: AppVersionType.VERSION, + }) + versionType: AppVersionType; + @Column({ name: 'app_id' }) appId: string; @@ -59,6 +75,14 @@ export class AppVersion extends BaseEntity { @Column({ name: 'parent_version_id', type: 'uuid', nullable: true }) parentVersionId: string; + @Column({ name: 'created_by', type: 'uuid', nullable: true }) + createdBy: string; + + @ManyToOne(() => User, { nullable: true, onDelete: 'SET NULL' }) + @JoinColumn({ name: 'created_by' }) + user: User; + + // need to review if this should be a non-nullable field with default value as DRAFT status @Column({ name: 'status', type: 'enum', diff --git a/server/src/entities/component.entity.ts b/server/src/entities/component.entity.ts index 6ef8d20b0c..c3bd5b09d1 100644 --- a/server/src/entities/component.entity.ts +++ b/server/src/entities/component.entity.ts @@ -19,6 +19,9 @@ export class Component { @PrimaryGeneratedColumn('uuid') id: string; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @Column() name: string; diff --git a/server/src/entities/data_query.entity.ts b/server/src/entities/data_query.entity.ts index 591cdb49b9..e0794a54f9 100644 --- a/server/src/entities/data_query.entity.ts +++ b/server/src/entities/data_query.entity.ts @@ -35,6 +35,9 @@ export class DataQuery extends BaseEntity { @Column({ name: 'app_version_id' }) appVersionId: string; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @CreateDateColumn({ default: () => 'now()', name: 'created_at' }) createdAt: Date; diff --git a/server/src/entities/data_source.entity.ts b/server/src/entities/data_source.entity.ts index a653dd5864..65443eabfc 100644 --- a/server/src/entities/data_source.entity.ts +++ b/server/src/entities/data_source.entity.ts @@ -27,6 +27,9 @@ export class DataSource extends BaseEntity { @PrimaryGeneratedColumn('uuid') id: string; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @Column({ name: 'name' }) name: string; diff --git a/server/src/entities/data_source_options.entity.ts b/server/src/entities/data_source_options.entity.ts index 4341ec9787..76ed1b4994 100644 --- a/server/src/entities/data_source_options.entity.ts +++ b/server/src/entities/data_source_options.entity.ts @@ -17,6 +17,9 @@ export class DataSourceOptions { @PrimaryGeneratedColumn('uuid') id: string; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @Column({ name: 'data_source_id' }) dataSourceId: string; diff --git a/server/src/entities/event_handler.entity.ts b/server/src/entities/event_handler.entity.ts index 6585d640e0..79eee1dcf5 100644 --- a/server/src/entities/event_handler.entity.ts +++ b/server/src/entities/event_handler.entity.ts @@ -49,4 +49,7 @@ export class EventHandler { @ManyToOne(() => AppVersion, (appVersion) => appVersion.pages) @JoinColumn({ name: 'app_version_id' }) appVersion: AppVersion; + + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; } diff --git a/server/src/entities/internal_table.entity.ts b/server/src/entities/internal_table.entity.ts index 832734e322..f1f35d8cdc 100644 --- a/server/src/entities/internal_table.entity.ts +++ b/server/src/entities/internal_table.entity.ts @@ -21,6 +21,9 @@ export class InternalTable extends BaseEntity { @Column({ name: 'table_name' }) tableName: string; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @CreateDateColumn({ default: () => 'now()', name: 'created_at' }) createdAt: Date; diff --git a/server/src/entities/layout.entity.ts b/server/src/entities/layout.entity.ts index d85e4cfa94..e66b67263a 100644 --- a/server/src/entities/layout.entity.ts +++ b/server/src/entities/layout.entity.ts @@ -6,6 +6,9 @@ export class Layout { @PrimaryGeneratedColumn('uuid') id: string; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @Column({ type: 'enum', enumName: 'layout_type', enum: ['desktop', 'mobile'] }) type: string; diff --git a/server/src/entities/organization_git_sync.entity.ts b/server/src/entities/organization_git_sync.entity.ts index df2fea367a..4b2d7ccd7a 100644 --- a/server/src/entities/organization_git_sync.entity.ts +++ b/server/src/entities/organization_git_sync.entity.ts @@ -38,6 +38,12 @@ export class OrganizationGitSync extends BaseEntity { @UpdateDateColumn({ default: () => 'now()', name: 'updated_at' }) updatedAt: Date; + @Column({ name: 'is_branching_enabled', nullable: false, default: true }) + isBranchingEnabled: boolean; + + @Column({ name: 'schema_version', nullable: false, default: '1.0.0' }) + schemaVersion: string; + @OneToMany(() => AppGitSync, (appGitSync) => appGitSync.orgGit, { onDelete: 'CASCADE' }) @JoinTable({ name: 'app_git_sync', diff --git a/server/src/entities/page.entity.ts b/server/src/entities/page.entity.ts index b797493ffb..e08de81282 100644 --- a/server/src/entities/page.entity.ts +++ b/server/src/entities/page.entity.ts @@ -90,6 +90,9 @@ export class Page { @Column({ name: 'app_id', type: 'varchar', nullable: true }) // Assuming appId is a varchar/string appId: string | null; + @Column({ name: 'co_relation_id', nullable: true }) + co_relation_id: string; + @ManyToOne(() => AppVersion, (appVersion) => appVersion.pages) @JoinColumn({ name: 'app_version_id' }) appVersion: AppVersion; diff --git a/server/src/modules/app-environments/service.ts b/server/src/modules/app-environments/service.ts index 2aa1390707..d62dcd1a31 100644 --- a/server/src/modules/app-environments/service.ts +++ b/server/src/modules/app-environments/service.ts @@ -20,7 +20,7 @@ export class AppEnvironmentService implements IAppEnvironmentService { async init(editingVersionId: string, organizationId: string): Promise { return await dbTransactionWrap(async (manager: EntityManager) => { const editorVersion = await manager.findOne(AppVersion, { - select: ['id', 'name', 'description', 'status', 'currentEnvironmentId', 'appId'], + select: ['id', 'name', 'description', 'status', 'versionType', 'currentEnvironmentId', 'appId'], where: { id: editingVersionId }, }); return await this.appEnvironmentUtilService.init(editorVersion, organizationId, false, manager); @@ -221,6 +221,7 @@ export class AppEnvironmentService implements IAppEnvironmentService { 'currentEnvironmentId', 'parentVersionId', 'promotedFrom', + 'versionType', 'createdAt', 'updatedAt', 'publishedAt', diff --git a/server/src/modules/app-git/ability/index.ts b/server/src/modules/app-git/ability/index.ts index 4d3dc8d5f0..57ab4ac07f 100644 --- a/server/src/modules/app-git/ability/index.ts +++ b/server/src/modules/app-git/ability/index.ts @@ -31,6 +31,9 @@ export class FeatureAbilityFactory extends AbilityFactory // Used for public endpoint to get the app configs can(FEATURE_KEY.GIT_FETCH_APP_CONFIGS, AppGitSync); + can(FEATURE_KEY.GET_ALL_BRANCHES, AppGitSync); + can(FEATURE_KEY.CREATE_BRANCH, AppGitSync); + can(FEATURE_KEY.FETCH_PULL_REQUESTS, AppGitSync); // Grant feature-level access based on resource actions if (isAdmin || superAdmin) { // Admin or Super Admin gets full access to all features @@ -38,6 +41,7 @@ export class FeatureAbilityFactory extends AbilityFactory can(FEATURE_KEY.GIT_UPDATE_APP, AppGitSync); can(FEATURE_KEY.GIT_GET_APPS, AppGitSync); can(FEATURE_KEY.GIT_GET_APP, AppGitSync); + can(FEATURE_KEY.GIT_GET_APP_BY_NAME, AppGitSync); can(FEATURE_KEY.GIT_GET_APP_CONFIG, AppGitSync); can(FEATURE_KEY.GIT_SYNC_APP, AppGitSync); can(FEATURE_KEY.GIT_APP_VERSION_RENAME, AppGitSync); @@ -59,6 +63,7 @@ export class FeatureAbilityFactory extends AbilityFactory can(FEATURE_KEY.GIT_APP_VERSION_RENAME, AppGitSync); can(FEATURE_KEY.GIT_APP_CONFIGS_UPDATE, AppGitSync); can(FEATURE_KEY.GIT_GET_APP, AppGitSync); // Used for syncing data from inside the application so only users with edit permission can perform the operation + can(FEATURE_KEY.GIT_GET_APP_BY_NAME, AppGitSync); // Used for syncing data from inside the application using app name can(FEATURE_KEY.GIT_GET_APP_CONFIG, AppGitSync); } diff --git a/server/src/modules/app-git/constants/feature.ts b/server/src/modules/app-git/constants/feature.ts index 277a40be9d..1332ba023c 100644 --- a/server/src/modules/app-git/constants/feature.ts +++ b/server/src/modules/app-git/constants/feature.ts @@ -14,6 +14,10 @@ export const FEATURES: FeaturesConfig = { [FEATURE_KEY.GIT_GET_APP]: { license: LICENSE_FIELD.GIT_SYNC, }, + // Used to fetch the latest git commit data for syncing the application by app name + [FEATURE_KEY.GIT_GET_APP_BY_NAME]: { + license: LICENSE_FIELD.GIT_SYNC, + }, // Used for listing all the application from GIT [FEATURE_KEY.GIT_GET_APPS]: { license: LICENSE_FIELD.GIT_SYNC, @@ -41,6 +45,18 @@ export const FEATURES: FeaturesConfig = { }, // Used for fetching app configs [FEATURE_KEY.GIT_FETCH_APP_CONFIGS]: {}, + + // Used for fetching all branches from remote repo + [FEATURE_KEY.GET_ALL_BRANCHES]: { + license: LICENSE_FIELD.GIT_SYNC, + }, + + [FEATURE_KEY.CREATE_BRANCH]: { + license: LICENSE_FIELD.GIT_SYNC, + }, + [FEATURE_KEY.FETCH_PULL_REQUESTS]: { + license: LICENSE_FIELD.GIT_SYNC, + }, }, }; diff --git a/server/src/modules/app-git/constants/index.ts b/server/src/modules/app-git/constants/index.ts index 51cebdc13f..d3b2aaabca 100644 --- a/server/src/modules/app-git/constants/index.ts +++ b/server/src/modules/app-git/constants/index.ts @@ -3,9 +3,14 @@ export enum FEATURE_KEY { GIT_UPDATE_APP = 'git_update_app', // Corresponds to pullGitAppChanges (POST 'gitpull/app/:appId') GIT_GET_APPS = 'git_get_apps', // Corresponds to getAppsMetaFile (GET 'gitpull') GIT_GET_APP = 'git_get_app', // Corresponds to getAppMetaFile (GET 'gitpull/app/:appId') + GIT_GET_APP_BY_NAME = 'git_get_app_by_name', // Corresponds to getAppMetaFileByName (GET 'gitpull/app/name/:appName') GIT_GET_APP_CONFIG = 'git_get_app_config', // Corresponds to getAppConfig (GET ':workspaceId/app/:versionId') GIT_SYNC_APP = 'git_sync_app', // Corresponds to gitSyncApp (POST 'gitpush/:appGitId/:versionId') GIT_APP_VERSION_RENAME = 'git_app_version_rename', // Corresponds to gitSyncApp (POST 'gitpush/:appGitId/:versionId') GIT_APP_CONFIGS_UPDATE = 'git_app_configs_update', GIT_FETCH_APP_CONFIGS = 'get_app_git_configs', + GET_ALL_BRANCHES = 'get_all_branches', + CREATE_BRANCH = 'create_branch', + FETCH_PULL_REQUESTS = 'fetch_pull_requests', + CREATE_GIT_TAG = 'CREATE_GIT_TAG', } diff --git a/server/src/modules/app-git/dto/index.ts b/server/src/modules/app-git/dto/index.ts index 55cdd31a49..4808fe02a5 100644 --- a/server/src/modules/app-git/dto/index.ts +++ b/server/src/modules/app-git/dto/index.ts @@ -34,6 +34,14 @@ export class AppGitPushDto { @IsString() gitVersionName: string; + + @IsString() + @IsOptional() + gitBranchName?: string; + + @IsBoolean() + @IsOptional() + allowMasterPush?: boolean; } export class AppGitPullDto { @@ -44,13 +52,20 @@ export class AppGitPullDto { gitVersionId: string; @IsString() - lastCommitMessage: string; + @IsOptional() + lastCommitMessage?: string; @IsString() - lastCommitUser: string; + @IsOptional() + appCoRelationId?: string; @IsString() - lastPushDate: string; + @IsOptional() + lastCommitUser?: string; + + @IsString() + @IsOptional() + lastPushDate?: string; @IsString() organizationGitId: string; @@ -67,6 +82,10 @@ export class AppGitPullDto { @IsBoolean() @IsOptional() allowEditing: boolean; + + @IsString() + @IsOptional() + commitHash?: string; } export class AppGitPullUpdateDto { @@ -74,19 +93,40 @@ export class AppGitPullUpdateDto { gitVersionId: string; @IsString() - lastCommitMessage: string; + @IsOptional() + lastCommitMessage?: string; @IsString() - lastCommitUser: string; + @IsOptional() + lastCommitUser?: string; @IsString() - lastPushDate: string; + @IsOptional() + lastPushDate?: string; @IsString() gitAppName: string; @IsString() gitVersionName: string; + + @IsOptional() + gitBranchName?: string; + + @IsString() + @IsOptional() + currentVersionId?: string; + + @IsString() + @IsOptional() + commitHash?: string; + + @IsBoolean() + @IsOptional() + isVersionTag?: boolean; + + @IsOptional() + taggedVersionName?: string; } export class AppGitUpdateDto { @IsBoolean() @@ -109,3 +149,20 @@ export class RenameAppOrVersionDto { @IsOptional() remoteName: string; } +export class AppCommitInfoDto { + @IsString() + @IsNotEmpty() + commitId: string; + + @IsString() + @IsOptional() + message?: string; + + @IsString() + @IsOptional() + author?: string; + + @IsString() + @IsOptional() + date?: string; +} diff --git a/server/src/modules/app-git/module.ts b/server/src/modules/app-git/module.ts index 11634b415a..82f4c06eb7 100644 --- a/server/src/modules/app-git/module.ts +++ b/server/src/modules/app-git/module.ts @@ -10,6 +10,8 @@ import { FeatureAbilityFactory } from '@modules/app-git/ability/index'; import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; import { AppGitRepository } from './repository'; import { SubModule } from '@modules/app/sub-module'; +import { FolderAppsModule } from '@modules/folder-apps/module'; +import { FoldersModule } from '@modules/folders/module'; export class AppGitModule extends SubModule { static async register(configs?: { IS_GET_CONTEXT: boolean }, isMainImport: boolean = false): Promise { const { @@ -38,6 +40,8 @@ export class AppGitModule extends SubModule { return { module: AppGitModule, imports: [ + await FolderAppsModule.register(configs), + await FoldersModule.register(configs), await AppsModule.register(configs), await GitSyncModule.register(configs), await TooljetDbModule.register(configs), @@ -59,7 +63,7 @@ export class AppGitModule extends SubModule { GitLabAppGitUtilityService, VersionRepository, FeatureAbilityFactory, - AppVersionRenameListener, + ...(isMainImport ? [AppVersionRenameListener] : []), ], exports: [SSHAppGitUtilityService, HTTPSAppGitUtilityService, GitLabAppGitUtilityService], }; diff --git a/server/src/modules/app-git/types/index.ts b/server/src/modules/app-git/types/index.ts index c4a718c480..e20fd4fbaa 100644 --- a/server/src/modules/app-git/types/index.ts +++ b/server/src/modules/app-git/types/index.ts @@ -5,6 +5,7 @@ import { MODULES } from '@modules/app/constants/modules'; interface Features { [FEATURE_KEY.GIT_CREATE_APP]: FeatureConfig; [FEATURE_KEY.GIT_GET_APP]: FeatureConfig; + [FEATURE_KEY.GIT_GET_APP_BY_NAME]: FeatureConfig; [FEATURE_KEY.GIT_GET_APPS]: FeatureConfig; [FEATURE_KEY.GIT_GET_APP_CONFIG]: FeatureConfig; [FEATURE_KEY.GIT_SYNC_APP]: FeatureConfig; @@ -12,6 +13,9 @@ interface Features { [FEATURE_KEY.GIT_APP_VERSION_RENAME]: FeatureConfig; [FEATURE_KEY.GIT_APP_CONFIGS_UPDATE]: FeatureConfig; [FEATURE_KEY.GIT_FETCH_APP_CONFIGS]: FeatureConfig; + [FEATURE_KEY.GET_ALL_BRANCHES]: FeatureConfig; + [FEATURE_KEY.CREATE_BRANCH]: FeatureConfig; + [FEATURE_KEY.FETCH_PULL_REQUESTS]: FeatureConfig; } export interface FeaturesConfig { diff --git a/server/src/modules/apps/dto/index.ts b/server/src/modules/apps/dto/index.ts index 779736e91c..0df0d624e0 100644 --- a/server/src/modules/apps/dto/index.ts +++ b/server/src/modules/apps/dto/index.ts @@ -34,6 +34,10 @@ export class AppUpdateDto { @IsOptional() current_version_id: string; + @IsString() + @IsOptional() + editingVersionId: string; + @IsBoolean() @IsOptional() is_public: boolean; diff --git a/server/src/modules/apps/module.ts b/server/src/modules/apps/module.ts index 34defdc48f..f1c2c157ff 100644 --- a/server/src/modules/apps/module.ts +++ b/server/src/modules/apps/module.ts @@ -27,6 +27,7 @@ import { UserRepository } from '@modules/users/repositories/repository'; import { AppGitRepository } from '@modules/app-git/repository'; import { GroupPermissionsRepository } from '@modules/group-permissions/repository'; import { SubModule } from '@modules/app/sub-module'; +import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; @Module({}) export class AppsModule extends SubModule { static async register(configs: { IS_GET_CONTEXT: boolean }, isMainImport: boolean = false): Promise { @@ -54,7 +55,6 @@ export class AppsModule extends SubModule { 'services/page.util.service', ]); - return { module: AppsModule, imports: [ @@ -77,6 +77,7 @@ export class AppsModule extends SubModule { WorkflowService, VersionRepository, AppsRepository, + OrganizationGitSyncRepository, AppGitRepository, PageService, EventsService, diff --git a/server/src/modules/apps/service.ts b/server/src/modules/apps/service.ts index 4162e96f8c..052edd1c40 100644 --- a/server/src/modules/apps/service.ts +++ b/server/src/modules/apps/service.ts @@ -27,6 +27,7 @@ import { AppEnvironmentUtilService } from '@modules/app-environments/util.servic import { plainToClass } from 'class-transformer'; import { AppAbility } from '@modules/app/decorators/ability.decorator'; import { VersionRepository } from '@modules/versions/repository'; +import { AppVersionStatus, AppVersionType } from '@entities/app_version.entity'; import { AppsRepository } from './repository'; import { FoldersUtilService } from '@modules/folders/util.service'; import { FolderAppsUtilService } from '@modules/folder-apps/util.service'; @@ -44,6 +45,7 @@ import { MODULES } from '@modules/app/constants/modules'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { AppGitRepository } from '@modules/app-git/repository'; import { WorkflowSchedule } from '@entities/workflow_schedule.entity'; +import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; @Injectable() export class AppsService implements IAppsService { @@ -61,7 +63,8 @@ export class AppsService implements IAppsService { protected readonly aiUtilService: AiUtilService, protected readonly componentsService: ComponentsService, protected readonly eventEmitter: EventEmitter2, - protected readonly appGitRepository: AppGitRepository + protected readonly appGitRepository: AppGitRepository, + protected readonly organizationGitRepository: OrganizationGitSyncRepository ) {} async create(user: User, appCreateDto: AppCreateDto) { const { name, icon, type, prompt } = appCreateDto; @@ -220,15 +223,54 @@ export class AppsService implements IAppsService { async update(app: App, appUpdateDto: AppUpdateDto, user: User) { const { id: userId, organizationId } = user; - const { name } = appUpdateDto; + const { name, editingVersionId } = appUpdateDto; + const orgGit = await this.organizationGitRepository.findOrgGitByOrganizationId(app.organizationId); + const isGitSyncEnabled = Boolean( + orgGit?.gitSsh?.isEnabled || orgGit?.gitHttps?.isEnabled || orgGit?.gitLab?.isEnabled + ); + + // Check if name is being changed - require draft version to exist + if (name && name !== app.name) { + // Block rename if git sync is enabled and app has been pushed + if (isGitSyncEnabled) { + const appGitSync = await this.appGitRepository.findAppGitByAppId(app.id); + if (appGitSync) { + // Check if on default branch (not a feature branch) + const editingVersion = editingVersionId + ? await this.versionRepository.findById(editingVersionId, app.id) + : app.editingVersion; + + const isOnDefaultBranch = editingVersion?.versionType !== 'branch'; + + if (isOnDefaultBranch) { + throw new BadRequestException( + "Renaming isn't allowed on master. Switch branch in app builder to update name." + ); + } + } + } + + const draftVersion = await this.versionRepository.findOne({ + where: { + appId: app.id, + // versionType: AppVersionType.VERSION, + status: AppVersionStatus.DRAFT, + }, + }); + + if (!draftVersion && isGitSyncEnabled) { + throw new BadRequestException('Cannot rename app. Please create a draft version first to rename the app.'); + } + } const result = await this.appsUtilService.update(app, appUpdateDto, organizationId); - if (name && app.creationMode != 'GIT' && name != app.name) { + if (name && name != app.name) { const appRenameDto = { user: user, organizationId: organizationId, app: app, appUpdateDto: appUpdateDto, + editingVersionId: editingVersionId, }; await this.eventEmitter.emit('app-rename-commit', appRenameDto); } @@ -415,8 +457,13 @@ export class AppsService implements IAppsService { response['editing_version']['current_environment_id'] = appVersionEnvironment.id; } response['should_freeze_editor'] = shouldFreezeEditor; + // Check if editing version is a draft + const editingVersion = response['editing_version']; + const isDraft = editingVersion?.status === 'DRAFT'; + const appGit = await this.appGitRepository.findAppGitByAppId(app.id); - if (appGit) { + if (appGit && !isDraft) { + // Only apply git-based freezing for non-draft versions response['should_freeze_editor'] = !appGit.allowEditing || shouldFreezeEditor; } response['editorEnvironment'] = { diff --git a/server/src/modules/apps/services/app-import-export.service.ts b/server/src/modules/apps/services/app-import-export.service.ts index cdc3197e52..a7becd8634 100644 --- a/server/src/modules/apps/services/app-import-export.service.ts +++ b/server/src/modules/apps/services/app-import-export.service.ts @@ -2,7 +2,7 @@ import { BadRequestException, HttpException, HttpStatus, Injectable } from '@nes import { isEmpty, set } from 'lodash'; import { App } from 'src/entities/app.entity'; import { AppEnvironment } from 'src/entities/app_environments.entity'; -import { AppVersion } from 'src/entities/app_version.entity'; +import { AppVersion, AppVersionStatus } from 'src/entities/app_version.entity'; import { DataQuery } from 'src/entities/data_query.entity'; import { DataSource } from 'src/entities/data_source.entity'; import { DataSourceOptions } from 'src/entities/data_source_options.entity'; @@ -44,7 +44,7 @@ import { QueryPermission } from '@entities/query_permissions.entity'; import { QueryUser } from '@entities/query_users.entity'; import { ComponentPermission } from '@entities/component_permissions.entity'; import { ComponentUser } from '@entities/component_users.entity'; -import { AppVersionStatus } from '@entities/app_version.entity'; +import { OrganizationGitSync } from '@entities/organization_git_sync.entity'; interface AppResourceMappings { defaultDataSourceIdMapping: Record; dataQueryMapping: Record; @@ -53,6 +53,10 @@ interface AppResourceMappings { appDefaultEnvironmentMapping: Record; pagesMapping: Record; componentsMapping: Record; + dataSourceMapping: Record; + dataSourceOptionsMapping: Record; + layoutMapping: Record; + versionGitIdMapping: Record; } type DefaultDataSourceName = @@ -166,6 +170,18 @@ const INPUT_WIDGET_TYPES = [ 'RangeSliderV2', ]; +const entitiesToRemoveTimestamps = [ + 'components', + 'pages', + 'events', + 'dataQueries', + 'dataSources', + 'appVersions', + 'dataSourcesOptions', + 'appEnvironments', + 'modules', + 'schemaDetails', +]; const SHOW_CLEAR_BTN_COMPONENT_TYPES = [ 'TextInput', 'NumberInput', @@ -188,7 +204,7 @@ export class AppImportExportService { protected usersUtilService: UsersUtilService, protected componentsService: ComponentsService, protected entityManager: EntityManager - ) { } + ) {} async export(user: User, id: string, searchParams: any = {}): Promise<{ appV2: App }> { // https://github.com/typeorm/typeorm/issues/3857 @@ -306,10 +322,10 @@ export class AppImportExportService { ...page, permissions: groupPermission ? { - permissionGroup: groupPermission.users - .map((user) => user.permissionGroup?.name) - .filter((name): name is string => Boolean(name)), - } + permissionGroup: groupPermission.users + .map((user) => user.permissionGroup?.name) + .filter((name): name is string => Boolean(name)), + } : undefined, }; }); @@ -321,29 +337,34 @@ export class AppImportExportService { ...query, permissions: groupPermission ? { - permissionGroup: groupPermission.users - .map((user) => user.permissionGroup?.name) - .filter((name): name is string => Boolean(name)), - } + permissionGroup: groupPermission.users + .map((user) => user.permissionGroup?.name) + .filter((name): name is string => Boolean(name)), + } : undefined, }; }); + // Remove updatedAt to avoid unnecessary conflicts during merge in Git Sync + for (const query of queriesWithPermissionGroups) { + delete query.updatedAt; + } + // Added orderBy for layouts as well to maintain consistency -> in the exported file and avoid merge conflicts const components = pages.length > 0 ? await manager - .createQueryBuilder(Component, 'components') - .leftJoinAndSelect('components.layouts', 'layouts') - .leftJoinAndSelect('components.permissions', 'permission') - .leftJoinAndSelect('permission.users', 'componentUser') - .leftJoinAndSelect('componentUser.permissionGroup', 'permissionGroup') - .where('components.pageId IN(:...pageId)', { - pageId: pages.map((v) => v.id), - }) - .orderBy('components.created_at', 'ASC') - .getMany() + .createQueryBuilder(Component, 'components') + .leftJoinAndSelect('components.layouts', 'layouts') + .leftJoinAndSelect('components.permissions', 'permission') + .leftJoinAndSelect('permission.users', 'componentUser') + .leftJoinAndSelect('componentUser.permissionGroup', 'permissionGroup') + .where('components.pageId IN(:...pageId)', { + pageId: pages.map((v) => v.id), + }) + .orderBy('components.created_at', 'ASC') + .addOrderBy('layouts.type', 'ASC') + .getMany() : []; - const appModules = components.filter((c) => c.type === 'ModuleViewer' || c.properties?.moduleAppId); const moduleAppIds = appModules.map((moduleComponent) => ({ moduleId: moduleComponent.properties?.moduleAppId.value, @@ -366,12 +387,13 @@ export class AppImportExportService { return { ...component, + // updatedAt: query?.updatedAt, permissions: groupPermission ? { - permissionGroup: groupPermission.users - .map((user) => user.permissionGroup?.name) - .filter((name): name is string => Boolean(name)), - } + permissionGroup: groupPermission.users + .map((user) => user.permissionGroup?.name) + .filter((name): name is string => Boolean(name)), + } : undefined, }; }); @@ -383,7 +405,6 @@ export class AppImportExportService { }) .orderBy('event_handlers.created_at', 'ASC') .getMany(); - appToExport['components'] = componentsWithPermissionGroups; appToExport['pages'] = pagesWithPermissionGroups; appToExport['events'] = events; @@ -400,7 +421,13 @@ export class AppImportExportService { if (appToExport?.type === APP_TYPES.FRONT_END) { appToExport['modules'] = moduleApps; //Sending all app related modules } - + entitiesToRemoveTimestamps.forEach((entityName) => { + const entity = appToExport[entityName]; + if (entity) { + this.removeTimestamps(entity); // Pass the object/array to removeTimestamps + } + }); + delete (appToExport as any).updatedAt; return { appV2: appToExport }; }); } @@ -426,11 +453,11 @@ export class AppImportExportService { const existingModules = moduleAppNames.length > 0 ? await this.entityManager - .createQueryBuilder(App, 'app') - .where('app.name IN (:...moduleAppNames)', { moduleAppNames }) - .andWhere('app.organizationId = :organizationId', { organizationId: user.organizationId }) - .distinct(true) - .getMany() + .createQueryBuilder(App, 'app') + .where('app.name IN (:...moduleAppNames)', { moduleAppNames }) + .andWhere('app.organizationId = :organizationId', { organizationId: user.organizationId }) + .distinct(true) + .getMany() : []; // Process each module from the import data @@ -478,6 +505,17 @@ export class AppImportExportService { return moduleResourceMappings; } + removeTimestamps = (entity: any) => { + if (Array.isArray(entity)) { + entity.forEach((item) => { + delete item.createdAt; + delete item.updatedAt; + }); + } else if (entity && typeof entity === 'object') { + delete entity.createdAt; + delete entity.updatedAt; + } + }; async import( user: User, appParamsObj: any, @@ -559,13 +597,137 @@ export class AppImportExportService { }, manager); } - async updateEntityReferencesForImportedApp(manager: EntityManager, resourceMapping: AppResourceMappings) { + /** + * Sets co_relation_id on an entity based on the mapping (oldId -> newId) + * Finds the old ID (key) that maps to the entity's current ID (value) + */ + private setCoRelationId( + entity: T, + mapping: Record + ): void { + const co_relation_id = Object.keys(mapping).find((key) => mapping[key] === entity.id); + if (co_relation_id) { + entity.co_relation_id = co_relation_id; + } + } + + private async updateCoRelationIdsForEntities( + manager: EntityManager, + resourceMapping: AppResourceMappings + ): Promise { + const newPageIds = Object.values(resourceMapping.pagesMapping); + const newDataSourceIds = Object.values(resourceMapping.dataSourceMapping); + const newDsoIds = Object.values(resourceMapping.dataSourceOptionsMapping); + const newLayoutIds = Object.values(resourceMapping.layoutMapping); + const appVersionIds = Object.values(resourceMapping.appVersionMapping); + + // Pages + if (newPageIds.length > 0) { + const pages = await manager + .createQueryBuilder(Page, 'pages') + .where('pages.id IN(:...pageIds)', { pageIds: newPageIds }) + .select(['pages.id']) + .getMany(); + + const toUpdatePages = pages.map((page) => { + this.setCoRelationId(page, resourceMapping.pagesMapping); + return page; + }); + + if (!isEmpty(toUpdatePages)) { + await manager.save(toUpdatePages); + } + } + + // DataSources + if (newDataSourceIds.length > 0) { + const dataSources = await manager + .createQueryBuilder(DataSource, 'dataSources') + .where('dataSources.id IN(:...dataSourceIds)', { dataSourceIds: newDataSourceIds }) + .select(['dataSources.id']) + .getMany(); + + const toUpdateDataSources = dataSources.map((dataSource) => { + this.setCoRelationId(dataSource, resourceMapping.dataSourceMapping); + return dataSource; + }); + + if (!isEmpty(toUpdateDataSources)) { + await manager.save(toUpdateDataSources); + } + } + + // DataSourceOptions + if (newDsoIds.length > 0) { + const dataSourceOptions = await manager + .createQueryBuilder(DataSourceOptions, 'dso') + .where('dso.id IN(:...dsoIds)', { dsoIds: newDsoIds }) + .select(['dso.id']) + .getMany(); + + const toUpdateDso = dataSourceOptions.map((dso) => { + this.setCoRelationId(dso, resourceMapping.dataSourceOptionsMapping); + return dso; + }); + + if (!isEmpty(toUpdateDso)) { + await manager.save(toUpdateDso); + } + } + + // Layouts + if (newLayoutIds.length > 0) { + const layouts = await manager + .createQueryBuilder(Layout, 'layouts') + .where('layouts.id IN(:...layoutIds)', { layoutIds: newLayoutIds }) + .select(['layouts.id']) + .getMany(); + + const toUpdateLayouts = layouts.map((layout) => { + this.setCoRelationId(layout, resourceMapping.layoutMapping); + return layout; + }); + + if (!isEmpty(toUpdateLayouts)) { + await manager.save(toUpdateLayouts); + } + } + + if (appVersionIds.length > 0) { + const appVersions = await manager + .createQueryBuilder(AppVersion, 'av') + .where('av.id IN(:...avIds)', { avIds: appVersionIds }) + .select(['av.id']) + .getMany(); + + const toUpdateVersions = appVersions.map((av) => { + this.setCoRelationId(av, resourceMapping.appVersionMapping); + return av; + }); + + if (!isEmpty(toUpdateVersions)) { + await manager.save(toUpdateVersions); + } + } + } + + async updateEntityReferencesForImportedApp( + manager: EntityManager, + resourceMapping: AppResourceMappings, + updateCoRelationIds = false + ) { const mappings = { ...resourceMapping.componentsMapping, ...resourceMapping.dataQueryMapping, + ...resourceMapping.pagesMapping, + ...resourceMapping.dataSourceMapping, + ...resourceMapping.dataSourceOptionsMapping, + ...resourceMapping.layoutMapping, + ...resourceMapping.appVersionMapping, }; const newComponentIds = Object.values(resourceMapping.componentsMapping); const newQueriesIds = Object.values(resourceMapping.dataQueryMapping); + const appVersionIds = Object.values(resourceMapping.appVersionMapping); if (newComponentIds.length > 0) { const components = await manager @@ -584,9 +746,23 @@ export class AppImportExportService { ]) .getMany(); - const toUpdateComponents = components.filter((component) => { - return updateEntityReferences(component, mappings); - }); + let toUpdateComponents; + if (updateCoRelationIds) { + toUpdateComponents = components.map((component) => { + const co_relation_id = Object.keys(resourceMapping.componentsMapping).find( + (key) => resourceMapping.componentsMapping[key] === component.id + ); + if (co_relation_id) { + component.co_relation_id = co_relation_id; // Set the coRelationId + } + updateEntityReferences(component, mappings); + return component; + }); + } else { + toUpdateComponents = components.filter((component) => { + return updateEntityReferences(component, mappings); + }); + } if (!isEmpty(toUpdateComponents)) { await manager.save(toUpdateComponents); @@ -602,16 +778,34 @@ export class AppImportExportService { .select(['dataQueries.id', 'dataQueries.options']) .getMany(); - const toUpdateDataQueries = dataQueries.filter((dataQuery) => { - return updateEntityReferences(dataQuery, mappings); - }); + let toUpdateDataQueries; + if (updateCoRelationIds) { + toUpdateDataQueries = dataQueries.filter((dataQuery) => { + const oldId = Object.keys(resourceMapping.dataQueryMapping).find( + (key) => resourceMapping.dataQueryMapping[key] === dataQuery.id + ); + if (oldId) { + dataQuery.co_relation_id = oldId; // Set the coRelationId to the old ID + } + return updateEntityReferences(dataQuery, mappings); + }); + } else { + toUpdateDataQueries = dataQueries.filter((dataQuery) => { + return updateEntityReferences(dataQuery, mappings); + }); + } if (!isEmpty(toUpdateDataQueries)) { await manager.save(toUpdateDataQueries); } } + + // Handle co_relation_id for Pages, DataSources, DataSourceOptions, Layouts (only when updateCoRelationIds is true) + if (updateCoRelationIds) { + await this.updateCoRelationIdsForEntities(manager, resourceMapping); + } + // update Global settings of created versions - const appVersionIds = Object.values(resourceMapping.appVersionMapping); const newAppVersions = await manager.find(AppVersion, { where: { id: In(appVersionIds), @@ -629,6 +823,7 @@ export class AppImportExportService { await this.updateWorkflowDefinitionQueryReferences(manager, appVersionIds, resourceMapping); } } + async createImportedAppForUser( manager: EntityManager, appParams: any, @@ -647,6 +842,7 @@ export class AppImportExportService { icon: appParams.icon, creationMode: `${isGitApp ? 'GIT' : 'DEFAULT'}`, isPublic: false, + co_relation_id: appParams?.id, createdAt: new Date(), updatedAt: new Date(), }); @@ -730,6 +926,10 @@ export class AppImportExportService { appDefaultEnvironmentMapping: {}, pagesMapping: {}, componentsMapping: {}, + dataSourceMapping: {}, + dataSourceOptionsMapping: {}, + layoutMapping: {}, + versionGitIdMapping: {}, }; const { importingDataSources, @@ -839,11 +1039,16 @@ export class AppImportExportService { const savedComponents = await manager.save(Component, mappedComponents); + const layoutIdToOldIdMap: { layout: Layout; oldId: string }[] = []; + for (const componentId in pageComponents) { const componentLayout = pageComponents[componentId]['layouts']; + const sortedLayoutTypes = Object.keys(componentLayout).sort((a, b) => { + return componentLayout[a].id.localeCompare(componentLayout[b].id); + }); if (componentLayout && appResourceMappings.componentsMapping[componentId]) { - for (const type in componentLayout) { + for (const type of sortedLayoutTypes) { const layout = componentLayout[type]; const newLayout = new Layout(); newLayout.type = type; @@ -858,11 +1063,21 @@ export class AppImportExportService { newLayout.componentId = appResourceMappings.componentsMapping[componentId]; componentLayouts.push(newLayout); + layoutIdToOldIdMap.push({ layout: newLayout, oldId: layout.id }); } } } - await manager.save(Layout, componentLayouts); + // await manager.save(Layout, componentLayouts); + + const savedLayouts = await manager.save(Layout, componentLayouts); + // Populate layoutMapping: oldId -> newId + savedLayouts.forEach((savedLayout, index) => { + const oldId = layoutIdToOldIdMap[index].oldId; + if (oldId) { + appResourceMappings.layoutMapping[oldId] = savedLayout.id; + } + }); //Event handlers @@ -1037,6 +1252,8 @@ export class AppImportExportService { user ); + appResourceMappings.dataSourceMapping[importingDataSource.id] = dataSourceForAppVersion.id; + // TODO: Have version based conditional based on app versions // currently we are checking on existence of keys and handling // imports accordingly. Would be pragmatic to do: @@ -1061,7 +1278,15 @@ export class AppImportExportService { createdAt: new Date(), updatedAt: new Date(), }); - await manager.save(dsOption); + const savedDsOption = await manager.save(dsOption); + + // Find the matching old dataSourceOption ID for this environment + const oldDsOption = importingDataSourceOptions.find( + (dso) => dso.dataSourceId === importingDataSource.id && dso.environmentId === envId + ); + if (oldDsOption) { + appResourceMappings.dataSourceOptionsMapping[oldDsOption.id] = savedDsOption.id; + } }) ); } @@ -1132,6 +1357,7 @@ export class AppImportExportService { isHomePage = importingAppVersion.homePageId === page.id; + // can comment this after testing --> can uncomment this to fix this issue if (isHomePage) { updateHomepageId = pageCreated.id; } @@ -1256,6 +1482,7 @@ export class AppImportExportService { newLayout.width = layout.width; newLayout.height = layout.height; newLayout.component = savedComponent; + newLayout.co_relation_id = layout.id; await manager.save(newLayout); }) @@ -1507,10 +1734,10 @@ export class AppImportExportService { const options = importingDataSource.kind === 'tooljetdb' ? this.replaceTooljetDbTableIds( - importingQuery.options, - externalResourceMappings['tooljet_database'], - organizationId - ) + importingQuery.options, + externalResourceMappings['tooljet_database'], + organizationId + ) : importingQuery.options; const newQuery = manager.create(DataQuery, { @@ -1945,6 +2172,38 @@ export class AppImportExportService { }); let currentEnvironmentId: string; + // Check if git sync is configured for the workspace + const orgGitSync = await manager.findOne(OrganizationGitSync, { + where: { organizationId: user?.organizationId }, + }); + const isGitSyncConfigured = !!orgGitSync; + + // Find the latest draft version + // When git sync is configured, only the latest draft should remain as DRAFT, others become PUBLISHED + let latestDraftId: string | null = null; + if (isGitSyncConfigured) { + const draftVersions = appVersions.filter((v) => v.status === AppVersionStatus.DRAFT || !v.status); + + if (draftVersions.length > 0) { + // Check if createdAt is available on the versions + const hasCreatedAt = draftVersions.some((v) => v.createdAt); + + if (hasCreatedAt) { + // Sort by createdAt descending to find the most recent draft + const sortedDrafts = [...draftVersions].sort((a, b) => { + const dateA = a.createdAt ? new Date(a.createdAt).getTime() : 0; + const dateB = b.createdAt ? new Date(b.createdAt).getTime() : 0; + return dateB - dateA; // Descending order (latest first) + }); + latestDraftId = sortedDrafts[0].id; + } else { + // If no createdAt available (export file), use the last draft in the array + // The editingVersion (most recent) is typically the last one in appVersions array + latestDraftId = draftVersions[draftVersions.length - 1].id; + } + } + } + for (const appVersion of appVersions) { const appEnvIds: string[] = [...organization.appEnvironments.map((env) => env.id)]; @@ -1961,6 +2220,19 @@ export class AppImportExportService { if (importedApp.editingVersion && !createNewVersion) { version = importedApp.editingVersion; } else { + // Determine the version status + // When git sync is configured and there are multiple drafts, only the latest draft stays as DRAFT + let versionStatus: AppVersionStatus; + const isDraftVersion = appVersion.status === AppVersionStatus.DRAFT || !appVersion.status; + + if (isGitSyncConfigured && isDraftVersion) { + // Only the latest draft should remain as DRAFT, others become PUBLISHED + versionStatus = appVersion.id === latestDraftId ? AppVersionStatus.DRAFT : AppVersionStatus.PUBLISHED; + } else { + // Preserve original status or default to DRAFT + versionStatus = appVersion.status || AppVersionStatus.DRAFT; + } + version = await manager.create(AppVersion, { appId: importedApp.id, definition: appVersion.definition, @@ -1968,11 +2240,13 @@ export class AppImportExportService { currentEnvironmentId, createdAt: new Date(), updatedAt: new Date(), - status: AppVersionStatus.DRAFT, + status: versionStatus, + versionType: appVersion.versionType, parent_version_id: appVersion?.id || null, + createdById: user.id, + co_relation_id: appVersion.id, }); } - if (isNormalizedAppDefinitionSchema) { version.showViewerNavigation = appVersion.showViewerNavigation; version.homePageId = appVersion.homePageId; @@ -2238,10 +2512,10 @@ export class AppImportExportService { options: dataSourceId == defaultDataSourceIds['tooljetdb'] ? this.replaceTooljetDbTableIds( - query.options, - externalResourceMappings['tooljet_database'], - user?.organizationId - ) + query.options, + externalResourceMappings['tooljet_database'], + user?.organizationId + ) : query.options, }); await manager.save(newQuery); diff --git a/server/src/modules/apps/util.service.ts b/server/src/modules/apps/util.service.ts index a17a47a2fa..82eadd2408 100644 --- a/server/src/modules/apps/util.service.ts +++ b/server/src/modules/apps/util.service.ts @@ -15,7 +15,7 @@ import { DataSource } from '@entities/data_source.entity'; import { EntityManager, MoreThan, SelectQueryBuilder } from 'typeorm'; import { v4 as uuidv4 } from 'uuid'; import { AppsRepository } from './repository'; -import { AppVersion } from '@entities/app_version.entity'; +import { AppVersion, AppVersionStatus, AppVersionType } from '@entities/app_version.entity'; import { AppEnvironmentUtilService } from '@modules/app-environments/util.service'; import { VersionRepository } from '@modules/versions/repository'; import { LicenseTermsService } from '@modules/licensing/interfaces/IService'; @@ -90,6 +90,7 @@ export class AppsUtilService implements IAppsUtilService { appVersionId: appVersion.id, index: 1, autoComputeLayout: true, + appId: app.id, }) ); @@ -696,4 +697,43 @@ export class AppsUtilService implements IAppsUtilService { return this.appRepository.findByAppId(appId, manager); }, manager); } + + /** + * Determines if the editor should be frozen based on version status, type, and git configuration + * @param editingVersion - The app version being edited + * @param environmentPriority - The priority of the current environment (> 1 means production-like) + * @param appGit - The app's git configuration + * @param orgGit - The organization's git configuration + * @returns boolean indicating if editor should be frozen + */ + shouldFreezeEditor(editingVersion: AppVersion, appGit: any, orgGit: any): boolean { + let shouldFreezeEditor = false; + // Check version status and type + if (editingVersion?.status === AppVersionStatus.PUBLISHED) { + // Published versions are always frozen + shouldFreezeEditor = true; + } else if ( + editingVersion?.versionType === AppVersionType.VERSION && + editingVersion?.status === AppVersionStatus.DRAFT && + (!orgGit || !orgGit?.isBranchingEnabled) + ) { + // Draft versions should never be frozen by git config, only by environment + // Keep existing shouldFreezeEditor value from environment priority check + } else if ( + editingVersion?.versionType === AppVersionType.VERSION && + editingVersion?.status !== AppVersionStatus.DRAFT + ) { + // Non-draft version types are frozen + shouldFreezeEditor = true; + } else { + // For branch versions, check git config + if (appGit && editingVersion?.status !== AppVersionStatus.DRAFT) { + shouldFreezeEditor = !appGit?.allowEditing || shouldFreezeEditor; + } else if (orgGit && orgGit?.isBranchingEnabled && editingVersion?.versionType === AppVersionType.VERSION) { + shouldFreezeEditor = orgGit?.isBranchingEnabled || shouldFreezeEditor; + } + } + + return shouldFreezeEditor; + } } diff --git a/server/src/modules/external-apis/Interfaces/IUtilService.ts b/server/src/modules/external-apis/Interfaces/IUtilService.ts index 53c1d2cb00..f326b414d0 100644 --- a/server/src/modules/external-apis/Interfaces/IUtilService.ts +++ b/server/src/modules/external-apis/Interfaces/IUtilService.ts @@ -1,5 +1,7 @@ import { ValidateEditUserGroupAdditionObject } from '../types'; import { EntityManager } from 'typeorm'; +import { UserDetailKeyValueDto } from '../dto'; + export interface IExternalApiUtilService { // generates random password by taking length as the input generateRandomPassword(length?: number): string; @@ -7,4 +9,17 @@ export interface IExternalApiUtilService { functionParam: ValidateEditUserGroupAdditionObject, manager?: EntityManager ): Promise; + + updateUserMetadata( + workspaceId: string, + userId: string, + userDetails: UserDetailKeyValueDto[], + manager?: EntityManager + ): Promise; + + getUserMetadata( + workspaceId: string, + userId: string, + manager?: EntityManager + ): Promise; } diff --git a/server/src/modules/external-apis/ability/index.ts b/server/src/modules/external-apis/ability/index.ts index 31892cf749..047489076c 100644 --- a/server/src/modules/external-apis/ability/index.ts +++ b/server/src/modules/external-apis/ability/index.ts @@ -31,6 +31,7 @@ export class FeatureAbilityFactory extends AbilityFactory FEATURE_KEY.AUTO_RELEASE_APP, FEATURE_KEY.GENERATE_PAT, FEATURE_KEY.VALIDATE_PAT_SESSION, + FEATURE_KEY.CREATE_GROUP, ], User ); diff --git a/server/src/modules/external-apis/constants/feature.ts b/server/src/modules/external-apis/constants/feature.ts index 4746d59301..7174af92c7 100644 --- a/server/src/modules/external-apis/constants/feature.ts +++ b/server/src/modules/external-apis/constants/feature.ts @@ -49,6 +49,14 @@ export const FEATURES: FeaturesConfig = { license: LICENSE_FIELD.EXTERNAL_API, isPublic: true, }, + [FEATURE_KEY.UPDATE_USER_METADATA]: { + license: LICENSE_FIELD.EXTERNAL_API, + isPublic: true, + }, + [FEATURE_KEY.GET_USER_METADATA]: { + license: LICENSE_FIELD.EXTERNAL_API, + isPublic: true, + }, [FEATURE_KEY.PULL_NEW_APP]: { license: LICENSE_FIELD.EXTERNAL_API, isPublic: true, @@ -77,5 +85,9 @@ export const FEATURES: FeaturesConfig = { license: LICENSE_FIELD.EXTERNAL_API, isPublic: true, }, + [FEATURE_KEY.CREATE_GROUP]: { + license: LICENSE_FIELD.EXTERNAL_API, + isPublic: true, + }, }, }; diff --git a/server/src/modules/external-apis/constants/index.ts b/server/src/modules/external-apis/constants/index.ts index 6d59bd5496..3590d675a5 100644 --- a/server/src/modules/external-apis/constants/index.ts +++ b/server/src/modules/external-apis/constants/index.ts @@ -7,6 +7,8 @@ export enum FEATURE_KEY { UPDATE_USER_WORKSPACE = 'UPDATE_USER_WORKSPACE', GET_ALL_WORKSPACES = 'GET_ALL_WORKSPACES', UPDATE_USER_ROLE = 'UPDATE_USER_ROLE', + UPDATE_USER_METADATA = 'UPDATE_USER_METADATA', + GET_USER_METADATA = 'GET_USER_METADATA', PULL_NEW_APP = 'PULL_NEW_APP', PULL_EXISTING_APP = 'PULL_EXISTING_APP', PUSH_APP_VERSION = 'PUSH_APP_VERSION', @@ -17,6 +19,7 @@ export enum FEATURE_KEY { EXPORT_APP = 'EXPORT_APP', GENERATE_PAT = 'GENERATE_PAT', VALIDATE_PAT_SESSION = 'VALIDATE_PAT_SESSION', + CREATE_GROUP = 'CREATE_GROUP', } export type DefaultDataSourceKind = 'restapi' | 'runjs' | 'runpy' | 'tooljetdb' | 'workflows'; diff --git a/server/src/modules/external-apis/controller.ts b/server/src/modules/external-apis/controller.ts index 7180ea23fb..93e7d2c72e 100644 --- a/server/src/modules/external-apis/controller.ts +++ b/server/src/modules/external-apis/controller.ts @@ -1,5 +1,5 @@ import { Controller, Get, Param, UseGuards, Body, Patch, Post, Put, NotFoundException } from '@nestjs/common'; -import { UpdateUserDto, WorkspaceDto, UpdateGivenWorkspaceDto, CreateUserDto } from './dto'; +import { UpdateUserDto, WorkspaceDto, UpdateGivenWorkspaceDto, CreateUserDto, UpdateUserMetadataDto } from './dto'; import { IExternalApisController } from './Interfaces/IController'; import { EditUserRoleDto } from '@modules/roles/dto'; import { ExternalApiSecurityGuard } from '@modules/auth/guards/external-api-security.guard'; @@ -53,4 +53,23 @@ export class ExternalApisController implements IExternalApisController { async updateUserRole(@Param('workspaceId') workspaceId: string, @Body() editRoleDto: EditUserRoleDto) { throw new NotFoundException(); } + + @UseGuards(ExternalApiSecurityGuard) + @Put('workspace/:workspaceId/user/:userId') + async updateUserMetadata( + @Param('workspaceId') workspaceId: string, + @Param('userId') userId: string, + @Body() updateUserMetadataDto: UpdateUserMetadataDto + ) { + throw new NotFoundException(); + } + + @UseGuards(ExternalApiSecurityGuard) + @Get('workspace/:workspaceId/user/:userId') + async getUserMetadata( + @Param('workspaceId') workspaceId: string, + @Param('userId') userId: string + ) { + throw new NotFoundException(); + } } diff --git a/server/src/modules/external-apis/controllers/groups.controller.ts b/server/src/modules/external-apis/controllers/groups.controller.ts new file mode 100644 index 0000000000..8fc3dc1396 --- /dev/null +++ b/server/src/modules/external-apis/controllers/groups.controller.ts @@ -0,0 +1,21 @@ +import { Controller, Param, Body, NotFoundException, UseGuards, Post, HttpCode, HttpStatus } from '@nestjs/common'; +import { CreateGroupExternalDto } from '../dto/groups.dto'; +import { InitFeature } from '@modules/app/decorators/init-feature.decorator'; +import { FEATURE_KEY } from '@modules/external-apis/constants'; +import { ExternalApiSecurityGuard } from '@ee/auth/guards/external-api-security.guard'; + +@Controller('ext') +export class ExternalApisGroupsController { + constructor() {} + + @InitFeature(FEATURE_KEY.CREATE_GROUP) + @UseGuards(ExternalApiSecurityGuard) + @Post('workspace/:workspaceId/groups') + @HttpCode(HttpStatus.CREATED) + async createGroup( + @Param('workspaceId') workspaceId: string, + @Body() createGroupDto: CreateGroupExternalDto + ): Promise { + throw new NotFoundException(); + } +} diff --git a/server/src/modules/external-apis/dto/groups.dto.ts b/server/src/modules/external-apis/dto/groups.dto.ts new file mode 100644 index 0000000000..ff9615681a --- /dev/null +++ b/server/src/modules/external-apis/dto/groups.dto.ts @@ -0,0 +1,231 @@ +import { + IsString, + IsNotEmpty, + IsBoolean, + IsOptional, + IsArray, + ValidateNested, + IsEnum, + Validate, + ValidatorConstraint, + ValidatorConstraintInterface, + ValidationArguments, + Matches, + MaxLength, +} from 'class-validator'; +import { Type, Transform } from 'class-transformer'; + +// Environment types for app permissions +export enum AppEnvironment { + DEVELOPMENT = 'development', + STAGING = 'staging', + PRODUCTION = 'production', + RELEASED = 'released', +} + +// Resource types for granular permissions +export enum GranularPermissionResourceType { + APP = 'app', + DATA_SOURCE = 'data_source', + WORKFLOW = 'workflow', +} + +// Custom validator for hideFromDashboard - can only be true when canEdit is false (view mode) +@ValidatorConstraint({ name: 'hideFromDashboardRequiresViewMode', async: false }) +class HideFromDashboardRequiresViewModeConstraint implements ValidatorConstraintInterface { + validate(_: any, args: ValidationArguments) { + const obj = args.object as AppPermissionsDto; + // hideFromDashboard is only configurable when canEdit is false + return !(obj.hideFromDashboard === true && obj.canEdit === true); + } + + defaultMessage() { + return 'hideFromDashboard can only be true when canEdit is false'; + } +} + +// App-specific permissions. +// canEdit is the single flag that drives view/edit mode: +// canEdit = true → internal: can_edit=true, can_view=false +// canEdit = false → internal: can_edit=false, can_view=true (hideFromDashboard is configurable) +export class AppPermissionsDto { + @IsBoolean() + @IsNotEmpty() + canEdit: boolean; + + @IsBoolean() + @IsOptional() + @Validate(HideFromDashboardRequiresViewModeConstraint) + hideFromDashboard?: boolean; + + @IsArray() + @IsEnum(AppEnvironment, { each: true }) + @IsOptional() + environments?: AppEnvironment[]; +} + +// Workflow-specific permissions +// canEdit = true → internal: can_edit=true, can_view=false +// canEdit = false → internal: can_edit=false, can_view=true +export class WorkflowPermissionsDto { + @IsBoolean() + @IsNotEmpty() + canEdit: boolean; +} + +@ValidatorConstraint({ name: 'mutuallyExclusive', async: false }) +class MutuallyExclusiveConstraint implements ValidatorConstraintInterface { + validate(_: any, args: ValidationArguments) { + const obj = args.object as DataSourcePermissionsDto; + if (obj.canUse === true && obj.canConfigure === true) { + return false; + } + return !(obj.canUse === false && obj.canConfigure === false); + } + + defaultMessage() { + return 'canUse and canConfigure are mutually exclusive - exactly one must be true'; + } +} + +// Data source-specific permissions +export class DataSourcePermissionsDto { + @IsBoolean() + @IsOptional() + canUse?: boolean; + + @IsBoolean() + @IsOptional() + @Validate(MutuallyExclusiveConstraint) + canConfigure?: boolean; +} + +// Custom validator: each entry must be either a valid UUID v4 or a non-empty string name +@ValidatorConstraint({ name: 'uuidOrName', async: false }) +class UuidOrNameConstraint implements ValidatorConstraintInterface { + validate(value: any) { + return typeof value === 'string' && value.trim().length > 0; + } + + defaultMessage() { + return 'each resource must be a valid UUID or a non-empty name string'; + } +} + +// Custom validator for resources array based on applyToAll flag +@ValidatorConstraint({ name: 'resourcesValidation', async: false }) +class ResourcesValidationConstraint implements ValidatorConstraintInterface { + validate(resources: string[], args: ValidationArguments) { + const obj = args.object as GranularPermissionDto; + if (obj.applyToAll === false && (!resources || resources.length === 0)) { + return false; + } + return !(obj.applyToAll === true && resources && resources.length > 0); + } + + defaultMessage(args: ValidationArguments) { + const obj = args.object as GranularPermissionDto; + if (obj.applyToAll === false) { + return 'resources must not be empty when applyToAll is false'; + } + return 'resources must be empty when applyToAll is true'; + } +} + +// Granular permission item in the request +export class GranularPermissionDto { + @IsEnum(GranularPermissionResourceType) + @IsNotEmpty() + type: GranularPermissionResourceType; + + @IsBoolean() + @IsNotEmpty() + applyToAll: boolean; + + @IsArray() + @Validate(UuidOrNameConstraint, { each: true }) + @Validate(ResourcesValidationConstraint) + resources: string[]; + + @ValidateNested() + @Type((opts) => { + const type = opts?.object?.type; + if (type === GranularPermissionResourceType.DATA_SOURCE) { + return DataSourcePermissionsDto; + } + if (type === GranularPermissionResourceType.WORKFLOW) { + return WorkflowPermissionsDto; + } + return AppPermissionsDto; + }) + @IsNotEmpty() + permissions: AppPermissionsDto | WorkflowPermissionsDto | DataSourcePermissionsDto; +} + +// Workspace-level permissions +export class WorkspacePermissionsDto { + @IsBoolean() + @IsOptional() + appCreate?: boolean; + + @IsBoolean() + @IsOptional() + appDelete?: boolean; + + @IsBoolean() + @IsOptional() + folderCRUD?: boolean; + + @IsBoolean() + @IsOptional() + orgConstantCRUD?: boolean; + + @IsBoolean() + @IsOptional() + workflowCreate?: boolean; + + @IsBoolean() + @IsOptional() + workflowDelete?: boolean; + + @IsBoolean() + @IsOptional() + dataSourceCreate?: boolean; + + @IsBoolean() + @IsOptional() + dataSourceDelete?: boolean; + + @IsBoolean() + @IsOptional() + appPromote?: boolean; + + @IsBoolean() + @IsOptional() + appRelease?: boolean; +} + +// Main request DTO for creating a group +export class CreateGroupExternalDto { + @IsString() + @IsNotEmpty() + @Transform(({ value }) => value?.trim()) + @MaxLength(50, { + message: 'Group name cannot exceed 50 characters', + }) + @Matches(/^[a-zA-Z0-9_ -]+$/, { + message: 'Group name can only contain letters, numbers, underscores, spaces and hyphens', + }) + name: string; + + @ValidateNested() + @Type(() => WorkspacePermissionsDto) + @IsOptional() + permissions?: WorkspacePermissionsDto; + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => GranularPermissionDto) + @IsOptional() + granularPermissions?: GranularPermissionDto[]; +} diff --git a/server/src/modules/external-apis/dto/index.ts b/server/src/modules/external-apis/dto/index.ts index f93b9e22bf..855f9bc380 100644 --- a/server/src/modules/external-apis/dto/index.ts +++ b/server/src/modules/external-apis/dto/index.ts @@ -289,3 +289,32 @@ export class ValidatePATSessionDto { @IsString() accessToken: string; } + +export class UserDetailKeyValueDto { + @IsString() + @IsNotEmpty() + key: string; + + @IsString() + @IsNotEmpty() + value: string; +} + +export class UpdateUserMetadataDto { + @IsArray() + @ValidateNested({ each: true }) + @Type(() => UserDetailKeyValueDto) + userDetails: UserDetailKeyValueDto[]; +} + +// Export groups DTOs +export { + CreateGroupExternalDto, + GranularPermissionDto, + GranularPermissionResourceType, + AppEnvironment, + AppPermissionsDto, + DataSourcePermissionsDto, + WorkspacePermissionsDto, + WorkflowPermissionsDto, +} from './groups.dto'; \ No newline at end of file diff --git a/server/src/modules/external-apis/module.ts b/server/src/modules/external-apis/module.ts index 4d2e657906..147b0d058c 100644 --- a/server/src/modules/external-apis/module.ts +++ b/server/src/modules/external-apis/module.ts @@ -20,16 +20,23 @@ import { OrganizationRepository } from '@modules/organizations/repository'; import { SubModule } from '@modules/app/sub-module'; import { AppsRepository } from '@modules/apps/repository'; import { UserRepository } from '@modules/users/repositories/repository'; +import { OrganizationUsersModule } from '@modules/organization-users/module'; export class ExternalApiModule extends SubModule { static async register(configs?: { IS_GET_CONTEXT: boolean }, isMainImport: boolean = false): Promise { - const { ExternalApisController, ExternalApisService, ExternalApiUtilService, ExternalApisAppsController } = - await this.getProviders(configs, 'external-apis', [ - 'controller', - 'service', - 'util.service', - 'controllers/apps.controller', - ]); + const { + ExternalApisController, + ExternalApisService, + ExternalApiUtilService, + ExternalApisAppsController, + ExternalApisGroupsController, + } = await this.getProviders(configs, 'external-apis', [ + 'controller', + 'service', + 'util.service', + 'controllers/apps.controller', + 'controllers/groups.controller', + ]); return { module: ExternalApiModule, @@ -45,6 +52,7 @@ export class ExternalApiModule extends SubModule { await GitSyncModule.register(configs), await AppEnvironmentsModule.register(configs), await SessionModule.register(configs), + await OrganizationUsersModule.register(configs) ], providers: [ ExternalApiUtilService, @@ -61,7 +69,9 @@ export class ExternalApiModule extends SubModule { UserRepository, AppsRepository, ], - controllers: isMainImport ? [ExternalApisController, ExternalApisAppsController] : [], + controllers: isMainImport + ? [ExternalApisController, ExternalApisAppsController, ExternalApisGroupsController] + : [], exports: [ExternalApiUtilService], }; } diff --git a/server/src/modules/external-apis/types/index.ts b/server/src/modules/external-apis/types/index.ts index 6970352ff2..a66db9d810 100644 --- a/server/src/modules/external-apis/types/index.ts +++ b/server/src/modules/external-apis/types/index.ts @@ -14,6 +14,8 @@ interface Features { [FEATURE_KEY.PULL_EXISTING_APP]: FeatureConfig; [FEATURE_KEY.PUSH_APP_VERSION]: FeatureConfig; [FEATURE_KEY.UPDATE_USER_ROLE]: FeatureConfig; + [FEATURE_KEY.UPDATE_USER_METADATA]: FeatureConfig; + [FEATURE_KEY.GET_USER_METADATA]: FeatureConfig; [FEATURE_KEY.CREATE_ORG_GIT]: FeatureConfig; [FEATURE_KEY.AUTO_RELEASE_APP]: FeatureConfig; [FEATURE_KEY.GET_ALL_WORKSPACE_APPS]: FeatureConfig; @@ -21,6 +23,7 @@ interface Features { [FEATURE_KEY.EXPORT_APP]: FeatureConfig; [FEATURE_KEY.GENERATE_PAT]: FeatureConfig; [FEATURE_KEY.VALIDATE_PAT_SESSION]: FeatureConfig; + [FEATURE_KEY.CREATE_GROUP]: FeatureConfig; } export interface FeaturesConfig { diff --git a/server/src/modules/external-apis/util.service.ts b/server/src/modules/external-apis/util.service.ts index 7900d664be..aa0847b1ba 100644 --- a/server/src/modules/external-apis/util.service.ts +++ b/server/src/modules/external-apis/util.service.ts @@ -2,6 +2,8 @@ import { Injectable } from '@nestjs/common'; import { IExternalApiUtilService } from './Interfaces/IUtilService'; import { ValidateEditUserGroupAdditionObject } from './types'; import { EntityManager } from 'typeorm'; +import { UserDetailKeyValueDto } from './dto'; + @Injectable() export class ExternalApiUtilService implements IExternalApiUtilService { generateRandomPassword(length?: number): string { @@ -14,4 +16,21 @@ export class ExternalApiUtilService implements IExternalApiUtilService { ): Promise { throw new Error('Method not implemented.'); } + + async updateUserMetadata( + workspaceId: string, + userId: string, + userDetails: UserDetailKeyValueDto[], + manager?: EntityManager + ): Promise { + throw new Error('Method not implemented.'); + } + + async getUserMetadata( + workspaceId: string, + userId: string, + manager?: EntityManager + ): Promise { + throw new Error('Method not implemented.'); + } } diff --git a/server/src/modules/folder-apps/service.ts b/server/src/modules/folder-apps/service.ts index c90e833dfb..9a060ea398 100644 --- a/server/src/modules/folder-apps/service.ts +++ b/server/src/modules/folder-apps/service.ts @@ -1,5 +1,6 @@ import { BadRequestException, Injectable } from '@nestjs/common'; import { FolderApp } from '../../entities/folder_app.entity'; +import { AppGitSync } from '../../entities/app_git_sync.entity'; import { dbTransactionWrap } from '@helpers/database.helper'; import { EntityManager } from 'typeorm'; import { decamelizeKeys } from 'humps'; @@ -20,32 +21,15 @@ export class FolderAppsService implements IFolderAppsService { ) {} async create(folderId: string, appId: string): Promise { - return dbTransactionWrap(async (manager: EntityManager) => { - const existingFolderApp = await manager.findOne(FolderApp, { - where: { appId, folderId }, - }); - - if (existingFolderApp) { - throw new BadRequestException('App has already been added to the folder'); - } - - // TODO: check if folder under user.organizationId and user has edit permission on app - - const newFolderApp = manager.create(FolderApp, { - folderId, - appId, - createdAt: new Date(), - updatedAt: new Date(), - }); - - const folderApp = await manager.save(FolderApp, newFolderApp); - - return folderApp; - }); + return this.folderAppsUtilService.create(folderId, appId); } async remove(folderId: string, appId: string): Promise { return dbTransactionWrap(async (manager: EntityManager) => { + const gitSyncedApp = await manager.findOne(AppGitSync, { + where: { appId }, + select: ['id'], + }); // TODO: folder under user.organizationId return await manager.delete(FolderApp, { folderId, appId }); }); diff --git a/server/src/modules/folder-apps/util.service.ts b/server/src/modules/folder-apps/util.service.ts index f7a50fb18d..a9ea34ecaa 100644 --- a/server/src/modules/folder-apps/util.service.ts +++ b/server/src/modules/folder-apps/util.service.ts @@ -172,6 +172,32 @@ export class FolderAppsUtilService implements IFolderAppsUtilService { }); } + async create(folderId: string, appId: string, skipGitSyncCheck = false): Promise { + return dbTransactionWrap(async (manager: EntityManager) => { + const existingFolderApp = await manager.findOne(FolderApp, { + where: { appId }, + }); + + // If app is already in a folder, remove it first (apps can only be in one folder) + if (existingFolderApp) { + await manager.delete(FolderApp, { id: existingFolderApp.id }); + } + + // TODO: check if folder under user.organizationId and user has edit permission on app + + const newFolderApp = manager.create(FolderApp, { + folderId, + appId, + createdAt: new Date(), + updatedAt: new Date(), + }); + + const folderApp = await manager.save(FolderApp, newFolderApp); + + return folderApp; + }); + } + protected addViewableFrontendFilter( query: SelectQueryBuilder, folderAppIds: string[], @@ -182,18 +208,18 @@ export class FolderAppsUtilService implements IFolderAppsUtilService { const viewableAppsTotal = isAllEditable ? [null, ...folderAppIds] : hideAll - ? [null, ...userAppPermissions.editableAppsId] - : isAllViewable - ? [null, ...folderAppIds].filter((id) => !userAppPermissions.hiddenAppsId.includes(id)) - : [ - null, - ...Array.from( - new Set([ - ...userAppPermissions.editableAppsId, - ...userAppPermissions.viewableAppsId.filter((id) => !userAppPermissions.hiddenAppsId.includes(id)), - ]) - ), - ]; + ? [null, ...userAppPermissions.editableAppsId] + : isAllViewable + ? [null, ...folderAppIds].filter((id) => !userAppPermissions.hiddenAppsId.includes(id)) + : [ + null, + ...Array.from( + new Set([ + ...userAppPermissions.editableAppsId, + ...userAppPermissions.viewableAppsId.filter((id) => !userAppPermissions.hiddenAppsId.includes(id)), + ]) + ), + ]; const viewableAppIds = [null, ...viewableAppsTotal.filter((id) => folderAppIds.includes(id))]; diff --git a/server/src/modules/folders/service.ts b/server/src/modules/folders/service.ts index 91587b6ba1..0e5faf459a 100644 --- a/server/src/modules/folders/service.ts +++ b/server/src/modules/folders/service.ts @@ -1,5 +1,7 @@ -import { Injectable } from '@nestjs/common'; +import { BadRequestException, Injectable } from '@nestjs/common'; import { Folder } from '@entities/folder.entity'; +import { FolderApp } from '../../entities/folder_app.entity'; +import { AppGitSync } from '../../entities/app_git_sync.entity'; import { decamelizeKeys } from 'humps'; import { CreateFolderDto, UpdateFolderDto } from '@modules/folders/dto'; import { IFoldersService } from './interfaces/IService'; @@ -8,31 +10,12 @@ import { DeleteResult } from 'typeorm'; import { DataBaseConstraints } from '@helpers/db_constraints.constants'; import { dbTransactionWrap } from '@helpers/database.helper'; import { EntityManager } from 'typeorm'; +import { FoldersUtilService } from './util.service'; @Injectable() export class FoldersService implements IFoldersService { + constructor(protected foldersUtilService: FoldersUtilService) {} async createFolder(user, createFolderDto: CreateFolderDto) { - const folderName = createFolderDto.name; - const type = createFolderDto.type; - return await dbTransactionWrap(async (manager: EntityManager) => { - const folder = await catchDbException(async () => { - return await manager.save( - manager.create(Folder, { - name: folderName, - createdAt: new Date(), - updatedAt: new Date(), - organizationId: user?.organizationId, - type, - }) - ); - }, [ - { - dbConstraint: DataBaseConstraints.FOLDER_NAME_UNIQUE, - message: 'This folder name is already taken.', - }, - ]); - - return decamelizeKeys(folder); - }); + return this.foldersUtilService.createFolder(user, createFolderDto); } async updateFolder(user, id, updateFolderDto: UpdateFolderDto) { const folderId = id; @@ -54,6 +37,20 @@ export class FoldersService implements IFoldersService { const folder = await manager.findOneOrFail(Folder, { where: { id, organizationId: user.organizationId }, }); + + const gitSyncedAppInFolder = await manager + .createQueryBuilder(AppGitSync, 'ags') + .innerJoin(FolderApp, 'fa', 'fa.app_id = ags.app_id') + .where('fa.folder_id = :folderId', { folderId: folder.id }) + .select('ags.id') + .getOne(); + + if (gitSyncedAppInFolder) { + throw new BadRequestException( + "Folders with apps synced to git can't be deleted. Delete the git apps and try again." + ); + } + return manager.delete(Folder, { id: folder.id, organizationId: user.organizationId }); }); } diff --git a/server/src/modules/folders/util.service.ts b/server/src/modules/folders/util.service.ts index 1dac8aa0f6..d7587fe793 100644 --- a/server/src/modules/folders/util.service.ts +++ b/server/src/modules/folders/util.service.ts @@ -3,6 +3,11 @@ import { EntityManager, SelectQueryBuilder } from 'typeorm'; import { User } from '@entities/user.entity'; import { Folder } from '@entities/folder.entity'; import { IFoldersUtilService } from './interfaces/IUtilService'; +import { CreateFolderDto } from './dto'; +import { dbTransactionWrap } from '@helpers/database.helper'; +import { catchDbException } from '@helpers/utils.helper'; +import { DataBaseConstraints } from '@helpers/db_constraints.constants'; +import { decamelizeKeys } from 'humps'; @Injectable() export class FoldersUtilService implements IFoldersUtilService { async allFolders(user: User, manager: EntityManager, type = 'front-end'): Promise { @@ -12,6 +17,37 @@ export class FoldersUtilService implements IFoldersUtilService { return await manager.findOneOrFail(Folder, { where: { id: folderId } }); } + async findByName(folderName: string, organizationId: string): Promise { + return await dbTransactionWrap(async (manager: EntityManager) => { + return await manager.findOne(Folder, { where: { name: folderName, organizationId } }); + }); + } + + async createFolder(user, createFolderDto: CreateFolderDto) { + const folderName = createFolderDto.name; + const type = createFolderDto.type; + return await dbTransactionWrap(async (manager: EntityManager) => { + const folder = await catchDbException(async () => { + return await manager.save( + manager.create(Folder, { + name: folderName, + createdAt: new Date(), + updatedAt: new Date(), + organizationId: user?.organizationId, + type, + }) + ); + }, [ + { + dbConstraint: DataBaseConstraints.FOLDER_NAME_UNIQUE, + message: 'This folder name is already taken.', + }, + ]); + + return decamelizeKeys(folder); + }); + } + private getAllFoldersQuery( organizationId: string, manager: EntityManager, diff --git a/server/src/modules/git-sync/base-git-util.service.ts b/server/src/modules/git-sync/base-git-util.service.ts index 742ae9dbd6..1c31bf6a87 100644 --- a/server/src/modules/git-sync/base-git-util.service.ts +++ b/server/src/modules/git-sync/base-git-util.service.ts @@ -28,7 +28,14 @@ export class BaseGitUtilService { throw new Error('Method not implemented.'); } - async WriteAppFile(user: User, repoPath: string, appGit: AppGitSync, version: AppVersion, app: App): Promise { + async WriteAppFile( + user: User, + appGit: AppGitSync, + version: AppVersion, + app: App, + appPath: string, + parentDir: string + ): Promise { throw new Error('Method not implemented.'); } diff --git a/server/src/modules/git-sync/dto/index.ts b/server/src/modules/git-sync/dto/index.ts index 6bc1204fd8..96f65449b7 100644 --- a/server/src/modules/git-sync/dto/index.ts +++ b/server/src/modules/git-sync/dto/index.ts @@ -29,9 +29,3 @@ export class OrganizationGitStatusUpdateDto { @IsBoolean() isEnabled: boolean; } - -export class OrganizationGitHTTPSUpdateDto { - @IsOptional() - @IsBoolean() - autoCommit: boolean; -} diff --git a/server/src/modules/git-sync/git-sync-adapter.ts b/server/src/modules/git-sync/git-sync-adapter.ts new file mode 100644 index 0000000000..17e8636e27 --- /dev/null +++ b/server/src/modules/git-sync/git-sync-adapter.ts @@ -0,0 +1,3 @@ +import { Injectable } from '@nestjs/common'; +@Injectable() +export class GitSyncAdapter {} \ No newline at end of file diff --git a/server/src/modules/git-sync/module.ts b/server/src/modules/git-sync/module.ts index 0867a307cd..90e70aa9b0 100644 --- a/server/src/modules/git-sync/module.ts +++ b/server/src/modules/git-sync/module.ts @@ -23,6 +23,7 @@ export class GitSyncModule extends SubModule { GitLabGitSyncUtilityService, BaseGitUtilService, BaseGitSyncService, + GitSyncAdapter, } = await this.getProviders(configs, 'git-sync', [ 'controller', 'service', @@ -35,6 +36,7 @@ export class GitSyncModule extends SubModule { 'providers/gitlab/util.service', 'base-git-util.service', 'base-git.service', + 'git-sync-adapter', ]); return { @@ -61,6 +63,7 @@ export class GitSyncModule extends SubModule { GitLabGitSyncUtilityService, SourceControlProviderService, FeatureAbilityFactory, + GitSyncAdapter, ], exports: [ HTTPSGitSyncUtilityService, @@ -68,6 +71,8 @@ export class GitSyncModule extends SubModule { GitLabGitSyncUtilityService, BaseGitSyncService, BaseGitUtilService, + GitSyncAdapter, + OrganizationGitSyncRepository, ], }; } diff --git a/server/src/modules/group-permissions/module.ts b/server/src/modules/group-permissions/module.ts index 6c8d478242..4a349389de 100644 --- a/server/src/modules/group-permissions/module.ts +++ b/server/src/modules/group-permissions/module.ts @@ -46,7 +46,7 @@ export class GroupPermissionsModule extends SubModule { GroupPermissionsRepository, FeatureAbilityFactory, ], - exports: [GroupPermissionsUtilService], + exports: [GroupPermissionsUtilService, GranularPermissionsUtilService], }; } } diff --git a/server/src/modules/group-permissions/repository.ts b/server/src/modules/group-permissions/repository.ts index d4fe715da6..4e4d23e9b8 100644 --- a/server/src/modules/group-permissions/repository.ts +++ b/server/src/modules/group-permissions/repository.ts @@ -156,8 +156,7 @@ export class GroupPermissionsRepository extends Repository { type: type as ResourceType, }; } - - return manager.find(GranularPermissions, findOptions); + return await manager.find(GranularPermissions, findOptions); }, manager || this.manager); } diff --git a/server/src/modules/import-export-resources/service.ts b/server/src/modules/import-export-resources/service.ts index 4e89de8fa6..6f19ac8a4f 100644 --- a/server/src/modules/import-export-resources/service.ts +++ b/server/src/modules/import-export-resources/service.ts @@ -95,13 +95,13 @@ export class ImportExportResourcesService { const pages = appParams?.pages; const queries = appParams?.dataQueries; const components = appParams?.components; - (pages?.length || queries?.length || components?.length) && - (await this.appImportExportService.checkIfGroupPermissionsExist( + if (pages?.length || queries?.length || components?.length) + await this.appImportExportService.checkIfGroupPermissionsExist( pages, queries, components, user.organizationId - )); + ); } } } diff --git a/server/src/modules/modules/module.ts b/server/src/modules/modules/module.ts index 985520df21..112880f92c 100644 --- a/server/src/modules/modules/module.ts +++ b/server/src/modules/modules/module.ts @@ -17,6 +17,7 @@ import { ImportExportResourcesModule } from '@modules/import-export-resources/mo import { RolesRepository } from '@modules/roles/repository'; import { AppGitRepository } from '@modules/app-git/repository'; import { GroupPermissionsRepository } from '@modules/group-permissions/repository'; +import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; import { AppHistoryModule } from '@modules/app-history/module'; @Module({}) export class ModulesModule { @@ -60,6 +61,7 @@ export class ModulesModule { RolesRepository, AppGitRepository, GroupPermissionsRepository, + OrganizationGitSyncRepository, ], }; } diff --git a/server/src/modules/organization-users/module.ts b/server/src/modules/organization-users/module.ts index b56e21499d..9a8b0b66d6 100644 --- a/server/src/modules/organization-users/module.ts +++ b/server/src/modules/organization-users/module.ts @@ -44,7 +44,7 @@ export class OrganizationUsersModule extends SubModule { GroupPermissionsRepository, FeatureAbilityFactory, ], - exports: [OrganizationUsersUtilService], + exports: [OrganizationUsersUtilService, UserDetailsService], }; } } diff --git a/server/src/modules/versions/dto/index.ts b/server/src/modules/versions/dto/index.ts index 9b92ecee8c..93590b9189 100644 --- a/server/src/modules/versions/dto/index.ts +++ b/server/src/modules/versions/dto/index.ts @@ -1,6 +1,7 @@ import { IsNotEmpty, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator'; import { Transform } from 'class-transformer'; import { sanitizeInput } from '@helpers/utils.helper'; +import { AppVersionType } from '@entities/app_version.entity'; export class VersionCreateDto { @IsString() @@ -19,6 +20,9 @@ export class VersionCreateDto { @IsOptional() versionDescription: string; + + @IsOptional() + versionType?: AppVersionType; } export class PromoteVersionDto { @@ -36,4 +40,7 @@ export class DraftVersionDto { @IsOptional() versionDescription: string; + + @IsOptional() + versionType?: AppVersionType; } diff --git a/server/src/modules/versions/find-relations.util.ts b/server/src/modules/versions/find-relations.util.ts new file mode 100644 index 0000000000..4c6ac99d55 --- /dev/null +++ b/server/src/modules/versions/find-relations.util.ts @@ -0,0 +1,212 @@ +import { AppVersion } from '@entities/app_version.entity'; +import { DataSource, EntityManager } from 'typeorm'; +import { dbTransactionWrap } from '@helpers/database.helper'; +import { App } from '@entities/app.entity'; +import { AppEnvironment } from '@entities/app_environments.entity'; +import { Component } from '@entities/component.entity'; +import { DataQuery } from '@entities/data_query.entity'; +import { DataSourceOptions } from '@entities/data_source_options.entity'; +import { EventHandler } from '@entities/event_handler.entity'; +import { Page } from '@entities/page.entity'; +import { User } from '@entities/user.entity'; +import { DataSourceScopes } from '@modules/data-sources/constants'; + +export async function findAllRelationsForVersion(versionId: string, manager?: EntityManager): Promise { + // this.getUuidFieldsForExport() + return await dbTransactionWrap(async (manager: EntityManager) => {}, manager); +} +async function getUuidFieldsForExport( + user: User, + id: string, + searchParams: any = {} +): Promise<{ + appId: string; + versionIds: string[]; + dataSourceIds: string[]; + dataQueryIds: string[]; + dataSourceOptionIds: string[]; + pageIds: string[]; + componentIds: string[]; + layoutIds: string[]; + eventHandlerIds: string[]; + environmentIds: string[]; + permissionIds: string[]; +}> { + const versionId = searchParams?.version_id; + + return await dbTransactionWrap(async (manager: EntityManager) => { + // Get App ID only + const app = await manager + .createQueryBuilder(App, 'apps') + .select('apps.id') + .where('apps.id = :id AND apps.organization_id = :organizationId', { + id, + organizationId: user?.organizationId, + }) + .getOne(); + + if (!app) { + throw new Error('App not found'); + } + + // Get App Version IDs only + const queryAppVersions = manager + .createQueryBuilder(AppVersion, 'app_versions') + .select('app_versions.id') + .where('app_versions.appId = :appId', { appId: app.id }); + + if (versionId) { + queryAppVersions.andWhere('app_versions.id = :versionId', { versionId }); + } + + const appVersions = await queryAppVersions.getMany(); + const versionIds = appVersions.map((v) => v.id); + + // Get Legacy Local Data Source IDs only + // const legacyLocalDataSources = versionIds.length + // ? await manager + // .createQueryBuilder(DataSource, 'data_sources') + // .select('data_sources.id') + // .where('data_sources.appVersionId IN(:...versionId)', { versionId: versionIds }) + // .andWhere('data_sources.scope != :scope', { scope: DataSourceScopes.GLOBAL }) + // .getMany() + // : []; + + // Get Environment IDs only + const appEnvironments = await manager + .createQueryBuilder(AppEnvironment, 'app_environments') + .select('app_environments.id') + .where('app_environments.organizationId = :organizationId', { + organizationId: user?.organizationId, + }) + .getMany(); + + const environmentIds = appEnvironments.map((env) => env.id); + + // Get Global Data Source IDs from queries + const globalQueries = await manager + .createQueryBuilder(DataQuery, 'data_query') + .select(['data_query.dataSourceId']) + .innerJoin('data_query.dataSource', 'dataSource') + .where('data_query.appVersionId IN(:...versionId)', { versionId: versionIds }) + .andWhere('dataSource.scope = :scope', { scope: DataSourceScopes.GLOBAL }) + .getMany(); + + const globalDataSourceIds = [...new Set(globalQueries.map((gq) => gq.dataSourceId))]; + + // Combine all data source IDs + // const allDataSourceIds = [...legacyLocalDataSources.map((ds) => ds.id), ...globalDataSourceIds]; + const allDataSourceIds = [...globalDataSourceIds]; + + // Get Data Query IDs only + const dataQueries = allDataSourceIds.length + ? await manager + .createQueryBuilder(DataQuery, 'data_queries') + .select('data_queries.id') + .where('data_queries.dataSourceId IN(:...dataSourceId)', { + dataSourceId: allDataSourceIds, + }) + .andWhere('data_queries.appVersionId IN(:...versionId)', { versionId: versionIds }) + .getMany() + : []; + + const dataQueryIds = dataQueries.map((dq) => dq.id); + + // Get Data Source Option IDs only + const dataSourceOptions = allDataSourceIds.length + ? await manager + .createQueryBuilder(DataSourceOptions, 'data_source_options') + .select('data_source_options.id') + .where( + 'data_source_options.environmentId IN(:...environmentId) AND data_source_options.dataSourceId IN(:...dataSourceId)', + { + environmentId: environmentIds, + dataSourceId: allDataSourceIds, + } + ) + .getMany() + : []; + + const dataSourceOptionIds = dataSourceOptions.map((dso) => dso.id); + + // Get Page IDs only + const pages = await manager + .createQueryBuilder(Page, 'page') + .select('page.id') + .where('page.appVersionId IN(:...versionId)', { versionId: versionIds }) + .getMany(); + + const pageIds = pages.map((p) => p.id); + + // Get Page Permission IDs + // const pagePermissions = pageIds.length + // ? await manager + // .createQueryBuilder(Permissions, 'permission') + // .select('permission.id') + // .where('permission.pageId IN(:...pageId)', { pageId: pageIds }) + // .getMany() + // : []; + + // Get Component IDs and Layout IDs + const components = pageIds.length + ? await manager + .createQueryBuilder(Component, 'components') + .select(['components.id']) + .leftJoin('components.layouts', 'layouts') + .addSelect('layouts.id') + .where('components.pageId IN(:...pageId)', { pageId: pageIds }) + .getMany() + : []; + + const componentIds = components.map((c) => c.id); + const layoutIds = components.flatMap((c) => c.layouts?.map((l) => l.id) || []); + + // Get Component Permission IDs + // const componentPermissions = componentIds.length + // ? await manager + // .createQueryBuilder(Permissions, 'permission') + // .select('permission.id') + // .where('permission.componentId IN(:...componentId)', { componentId: componentIds }) + // .getMany() + // : []; + + // // Get Data Query Permission IDs + // const queryPermissions = dataQueryIds.length + // ? await manager + // .createQueryBuilder(Permissions, 'permission') + // .select('permission.id') + // .where('permission.dataQueryId IN(:...dataQueryId)', { dataQueryId: dataQueryIds }) + // .getMany() + // : []; + + // Get Event Handler IDs only + const events = await manager + .createQueryBuilder(EventHandler, 'event_handlers') + .select('event_handlers.id') + .where('event_handlers.appVersionId IN(:...versionId)', { versionId: versionIds }) + .getMany(); + + const eventHandlerIds = events.map((e) => e.id); + + // Combine all permission IDs + // const allPermissionIds = [ + // ...pagePermissions.map((p) => p.id), + // ...componentPermissions.map((p) => p.id), + // ...queryPermissions.map((p) => p.id), + // ]; + + return { + appId: app.id, + versionIds, + dataSourceIds: allDataSourceIds, + dataQueryIds, + dataSourceOptionIds, + pageIds, + componentIds, + layoutIds, + eventHandlerIds, + environmentIds, + // permissionIds: allPermissionIds, + }; + }); +} diff --git a/server/src/modules/versions/module.ts b/server/src/modules/versions/module.ts index acd5d47ee7..c52d7d6181 100644 --- a/server/src/modules/versions/module.ts +++ b/server/src/modules/versions/module.ts @@ -12,6 +12,7 @@ import { FeatureAbilityFactory } from './ability'; import { AppPermissionsModule } from '@modules/app-permissions/module'; import { GroupPermissionsRepository } from '@modules/group-permissions/repository'; import { SubModule } from '@modules/app/sub-module'; +import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; import { AppHistoryModule } from '@modules/app-history/module'; export class VersionModule extends SubModule { @@ -64,6 +65,7 @@ export class VersionModule extends SubModule { DataQueryRepository, DataSourcesRepository, VersionRepository, + OrganizationGitSyncRepository, AppsRepository, AppGitRepository, VersionsCreateService, diff --git a/server/src/modules/versions/repository.ts b/server/src/modules/versions/repository.ts index 8659cd2aa4..24d94ea51f 100644 --- a/server/src/modules/versions/repository.ts +++ b/server/src/modules/versions/repository.ts @@ -275,4 +275,14 @@ export class VersionRepository extends Repository { return appVersions; }, manager || this.manager); } + + async getAllVersions(appId: string, manager?: EntityManager): Promise { + return dbTransactionWrap(async (manager: EntityManager) => { + const appVersions = await manager.find(AppVersion, { + where: { appId: appId }, + relations: ['user'], + }); + return appVersions; + }, manager || this.manager); + } } diff --git a/server/src/modules/versions/service.ts b/server/src/modules/versions/service.ts index 91dbf399d4..28fbfd5adc 100644 --- a/server/src/modules/versions/service.ts +++ b/server/src/modules/versions/service.ts @@ -1,5 +1,5 @@ import { App } from '@entities/app.entity'; -import {BadRequestException, Injectable, InternalServerErrorException, NotAcceptableException} from '@nestjs/common'; +import { BadRequestException, Injectable, NotAcceptableException } from '@nestjs/common'; import { VersionRepository } from './repository'; import { AppVersion, AppVersionStatus } from '@entities/app_version.entity'; import { DraftVersionDto, PromoteVersionDto, VersionCreateDto } from './dto'; @@ -8,7 +8,7 @@ import { AppEnvironmentUtilService } from '@modules/app-environments/util.servic import { EntityManager, MoreThan } from 'typeorm'; import { dbTransactionWrap } from '@helpers/database.helper'; import { VersionsCreateService } from './services/create.service'; -import { camelizeKeys, decamelizeKeys } from 'humps'; +import { camelizeKeys } from 'humps'; import { PageService } from '@modules/apps/services/page.service'; import { EventsService } from '@modules/apps/services/event.service'; import { AppsUtilService } from '@modules/apps/util.service'; @@ -28,6 +28,8 @@ import { RequestContext } from '@modules/request-context/service'; import { AUDIT_LOGS_REQUEST_CONTEXT_KEY } from '@modules/app/constants'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { AppGitRepository } from '@modules/app-git/repository'; +import { AppHistoryUtilService } from '@modules/app-history/util.service'; +import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; @Injectable() export class VersionService implements IVersionService { @@ -42,7 +44,9 @@ export class VersionService implements IVersionService { protected readonly organizationThemesUtilService: OrganizationThemesUtilService, protected readonly versionsUtilService: VersionUtilService, protected readonly eventEmitter: EventEmitter2, - protected readonly appGitRepository: AppGitRepository + protected readonly appGitRepository: AppGitRepository, + protected readonly appHistoryUtilService: AppHistoryUtilService, + protected readonly organizationGitRepository: OrganizationGitSyncRepository ) {} /** @@ -127,60 +131,9 @@ export class VersionService implements IVersionService { } async createVersion(app: App, user: User, versionCreateDto: VersionCreateDto) { - const { versionName, versionFromId, versionDescription } = versionCreateDto; - if (!versionName || versionName.trim().length === 0) { - // need to add logic to get the version name -> from the version created at from - throw new BadRequestException('Version name cannot be empty.'); - } - const { organizationId } = user; - const context = await this.beforeVersionCreate(app, user, versionCreateDto); - - const result = await dbTransactionWrap(async (manager: EntityManager) => { - const versionFrom = await manager.findOneOrFail(AppVersion, { - where: { id: versionFromId, appId: app.id }, - relations: ['dataSources', 'dataSources.dataQueries', 'dataSources.dataSourceOptions'], - }); - - const firstPriorityEnv = await this.appEnvironmentUtilService.get(organizationId, null, true, manager); - - const appVersion = await manager.save( - AppVersion, - manager.create(AppVersion, { - name: versionName, - appId: app.id, - definition: versionFrom?.definition, - currentEnvironmentId: firstPriorityEnv?.id, - createdAt: new Date(), - updatedAt: new Date(), - status: AppVersionStatus.DRAFT, - parentVersionId: versionCreateDto.versionFromId ? versionFromId : null, - description: versionDescription ? versionDescription : null, - }) - ); - - await this.createVersionService.setupNewVersion(appVersion, versionFrom, organizationId, manager); - - //APP_VERSION_CREATE audit - RequestContext.setLocals(AUDIT_LOGS_REQUEST_CONTEXT_KEY, { - userId: user.id, - organizationId: user.organizationId, - resourceId: app.id, - resourceName: app.name, - metadata: { - data: { - updatedAppVersionName: versionCreateDto.versionName, - updatedAppVersionFrom: versionCreateDto.versionFromId, - updatedAppVersionEnvironment: versionCreateDto.environmentId, - }, - }, - }); - - return decamelizeKeys(appVersion); - }); - + const result = await this.versionsUtilService.createVersion(app, user, versionCreateDto); await this.afterVersionCreate(context, result, app, user); - return result; } @@ -281,6 +234,7 @@ export class VersionService implements IVersionService { response['modules'] = await Promise.all(modules.map((module) => prepareResponse(module, undefined))); + // need to add freeze version logic here // need to add freeze version logic here return response; } @@ -293,7 +247,10 @@ export class VersionService implements IVersionService { await this.versionsUtilService.updateVersion(appVersion, appVersionUpdateDto); if (app.type === 'workflow') { await this.appUtilService.updateWorflowVersion(appVersion, appVersionUpdateDto, app); - } else if (appVersion.name !== appVersionUpdateDto.name) { + } else if ( + appVersion.name !== appVersionUpdateDto.name && + appVersionUpdateDto.status !== AppVersionStatus.PUBLISHED + ) { const versionRenameDto = { user: user, appVersion: appVersion, @@ -305,8 +262,9 @@ export class VersionService implements IVersionService { } const operationTimestamp = Date.now(); - this.afterVersionUpdate(context, app, user, appVersionUpdateDto, user.id, operationTimestamp) - .catch((err) => console.error('[AppHistory] Fire-and-forget afterVersionUpdate failed:', err.message)); + this.afterVersionUpdate(context, app, user, appVersionUpdateDto, user.id, operationTimestamp).catch((err) => + console.error('[AppHistory] Fire-and-forget afterVersionUpdate failed:', err.message) + ); RequestContext.setLocals(AUDIT_LOGS_REQUEST_CONTEXT_KEY, { userId: user.id, @@ -326,8 +284,9 @@ export class VersionService implements IVersionService { await this.versionsUtilService.updateVersion(appVersion, appVersionUpdateDto); const settingsOperationTimestamp = Date.now(); - this.afterVersionSettingsUpdate(context, app, user, appVersionUpdateDto, user.id, settingsOperationTimestamp) - .catch((err) => console.error('[AppHistory] Fire-and-forget afterVersionSettingsUpdate failed:', err.message)); + this.afterVersionSettingsUpdate(context, app, user, appVersionUpdateDto, user.id, settingsOperationTimestamp).catch( + (err) => console.error('[AppHistory] Fire-and-forget afterVersionSettingsUpdate failed:', err.message) + ); RequestContext.setLocals(AUDIT_LOGS_REQUEST_CONTEXT_KEY, { userId: user.id, @@ -412,8 +371,8 @@ export class VersionService implements IVersionService { user: User, draftVersionDto: DraftVersionDto, manager?: EntityManager - ): Promise { - const { versionFromId } = draftVersionDto; + ): Promise { + const { versionFromId, versionType } = draftVersionDto; const parentVersion = await this.versionRepository.findVersion(versionFromId); const childVersionApps = await this.versionRepository.findParentVersionApps(versionFromId); const childVersionAppsCount = childVersionApps.length; @@ -421,6 +380,7 @@ export class VersionService implements IVersionService { ...draftVersionDto, versionName: `${parentVersion?.name}_${childVersionAppsCount + 1}`, versionDescription: '', + versionType: versionType, }; const draftVersion = await this.createVersion(app, user, createVersionDto); return draftVersion; diff --git a/server/src/modules/versions/services/create.service.ts b/server/src/modules/versions/services/create.service.ts index ae0717cb02..68761d3298 100644 --- a/server/src/modules/versions/services/create.service.ts +++ b/server/src/modules/versions/services/create.service.ts @@ -41,9 +41,9 @@ export class VersionsCreateService implements IVersionsCreateService { manager: EntityManager ): Promise { await dbTransactionWrap(async (manager: EntityManager) => { - (appVersion.showViewerNavigation = versionFrom.showViewerNavigation), - (appVersion.globalSettings = versionFrom.globalSettings), - (appVersion.pageSettings = versionFrom.pageSettings); + appVersion.showViewerNavigation = versionFrom.showViewerNavigation; + appVersion.globalSettings = versionFrom.globalSettings; + appVersion.pageSettings = versionFrom.pageSettings; await manager.save(appVersion); const oldDataQueryToNewMapping = await this.createNewDataSourcesAndQueriesForVersion( @@ -126,6 +126,7 @@ export class VersionsCreateService implements IVersionsCreateService { name: dataSource.name, kind: dataSource.kind, type: dataSource.type, + co_relation_id: dataSource?.co_relation_id, appVersionId: appVersion.id, }; const newDataSource = await manager.save(manager.create(DataSource, dataSourceParams)); @@ -139,6 +140,7 @@ export class VersionsCreateService implements IVersionsCreateService { options: dataQuery.options, dataSourceId: newDataSource.id, appVersionId: appVersion.id, + co_relation_id: dataQuery?.co_relation_id, }; const newQuery = await manager.save(manager.create(DataQuery, dataQueryParams)); @@ -154,6 +156,7 @@ export class VersionsCreateService implements IVersionsCreateService { newEvent.event = event.event; newEvent.index = event.index ?? index; newEvent.appVersionId = appVersion.id; + newEvent.co_relation_id = event?.co_relation_id; await manager.save(newEvent); }); @@ -171,6 +174,7 @@ export class VersionsCreateService implements IVersionsCreateService { options: globalQuery.options, dataSourceId: globalQuery.dataSourceId, appVersionId: appVersion.id, + co_relation_id: globalQuery?.co_relation_id, }; const newQuery = await manager.save(manager.create(DataQuery, dataQueryParams)); @@ -186,6 +190,7 @@ export class VersionsCreateService implements IVersionsCreateService { newEvent.event = event.event; newEvent.index = event.index ?? index; newEvent.appVersionId = appVersion.id; + newEvent.co_relation_id = event?.co_relation_id; await manager.save(newEvent); }); @@ -219,6 +224,7 @@ export class VersionsCreateService implements IVersionsCreateService { options: newOptions, dataSourceId: dataSourceMapping[dataSource.id], environmentId: appEnvironment.id, + // co_relation_id: dataSourceOption?.co_relation_id, need to review if we need this }) ); } @@ -423,6 +429,7 @@ export class VersionsCreateService implements IVersionsCreateService { disabled: page.disabled, hidden: page.hidden, appVersionId: appVersion.id, + co_relation_id: page.co_relation_id, }) ); oldPageToNewPageMapping[page.id] = savedPage.id; @@ -442,6 +449,7 @@ export class VersionsCreateService implements IVersionsCreateService { newEvent.event = event.event; newEvent.index = event.index ?? index; newEvent.appVersionId = appVersion.id; + newEvent.co_relation_id = event?.co_relation_id; await manager.save(newEvent); }); @@ -450,6 +458,7 @@ export class VersionsCreateService implements IVersionsCreateService { for (const component of page.components) { const newComponent = new Component(); newComponent.id = uuid.v4(); + newComponent.co_relation_id = component?.co_relation_id; oldComponentToNewComponentMapping[component.id] = newComponent.id; tempNewComponents.push(newComponent); } @@ -517,6 +526,7 @@ export class VersionsCreateService implements IVersionsCreateService { originalComponent.layouts.forEach((layout) => { const newLayout = new Layout(); newLayout.id = uuid.v4(); + newLayout.co_relation_id = layout?.co_relation_id; newLayout.type = layout.type; newLayout.top = layout.top; newLayout.left = layout.left; @@ -533,8 +543,8 @@ export class VersionsCreateService implements IVersionsCreateService { const componentEvents = allEvents.filter((event) => event.sourceId === originalComponent.id); componentEvents.forEach(async (event, index) => { const newEvent = new EventHandler(); - newEvent.id = uuid.v4(); + newEvent.co_relation_id = event?.co_relation_id; newEvent.name = event.name; newEvent.sourceId = newComponent.id; newEvent.target = event.target; @@ -639,7 +649,6 @@ export class VersionsCreateService implements IVersionsCreateService { eventDefinition.table = oldComponentToNewComponentMapping[eventDefinition.table]; } event.event = eventDefinition; - await manager.save(event); } } diff --git a/server/src/modules/versions/util.service.ts b/server/src/modules/versions/util.service.ts index 7c925de122..90eb8233e7 100644 --- a/server/src/modules/versions/util.service.ts +++ b/server/src/modules/versions/util.service.ts @@ -1,16 +1,31 @@ -import { AppVersion } from '@entities/app_version.entity'; +import { AppVersion, AppVersionStatus, AppVersionType } from '@entities/app_version.entity'; import { VersionRepository } from './repository'; import { AppVersionUpdateDto } from '@dto/app-version-update.dto'; import { BadRequestException, ForbiddenException, Injectable } from '@nestjs/common'; import { IVersionUtilService } from './interfaces/IUtilService'; import { dbTransactionWrap } from '@helpers/database.helper'; -import { EntityManager } from 'typeorm'; +import { EntityManager, Not } from 'typeorm'; import { App } from '@entities/app.entity'; import { User } from '@entities/user.entity'; +import { VersionsCreateService } from './services/create.service'; +import { AUDIT_LOGS_REQUEST_CONTEXT_KEY } from '@modules/app/constants'; +import { RequestContext } from '@modules/request-context/service'; +import { VersionCreateDto } from './dto'; +import { decamelizeKeys } from 'humps'; +import { AppEnvironmentUtilService } from '@modules/app-environments/util.service'; +import { AppHistoryUtilService } from '@modules/app-history/util.service'; +import { ACTION_TYPE } from '@modules/app-history/constants'; +import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; @Injectable() export class VersionUtilService implements IVersionUtilService { - constructor(protected readonly versionRepository: VersionRepository) {} + constructor( + protected readonly versionRepository: VersionRepository, + protected readonly createVersionService: VersionsCreateService, + protected readonly appEnvironmentUtilService: AppEnvironmentUtilService, + protected readonly organizationGitSyncRepository: OrganizationGitSyncRepository, + protected readonly appHistoryUtilService: AppHistoryUtilService + ) {} protected mergeDeep(target, source, seen = new WeakMap()) { if (!this.isObject(target)) { target = {}; @@ -97,6 +112,138 @@ export class VersionUtilService implements IVersionUtilService { }); } + private async validateDraftVersionConstraints( + app: App, + versionType: AppVersionType, + organizationId: string, + manager?: EntityManager + ): Promise { + const organizationGit = await this.organizationGitSyncRepository.findOrgGitByOrganizationId( + organizationId, + manager + ); + + if (organizationGit && organizationGit.isBranchingEnabled) { + // Only allow one draft version of type 'version' (not branch) + // Branch versions can have multiple drafts + // If versionType is not provided or is not BRANCH, check for existing draft + const isCreatingBranchVersion = versionType === AppVersionType.BRANCH; + + if (!isCreatingBranchVersion) { + const existingDraftVersion = await this.versionRepository.findOne({ + where: { + appId: app.id, + status: AppVersionStatus.DRAFT, + versionType: Not(AppVersionType.BRANCH), + }, + }); + + if (existingDraftVersion) { + throw new BadRequestException('Only one draft version is allowed when branching is enabled.'); + } + } + } + } + + async createVersion(app: App, user: User, versionCreateDto: VersionCreateDto, manager?: EntityManager) { + const { versionName, versionFromId, versionDescription, versionType } = versionCreateDto; + if (!versionName || versionName.trim().length === 0) { + // need to add logic to get the version name -> from the version created at from + throw new BadRequestException('Version name cannot be empty.'); + } + const { organizationId } = user; + const organizationGit = await this.organizationGitSyncRepository.findOrgGitByOrganizationId( + organizationId, + manager + ); + if (organizationGit && organizationGit.isBranchingEnabled) { + // Only allow one draft version of type 'version' (not branch) + // Branch versions can have multiple drafts + // If versionType is not provided or is not BRANCH, check for existing draft + const isCreatingBranchVersion = versionType === AppVersionType.BRANCH; + + if (!isCreatingBranchVersion) { + const existingDraftVersion = await this.versionRepository.findOne({ + where: { + appId: app.id, + status: AppVersionStatus.DRAFT, + versionType: Not(AppVersionType.BRANCH), + }, + }); + if (existingDraftVersion) { + throw new BadRequestException('Only one draft version is allowed when branching is enabled.'); + } + } + } + + const result = await dbTransactionWrap(async (manager: EntityManager) => { + const versionFrom = await manager.findOneOrFail(AppVersion, { + where: { id: versionFromId, appId: app.id }, + relations: ['dataSources', 'dataSources.dataQueries', 'dataSources.dataSourceOptions'], + }); + + const firstPriorityEnv = await this.appEnvironmentUtilService.get(organizationId, null, true, manager); + + const appVersion = await manager.save( + AppVersion, + manager.create(AppVersion, { + name: versionName, + appId: app.id, + definition: versionFrom?.definition, + currentEnvironmentId: firstPriorityEnv?.id, + createdAt: new Date(), + updatedAt: new Date(), + status: AppVersionStatus.DRAFT, + parentVersionId: versionCreateDto.versionFromId ? versionFromId : null, + description: versionDescription ? versionDescription : null, + versionType: versionType ? versionType : AppVersionType.VERSION, + createdBy: user.id, + co_relation_id: versionFrom.co_relation_id, + }) + ); + + await this.createVersionService.setupNewVersion(appVersion, versionFrom, organizationId, manager); + + //APP_VERSION_CREATE audit + RequestContext.setLocals(AUDIT_LOGS_REQUEST_CONTEXT_KEY, { + userId: user.id, + organizationId: user.organizationId, + resourceId: app.id, + resourceName: app.name, + metadata: { + data: { + updatedAppVersionName: versionCreateDto.versionName, + updatedAppVersionFrom: versionCreateDto.versionFromId, + updatedAppVersionEnvironment: versionCreateDto.environmentId, + }, + }, + }); + + return decamelizeKeys(appVersion); + }); + + // Queue initial history capture for the created version + try { + await this.appHistoryUtilService.queueHistoryCapture( + result.id, + ACTION_TYPE.INITIAL_SNAPSHOT, + { + operation: 'version_create', + versionName: versionCreateDto.versionName, + versionFromId: versionCreateDto.versionFromId, + appId: app.id, + appName: app.name, + }, + false, + user.id + ); + } catch (error) { + console.error('Failed to queue initial history capture for version creation:', error); + } + + return result; + } + async deleteVersion(app: App, user: User, manager?: EntityManager): Promise { return await dbTransactionWrap(async (manager: EntityManager) => { const numVersions = await this.versionRepository.getCount(app.id); @@ -117,7 +264,8 @@ export class VersionUtilService implements IVersionUtilService { } async deleteVersionGit(app: App, version: AppVersion, manager?: EntityManager): Promise { return await dbTransactionWrap(async (manager: EntityManager) => { - if (app.currentVersionId && app.currentVersionId === app.appVersions[0].id) { + // Check if the version being deleted is the currently released version + if (app.currentVersionId && app.currentVersionId === version.id) { throw new BadRequestException('You cannot delete a released version'); } await this.versionRepository.deleteById(version.id, manager); diff --git a/server/src/modules/workflows/module.ts b/server/src/modules/workflows/module.ts index 03d35888ce..a8555daa09 100644 --- a/server/src/modules/workflows/module.ts +++ b/server/src/modules/workflows/module.ts @@ -39,6 +39,7 @@ import { GroupPermissionsRepository } from '@modules/group-permissions/repositor import { WorkflowAccessGuard } from './guards/workflow-access.guard'; import { SubModule } from '@modules/app/sub-module'; import { UsersModule } from '@modules/users/module'; +import { OrganizationGitSyncRepository } from '@modules/git-sync/repository'; import { AppHistoryModule } from '@modules/app-history/module'; const WORKFLOW_SCHEDULE_QUEUE = 'workflow-schedule-queue'; @@ -182,6 +183,7 @@ export class WorkflowsModule extends SubModule { OrganizationConstantRepository, VersionRepository, AppGitRepository, + OrganizationGitSyncRepository, OrganizationRepository, AppsService, PageService, @@ -208,17 +210,17 @@ export class WorkflowsModule extends SubModule { WorkflowAccessGuard, RolesRepository, GroupPermissionsRepository, - ...(isMainImport ? [ - WorkflowStreamService, - AppsActionsListener, - // Only register BullMQ processors and schedule bootstrap when WORKER=true - // This allows running dedicated HTTP-only instances and worker instances - ...(process.env.WORKER === 'true' ? [ - WorkflowScheduleProcessor, - WorkflowExecutionProcessor, - ScheduleBootstrapService, - ] : []), - ] : []), + ...(isMainImport + ? [ + WorkflowStreamService, + AppsActionsListener, + // Only register BullMQ processors and schedule bootstrap when WORKER=true + // This allows running dedicated HTTP-only instances and worker instances + ...(process.env.WORKER === 'true' + ? [WorkflowScheduleProcessor, WorkflowExecutionProcessor, ScheduleBootstrapService] + : []), + ] + : []), ], controllers: [ WorkflowsController,